Aracılığıyla paylaş


Öğretici: Web sunucusunun güvenliğini sağlamak için TLS/SSL sertifikalarını kullanma

Şunlar için geçerlidir: ✔️ Linux VM'leri

Web sunucularının güvenliğini sağlamak için, daha önce Güvenli Yuva Katmanı (SSL) olarak bilinen aktarım katmanı güvenliği (TLS), web trafiğini şifrelemek için sertifika kullanılabilir. Bu TLS/SSL sertifikaları Azure Key Vault'ta depolanabilir ve Azure'daki Linux sanal makinelerine (VM) güvenli sertifika dağıtımlarına izin verebilir. Bu öğreticide şunların nasıl yapıldığını öğrenirsiniz:

  • Azure Key Vault oluşturma
  • Sertifikaları oluşturma veya Key Vault’a yükleme
  • VM oluşturma ve NGINX web sunucusunu yükleme
  • Sertifikayı VM'ye ekleme ve NGINX'i TLS bağlaması ile yapılandırma

Bu öğreticide Azure Cloud Shell içindeki CLI sürekli olarak en son sürüme güncelleştirilmektedir. Cloud Shell'i açmak için herhangi bir kod bloğunun üst kısmından Deneyin'i seçin.

CLI'yi yerel olarak yükleyip kullanmayı seçerseniz, bu öğretici için Azure CLI 2.0.30 veya sonraki bir sürümünü kullanmanız gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Genel bakış

Azure Key Vault, sertifikalar veya parolalar gibi şifreleme anahtarları ile gizli dizilerin güvenliğini sağlar. Key Vault, sertifika yönetimi işlemini kolaylaştırır ve bu sertifikalara erişen anahtarları denetiminizde tutmanıza olanak sağlar. Key Vault içinde otomatik olarak imzalanan bir sertifika oluşturabilir veya sahip olduğunuz güvenli bir sertifikayı karşıya yükleyebilirsiniz.

Oluşturulan sertifikaları içeren özel bir VM görüntüsü kullanmak yerine, sertifikaları çalışan bir VM’ye eklersiniz. Bu işlem, dağıtım sırasında web sunucusuna en güncel sertifikaların yüklenip yüklenmediğini kontrol eder. Ayrıca, bir sertifikayı yeniler veya değiştirirseniz yeni ve özel bir VM görüntüsü oluşturmanız da gerekmez. Siz daha fazla VM oluştururken en son sertifikalar otomatik olarak eklenir. Bu işlem sırasında, sertifikalar Azure platformundan ayrılmaz veya bir betikte, komut satırı geçmişinde veya şablonda kullanıma sunulmaz.

Azure Key Vault oluşturma

Key Vault ve sertifikalarını oluşturabilmek için az group create ile bir kaynak grubu oluşturun. Aşağıdaki örnek eastus konumunda myResourceGroupSecureWeb adlı bir kaynak grubu oluşturur:

az group create --name myResourceGroupSecureWeb --location eastus

Ardından, az keyvault create ile bir Key Vault oluşturun ve bu anahtarın VM dağıtırken kullanılmasını etkinleştirin. Her Key Vault için benzersiz bir ad gerekir ve tüm harfler küçük olmalıdır. Aşağıdaki örnekte yer alan <mykeyvault> değerini, kendi benzersiz Key Vault adınızla değiştirin:

keyvault_name=<mykeyvault>
az keyvault create \
    --resource-group myResourceGroupSecureWeb \
    --name $keyvault_name \
    --enabled-for-deployment

Sertifika oluşturma ve sertifikayı Key Vault’ta depolama

Üretim sırasında kullanım için, az keyvault certificate import komutunu kullanarak güvenilen bir sağlayıcı tarafından imzalanan geçerli bir sertifikayı içeri aktarmalısınız. Bu öğreticide, aşağıdaki örnekte varsayılan sertifika ilkesini kullanan az keyvault certificate create ile nasıl otomatik olarak imzalanan sertifika oluşturabileceğiniz gösterilmektedir:

az keyvault certificate create \
    --vault-name $keyvault_name \
    --name mycert \
    --policy "$(az keyvault certificate get-default-policy)"

VM ile kullanım için sertifika hazırlama

