Öğretici: Key Vault'ta depolanan bir SSL sertifikalarını kullanarak azure'da bir Linux sanal makinesi bir web sunucusunda güvenli hale getirmeTutorial: Secure a web server on a Linux virtual machine in Azure with SSL certificates stored in Key Vault

Web sunucularının güvenliğini sağlamak için, web trafiğini şifrelemek üzere Güvenli Yuva Katmanı (SSL) sertifikası kullanılabilir.To secure web servers, a Secure Sockets Layer (SSL) certificate can be used to encrypt web traffic. SSL sertifikaları Azure Key Vault’ta depolanabilir ve sertifikaların Azure’daki Linux sanal makinelerine (VM’ler) güvenli bir şekilde dağıtılabilmesini sağlar.These SSL certificates can be stored in Azure Key Vault, and allow secure deployments of certificates to Linux virtual machines (VMs) in Azure. Bu öğreticide şunların nasıl yapıldığını öğrenirsiniz:In this tutorial you learn how to:

  • Azure Key Vault oluşturmaCreate an Azure Key Vault
  • Sertifikaları oluşturma veya Key Vault’a yüklemeGenerate or upload a certificate to the Key Vault
  • VM oluşturma ve NGINX web sunucusunu yüklemeCreate a VM and install the NGINX web server
  • Sertifikayı VM’ye ekleme ve NGINX’i bir SSL bağlamasıyla yapılandırmaInject the certificate into the VM and configure NGINX with an SSL binding

Azure Cloud Shell kullanmaUse Azure Cloud Shell

Azure, Azure Cloud Shell, tarayıcınız üzerinden kullanabileceğiniz bir etkileşimli Kabuk ortamını barındırır.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell'i ya da kullanmanıza imkan tanır bash veya PowerShell Azure hizmetleriyle çalışmak için.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Cloud Shell önceden yüklenmiş komutları, yerel ortamınızda herhangi bir yükleme gerekmeden bu makaledeki kodu çalıştırmak için kullanabilirsiniz.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell'i başlatmak için:To launch Azure Cloud Shell:

SeçenekOption Örnek/bağlantıExample/Link
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin.Select Try It in the upper-right corner of a code block. Seçme deneyin kod Cloud Shell için otomatik olarak kopyalamaz.Selecting Try It doesn't automatically copy the code to Cloud Shell. Örneği Azure Cloud Shell için deneyin
Git https://shell.azure.com veya Cloud Shell'i Başlat Cloud Shell, tarayıcınızda açmak için düğmeyi.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. <a href="https://shell.azure.com" title="Azure Cloud Shell'i Başlat
Seçin Cloud Shell düğmesine sağ üst menü çubuğundaki Azure portalında.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure portaldaki Cloud Shell düğmesi

Bu makalede Azure Cloud shell'de kod çalıştırmak için:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell'i başlatın.Launch Cloud Shell.
  2. Seçin kopyalama kodu kopyalamak için bir kod bloğu üzerinde düğmesi.Select the Copy button on a code block to copy the code.
  3. Cloud Shell oturumla kodu yapıştırın Ctrl+Shift+V Windows ve Linux'ta veya Cmd + Shift+V macOS üzerinde.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Tuşuna Enter kodu çalıştırmak için.Press Enter to run the code.

CLI'yi yerel olarak yükleyip kullanmayı tercih ederseniz bu öğretici için Azure CLI 2.0.30 veya sonraki bir sürümünü çalıştırmanız gerekir.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Sürümü bulmak için az --version komutunu çalıştırın.Run az --version to find the version. Yükleme veya yükseltme yapmanız gerekiyorsa bkz. Azure CLI'yı yükleme.If you need to install or upgrade, see Install Azure CLI.

Genel BakışOverview

Azure Key Vault, sertifikalar veya parolalar gibi şifreleme anahtarları ile gizli dizilerin güvenliğini sağlar.Azure Key Vault safeguards cryptographic keys and secrets, such as certificates or passwords. 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 helps streamline the certificate management process and enables you to maintain control of keys that access those certificates. Key Vault içinde otomatik olarak imzalanan bir sertifika oluşturabilir veya sahip olduğunuz güvenli bir sertifikayı karşıya yükleyebilirsiniz.You can create a self-signed certificate inside Key Vault, or upload an existing, trusted certificate that you already own.

Oluşturulan sertifikaları içeren özel bir VM görüntüsü kullanmak yerine, sertifikaları çalışan bir VM’ye eklersiniz.Rather than using a custom VM image that includes certificates baked-in, you inject certificates into a running VM. Bu işlem, dağıtım sırasında web sunucusuna en güncel sertifikaların yüklenip yüklenmediğini kontrol eder.This process ensures that the most up-to-date certificates are installed on a web server during deployment. Ayrıca, bir sertifikayı yeniler veya değiştirirseniz yeni ve özel bir VM görüntüsü oluşturmanız da gerekmez.If you renew or replace a certificate, you don't also have to create a new custom VM image. En güncel sertifikalar, siz ek VM oluşturdukça otomatik olarak eklenir.The latest certificates are automatically injected as you create additional VMs. 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.During the whole process, the certificates never leave the Azure platform or are exposed in a script, command-line history, or template.

Azure Key Vault oluşturmaCreate an Azure Key Vault

