Tutorial: Schützen eines Webservers auf einem virtuellen Linux-Computer in Azure mit in Key Vault gespeicherten TLS/SSL-ZertifikatenTutorial: Secure a web server on a Linux virtual machine in Azure with TLS/SSL certificates stored in Key Vault

Als Schutz für Webserver kann ein TLS-Zertifikat (Transport Layer Security) verwendet werden, um Webdatenverkehr zu verschlüsseln. „Transport Layer Security“ wurde früher als „Secure Sockets Layer“ (SSL) bezeichnet.To secure web servers, a Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), certificate can be used to encrypt web traffic. Diese TLS/SSL-Zertifikate können in Azure Key Vault gespeichert werden. Sie ermöglichen sichere Bereitstellungen von Zertifikaten auf virtuellen Linux-Computern in Azure.These TLS/SSL certificates can be stored in Azure Key Vault, and allow secure deployments of certificates to Linux virtual machines (VMs) in Azure. In diesem Tutorial lernen Sie Folgendes:In this tutorial you learn how to:

  • Erstellen einer Azure Key Vault-InstanzCreate an Azure Key Vault
  • Generieren oder Hochladen eines Zertifikats in Key VaultGenerate or upload a certificate to the Key Vault
  • Erstellen eines virtuellen Computers und Installieren des NGINX-WebserversCreate a VM and install the NGINX web server
  • Einfügen des Zertifikats auf dem virtuellen Computer und Konfigurieren von NGINX mit einer TLS-BindungInject the certificate into the VM and configure NGINX with a TLS binding

Dieses Tutorial verwendet die CLI innerhalb des Diensts Azure Cloud Shell, der ständig auf die neueste Version aktualisiert wird.This tutorial uses the CLI within the Azure Cloud Shell, which is constantly updated to the latest version. Wählen Sie zum Öffnen von Cloud Shell oben in einem Codeblock die Option Ausprobieren aus.To open the Cloud Shell, select Try it from the top of any code block.

Wenn Sie die CLI lokal installieren und verwenden möchten, müssen Sie für dieses Tutorial die Azure CLI-Version 2.0.30 oder höher ausführen.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. Führen Sie az --version aus, um die Version zu ermitteln.Run az --version to find the version. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install Azure CLI.

ÜbersichtOverview

Azure Key Vault schützt Kryptografieschlüssel und Geheimnisse, wie z.B. Zertifikate oder Kennwörter.Azure Key Vault safeguards cryptographic keys and secrets, such as certificates or passwords. Key Vault optimiert die Zertifikatverwaltung und ermöglicht Ihnen, die Kontrolle über Schlüssel zu behalten, die auf diese Zertifikate zugreifen.Key Vault helps streamline the certificate management process and enables you to maintain control of keys that access those certificates. Sie können ein selbstsigniertes Zertifikat in Key Vault erstellen oder ein vorhandenes vertrauenswürdiges Zertifikat verwenden, das Sie bereits besitzen.You can create a self-signed certificate inside Key Vault, or upload an existing, trusted certificate that you already own.

Anstatt ein benutzerdefiniertes VM-Image zu verwenden, in dem die Zertifikate integriert sind, fügen Sie Zertifikate in einen ausgeführten virtuellen Computer ein.Rather than using a custom VM image that includes certificates baked-in, you inject certificates into a running VM. Dadurch wird sichergestellt, dass auf einem Webserver während der Bereitstellung die aktuellen Zertifikate installiert sind.This process ensures that the most up-to-date certificates are installed on a web server during deployment. Wenn Sie ein Zertifikat erneuern oder ersetzen, müssen Sie nicht auch noch ein neues benutzerdefiniertes VM-Image erstellen.If you renew or replace a certificate, you don't also have to create a new custom VM image. Die neuesten Zertifikate werden beim Erstellen weiterer virtueller Computer automatisch eingefügt.The latest certificates are automatically injected as you create additional VMs. Während des gesamten Prozesses verlässt das Zertifikat nie die Azure-Plattform, noch wird es in einem Skript, Befehlszeilenverlauf oder einer Vorlage verfügbar gemacht.During the whole process, the certificates never leave the Azure platform or are exposed in a script, command-line history, or template.

Erstellen einer Azure Key Vault-InstanzCreate an Azure Key Vault

Bevor Sie eine Key Vault-Instanz und Zertifikate erstellen, müssen Sie mit az group create eine Ressourcengruppe erstellen.Before you can create a Key Vault and certificates, create a resource group with az group create. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroupSecureWeb am Standort eastus erstellt:The following example creates a resource group named myResourceGroupSecureWeb in the eastus location:

az group create --name myResourceGroupSecureWeb --location eastus

Erstellen Sie anschließend eine Key Vault-Instanz mit az keyvault create, und aktivieren Sie sie für die Verwendung, wenn Sie einen virtuellen Computer bereitstellen.Next, create a Key Vault with az keyvault create and enable it for use when you deploy a VM. Jede Key Vault-Instanz benötigt einen eindeutigen Namen, der nur aus Kleinbuchstaben besteht.Each Key Vault requires a unique name, and should be all lowercase. Ersetzen Sie <mykeyvault> im folgenden Beispiel durch Ihren eigenen eindeutigen Key Vault-Namen: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

Generieren eines Zertifikats und Speichern in Key VaultGenerate a certificate and store in Key Vault