VM oluşturma sürecinde sertifikayı kullanmak için, az keyvault secret list-versions komutuyla sertifikanızın kimliğini alın. az vm secret format komutuyla sertifikayı dönüştürün. Aşağıdaki örnekte, sonraki adımlarda kullanım kolaylığı sağlamak için bu komutların çıkışı değişkenlere atanmaktadır:

secret=$(az keyvault secret list-versions \
          --vault-name $keyvault_name \
          --name mycert \
          --query "[?attributes.enabled].id" --output tsv)
vm_secret=$(az vm secret format --secrets "$secret" -g myResourceGroupSecureWeb --keyvault $keyvault_name)

NGINX’in güvenliğini sağlamak için cloud-init yapılandırması oluşturma

Cloud-init, Linux VM’sini ilk kez önyüklendiğinde özelleştirmeyi sağlayan, sık kullanılan bir yaklaşımdır. cloud-init’i paket yükleme, dosyalara yazma ve kullanıcılar ile güvenliği yapılandırma işlemleri için kullanabilirsiniz. Cloud-init ilk önyükleme işlemi sırasında çalıştırıldığından, yapılandırmanızı uygulamak için ek adım veya gerekli aracılar yoktur.

VM oluşturduğunuzda, sertifika ve anahtarlar korunan /var/lib/waagent/ dizininde depolanır. VM’ye sertifika ekleme ve web sunucusunu yapılandırma işlemlerini otomatikleştirmek için cloud-init’i kullanın. Bu örnekte, NGINX web sunucusunu yükleme ve yapılandırma işlemleri anlatılmaktadır. Aynı işlemleri Apache’yi yüklemek ve yapılandırmak için de kullanabilirsiniz.

cloud-init-web-server.txt adlı bir dosya oluşturup aşağıdaki yapılandırmayı yapıştırın:

#cloud-config
package_upgrade: true
packages:
  - nginx
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/mycert.cert;
        ssl_certificate_key /etc/nginx/ssl/mycert.prv;
      }
runcmd:
  - secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
  - mkdir /etc/nginx/ssl
  - cp $secretsname.crt /etc/nginx/ssl/mycert.cert
  - cp $secretsname.prv /etc/nginx/ssl/mycert.prv
  - service nginx restart

Güvenli VM oluşturma

Şimdi az vm create ile bir VM oluşturun. Bu sertifika verileri, --secrets parametresiyle Key Vault’tan eklenir. cloud-init yapılandırmasını --custom-data parametresiyle geçirirsiniz:

az vm create \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init-web-server.txt \
    --secrets "$vm_secret"

VM’nin oluşturulması, paketlerin yüklenmesi ve uygulamanın başlatılması birkaç dakika sürebilir. VM oluşturulduktan sonra, Azure CLI tarafından görüntülenen publicIpAddress değerini not edin. Bu adres, web tarayıcısında sitenize erişmek için kullanılır.

Güvenli web trafiğinin VM’nize erişmesine izin vermek için, az vm open-port komutuyla internette 443 numaralı bağlantı noktasını açın:

az vm open-port \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --port 443

Güvenli web uygulamasını sınama

Artık bir web tarayıcısı açıp adres çubuğuna https://< publicIpAddress> girebilirsiniz. VM oluşturma işleminden kendi herkese açık IP adresinizi sağlayın. Otomatik olarak imzalanan sertifika kullanıyorsanız güvenlik uyarısını kabul edin:

Web tarayıcısı güvenlik uyarısını kabul edin

Güvenli NGINX siteniz, sonra aşağıdaki örnekte olduğu gibi görüntülenir:

Çalışan güvenli NGINX sitesini görüntüleme

Sonraki adımlar

Bu öğreticide, Azure Key Vault'ta depolanan bir TLS/SSL sertifikası ile bir NGINX web sunucusunun güvenliğini sağladınız. Şunları öğrendiniz:

  • Azure Key Vault oluşturma
  • Sertifikaları oluşturma veya Key Vault’a yükleme
  • VM oluşturma ve NGINX web sunucusunu yükleme
  • Sertifikayı VM'ye ekleme ve NGINX'i TLS bağlaması ile yapılandırma

Hazır sanal makine betik örneklerini görmek için bu bağlantıyı izleyin.