Key Vault ve sertifikalarını oluşturabilmek için az group create ile bir kaynak grubu oluşturun.Before you can create a Key Vault and certificates, create a resource group with az group create. Aşağıdaki örnek eastus konumunda myResourceGroupSecureWeb adlı bir kaynak grubu oluşturur:The following example creates a resource group named myResourceGroupSecureWeb in the eastus location:

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.Next, create a Key Vault with az keyvault create and enable it for use when you deploy a VM. Her Key Vault için benzersiz bir ad gerekir ve tüm harfler küçük olmalıdır.Each Key Vault requires a unique name, and should be all lowercase. Değiştirin <mykeyvault > kendi benzersiz Key Vault adınızla aşağıdaki örnekte:Replace <mykeyvault> in the following example with your own unique Key Vault name:

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

Sertifika oluşturma ve sertifikayı Key Vault’ta depolamaGenerate a certificate and store in Key Vault

Ü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.For production use, you should import a valid certificate signed by trusted provider with az keyvault certificate import. 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:For this tutorial, the following example shows how you can generate a self-signed certificate with az keyvault certificate create that uses the default certificate policy:

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ırlamaPrepare a certificate for use with a VM

VM oluşturma sürecinde sertifikayı kullanmak için, az keyvault secret list-versions komutuyla sertifikanızın kimliğini alın.To use the certificate during the VM create process, obtain the ID of your certificate with az keyvault secret list-versions. az vm secret format komutuyla sertifikayı dönüştürün.Convert the certificate with az vm secret format. Aşağıdaki örnekte, sonraki adımlarda kullanım kolaylığı sağlamak için bu komutların çıkışı değişkenlere atanmaktadır:The following example assigns the output of these commands to variables for ease of use in the next steps:

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")

NGINX’in güvenliğini sağlamak için cloud-init yapılandırması oluşturmaCreate a cloud-init config to secure NGINX

Cloud-init, Linux VM’sini ilk kez önyüklendiğinde özelleştirmeyi sağlayan, sık kullanılan bir yaklaşımdır.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. cloud-init’i paket yükleme, dosyalara yazma ve kullanıcılar ile güvenliği yapılandırma işlemleri için kullanabilirsiniz.You can use cloud-init to install packages and write files, or to configure users and security. cloud-init önyükleme işlemi sırasında çalışırken, yapılandırmanıza uygulayabileceğiniz ek adım veya gerekli aracı yoktur.As cloud-init runs during the initial boot process, there are no additional steps or required agents to apply your configuration.

VM oluşturduğunuzda, sertifika ve anahtarlar korunan /var/lib/waagent/ dizininde depolanır.When you create a VM, certificates and keys are stored in the protected /var/lib/waagent/ directory. VM’ye sertifika ekleme ve web sunucusunu yapılandırma işlemlerini otomatikleştirmek için cloud-init’i kullanın.To automate adding the certificate to the VM and configuring the web server, use cloud-init. Bu örnekte, NGINX web sunucusunu yükleme ve yapılandırma işlemleri anlatılmaktadır.In this example, you install and configure the NGINX web server. Aynı işlemleri Apache’yi yüklemek ve yapılandırmak için de kullanabilirsiniz.You can use the same process to install and configure Apache.

cloud-init-web-server.txt adlı bir dosya oluşturup aşağıdaki yapılandırmayı yapıştırın:Create a file named cloud-init-web-server.txt and paste the following configuration:

#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şturmaCreate a secure VM

Şimdi az vm create ile bir VM oluşturun.Now create a VM with az vm create. Bu sertifika verileri, --secrets parametresiyle Key Vault’tan eklenir.The certificate data is injected from Key Vault with the --secrets parameter. cloud-init yapılandırmasını --custom-data parametresiyle geçirirsiniz:You pass in the cloud-init config with the --custom-data parameter:

az vm create \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --image UbuntuLTS \
    --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.It takes a few minutes for the VM to be created, the packages to install, and the app to start. VM oluşturulduktan sonra, Azure CLI tarafından görüntülenen publicIpAddress değerini not edin.When the VM has been created, take note of the publicIpAddress displayed by the Azure CLI. Bu adres, web tarayıcısında sitenize erişmek için kullanılır.This address is used to access your site in a web browser.

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:To allow secure web traffic to reach your VM, open port 443 from the Internet with az vm open-port:

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

Güvenli web uygulamasını sınamaTest the secure web app

Artık bir web tarayıcısı açın ve girin https://<Publicıpaddress > adres çubuğundaki.Now you can open a web browser and enter https://<publicIpAddress> in the address bar. VM oluşturma işleminden kendi herkese açık IP adresinizi sağlayın.Provide your own public IP address from the VM create process. Otomatik olarak imzalanan sertifika kullanıyorsanız güvenlik uyarısını kabul edin:Accept the security warning if you used a self-signed certificate:

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:Your secured NGINX site is then displayed as in the following example:

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

Sonraki adımlarNext steps

Bu öğreticide, Azure Key Vault’ta depolanan bir SSL sertifikasıyla NGINX web sunucusunun güvenliğini sağlayacaksınız.In this tutorial, you secured an NGINX web server with an SSL certificate stored in Azure Key Vault. Şunları öğrendiniz:You learned how to:

  • Azure Key Vault oluşturmaCreate an Azure Key Vault
  • Sertifikaları oluşturma veya Key Vault’a yüklemeGenerate or upload a certificate to the Key Vault
  • VM oluşturma ve NGINX web sunucusunu yüklemeCreate a VM and install the NGINX web server
  • Sertifikayı VM’ye ekleme ve NGINX’i bir SSL bağlamasıyla yapılandırmaInject the certificate into the VM and configure NGINX with an SSL binding

Hazır sanal makine betik örneklerini görmek için bu bağlantıyı izleyin.Follow this link to see pre-built virtual machine script samples.