Für die Produktion sollten Sie ein gültiges, von einem vertrauenswürdigen Anbieter signiertes Zertifikat mit az keyvault certificate import importieren.For production use, you should import a valid certificate signed by trusted provider with az keyvault certificate import. Für dieses Tutorial zeigt das folgende Beispiel, wie Sie ein selbstsigniertes Zertifikat mit az keyvault certificate create generieren können, das die Standardzertifikatrichtlinie verwendet: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)"

Vorbereiten eines Zertifikats für die Verwendung mit einem virtuellen ComputerPrepare a certificate for use with a VM

Um das Zertifikat während der Erstellung des virtuellen Computers zu verwenden, rufen Sie die ID des Zertifikats mit az keyvault secret list-versions ab.To use the certificate during the VM create process, obtain the ID of your certificate with az keyvault secret list-versions. Konvertieren Sie das Zertifikat mit az vm secret format.Convert the certificate with az vm secret format. Im folgenden Beispiel wird die Ausgabe dieser Befehle Variablen zugewiesen, um die Verwendung in den nächsten Schritten zu vereinfachen: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" -g myResourceGroupSecureWeb --keyvault $keyvault_name)

Erstellen einer cloud-init-Konfiguration zum Sichern von NGINXCreate a cloud-init config to secure NGINX

Cloud-init ist ein weit verbreiteter Ansatz zum Anpassen einer Linux-VM beim ersten Start.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. Sie können mit cloud-init Pakete installieren und Dateien schreiben oder Benutzer und Sicherheit konfigurieren.You can use cloud-init to install packages and write files, or to configure users and security. Da cloud-init während des ersten Startvorgangs ausgeführt wird, müssen Sie keine zusätzlichen Schritte oder erforderlichen Agents auf Ihre Konfiguration anwenden.As cloud-init runs during the initial boot process, there are no additional steps or required agents to apply your configuration.

Wenn Sie einen virtuellen Computer erstellen, werden Zertifikate und Schlüssel im geschützten Verzeichnis /var/lib/waagent/ gespeichert.When you create a VM, certificates and keys are stored in the protected /var/lib/waagent/ directory. Verwenden Sie cloud-init, um die Vorgänge zum Hinzufügen des Zertifikats zum virtuellen Computer und zum Konfigurieren des Webservers zu automatisieren.To automate adding the certificate to the VM and configuring the web server, use cloud-init. In diesem Beispiel installieren und konfigurieren Sie den NGINX-Webserver.In this example, you install and configure the NGINX web server. Dasselbe Verfahren kann zum Installieren und Konfigurieren von Apache verwendet werden.You can use the same process to install and configure Apache.

Erstellen Sie eine Datei namens cloud-init-web-server.txt, und fügen Sie die folgende Konfiguration ein: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

Erstellen eines sicheren virtuellen ComputersCreate a secure VM

Jetzt können Sie mit az vm create einen virtuellen Computer erstellen.Now create a VM with az vm create. Die Zertifikatsdaten werden mit dem --secrets-Parameter aus Key Vault eingefügt.The certificate data is injected from Key Vault with the --secrets parameter. Die cloud-init-Konfiguration wird mit dem Parameter --custom-data übergeben: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"

Es dauert einige Minuten, den virtuellen Computer zu erstellen, die Pakete zu installieren und die App zu starten.It takes a few minutes for the VM to be created, the packages to install, and the app to start. Sobald der virtuelle Computer erstellt ist, notieren Sie die publicIpAddress, die von der Azure-CLI angezeigt wird.When the VM has been created, take note of the publicIpAddress displayed by the Azure CLI. Diese Adresse wird verwendet, um über einen Webbrowser auf Ihre Website zuzugreifen.This address is used to access your site in a web browser.

Damit sicherer Webdatenverkehr Ihren virtuellen Computer erreicht, öffnen Sie Port 443 über das Internet mit az vm open-port: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

Testen der sicheren Web-AppTest the secure web app

Jetzt können Sie einen Webbrowser öffnen und https://<publicIpAddress> in die Adressleiste eingeben.Now you can open a web browser and enter https://<publicIpAddress> in the address bar. Geben Sie Ihre eigene öffentliche IP-Adresse aus dem Erstellungsprozess des virtuellen Computers an.Provide your own public IP address from the VM create process. Akzeptieren Sie die Sicherheitswarnung, wenn Sie ein selbstsigniertes Zertifikat verwendet haben:Accept the security warning if you used a self-signed certificate:

Akzeptieren der Webbrowser-Sicherheitswarnung

Die gesicherte NGINX-Website wird dann wie im folgenden Beispiel angezeigt:Your secured NGINX site is then displayed as in the following example:

Anzeigen der ausgeführten sicheren NGINX-Website

Nächste SchritteNext steps

In diesem Tutorial haben Sie einen NGINX-Webserver mit einem in Azure Key Vault gespeicherten TLS/SSL-Zertifikat geschützt.In this tutorial, you secured an NGINX web server with a TLS/SSL certificate stored in Azure Key Vault. Sie haben Folgendes gelernt:You learned how to:

  • Erstellen einer Azure Key Vault-InstanzCreate an Azure Key Vault
  • Generieren oder Hochladen eines Zertifikats in Key VaultGenerate or upload a certificate to the Key Vault
  • Erstellen eines virtuellen Computers und Installieren des NGINX-WebserversCreate a VM and install the NGINX web server
  • Einfügen des Zertifikats auf dem virtuellen Computer und Konfigurieren von NGINX mit einer TLS-BindungInject the certificate into the VM and configure NGINX with a TLS binding

Folgen Sie diesem Link, um sich vordefinierte Skriptbeispiele für virtuelle Computer anzusehen.Follow this link to see pre-built virtual machine script samples.