Übung: Verwalten von Geheimnissen in der ARM-Vorlage

Abgeschlossen

In der vorherigen Übung haben Sie eine einfache ARM-Vorlage (Azure Resource Manager) ausgeführt, die einen virtuellen Linux-Computer bereitstellt. In diesem Teil ist der Prozess ähnlich.

Anstatt das Kennwort als Parameter zu übergeben, speichern Sie das Kennwort dieses Mal in Azure Key Vault. Um die ARM-Vorlage für den Zugriff auf das Kennwort zu aktivieren, erstellen Sie eine Parameterdatei, die auf das Geheimnis des Schlüsseltresors in Ihrem Abonnement verweist.

Bereitstellen von Azure Key Vault

Hinweis

Aufgrund von Einschränkungen bei der Sandbox erstellen Sie hier einen Schlüsseltresor in Azure Key Vault im Azure-Portal. Normalerweise verwenden Sie das Cmdlet New-AzKeyVault, um einen Schlüsseltresor mit Azure PowerShell zu erstellen.

Erstellen Sie einen Schlüsseltresor, und lassen Sie Zugriff zur Bereitstellungszeit zu. Gehen Sie folgendermaßen vor:

  1. Erstellen Sie eine PowerShell-Variable, die den Namen des Schlüsseltresors enthält:

    $KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
    
  2. Führen Sie $KVNAME aus, um den Wert auszugeben:

    $KVNAME
    

    Die Ausgabe ähnelt der folgenden Ausgabe (die angezeigte Zahl unterscheidet sich):

    tailwind-secrets5978564
    

    Kopieren Sie den Wert für den nächsten Schritt.

  3. Melden Sie sich beim Azure-Portal mit dem Konto an, über das Sie die Sandbox aktiviert haben.

  4. Wählen Sie im Menü des Azure-Portals oder auf der Startseite die Option Ressource erstellen aus.

  5. Geben Sie Key Vault in das Suchfeld ein.

  6. Wählen Sie in der Liste Key Vault aus, und klicken Sie auf Erstellen, um mit dem Konfigurieren des Schlüsseltresors zu beginnen.

  7. Geben Sie im Erstellungsbereich die folgenden Werte an:

    1. Ressourcengruppe: Name der Ressourcengruppe.
    2. Name des Schlüsseltresors: Ihr Wert für $KVNAME, z. B. tailwind-secrets5978564.
  8. Klicken Sie auf Überprüfen + erstellen.

  9. Klicken Sie auf Erstellen. Dies sollte ungefähr eine Minute dauern. Nachdem die Ressource erstellt wurde, wählen Sie Zu Ressource wechseln aus.

  10. Wählen Sie Zugriffskonfiguration unter Einstellungen aus. Aktivieren Sie die Option Azure Resource Manager für Vorlagenbereitstellung, und wählen Sie Übernehmen aus.

  11. Führen Sie in der PowerShell-Sitzung das Cmdlet ConvertTo-SecureString aus, und weisen Sie das Ergebnis der secretSecureString-Variablen zu:

    $secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
    
  12. Führen Sie den folgenden Befehl Set-AzKeyVaultSecret aus, um im Schlüsseltresor ein Geheimnis zu erstellen. Das Geheimnis erhält den Namen vmPassword und den Wert insecurepassword123!:

    $secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
    

Erstellen der Parameterdatei

Hier erstellen Sie eine Parameterdatei, die den Namen der VM, den Benutzernamen des Administrators und einen Verweis auf das VM-Kennwort im Schlüsseltresor enthält.

Sie können über die Befehlszeile Parameter an Vorlagen übergeben. Denken Sie daran, dass eine Parameterdatei eine alternative Methode zum Übergeben von Parametern an Ihre ARM-Vorlage während der Bereitstellung ist. Eine Parameterdatei ermöglicht Ihnen den Zugriff auf Geheimnisse des Schlüsseltresors aus Ihrer Vorlage.

  1. Führen Sie den folgenden Befehl Get-AzKeyVault aus, um Ihre Key Vault-ID auszugeben:

    Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
    

    Die Ausgabe sieht ungefähr wie folgt aus:

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Notieren Sie sich die Ausgabe für den nächsten Schritt.

  2. Erstellen Sie in Visual Studio Code eine Datei mit dem Namen azuredeploy.parameters.json in demselben Verzeichnis, das azuredeploy.json enthält.

  3. Fügen Sie diesen Inhalt azuredeploy.parameters.json hinzu:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Ersetzen Sie den Wert id (die leere Zeichenfolge) durch den Wert, den Sie im vorherigen Schritt kopiert haben. Speichern Sie dann die Datei.

Bereitstellen eines virtuellen Linux-Computers

Hier stellen Sie die gleiche ARM-Vorlage bereit, die Sie in der vorherigen Übung bereitgestellt haben. Dieses Mal geben Sie die Parameterdatei an, die auf das VM-Kennwort im Schlüsseltresor verweist.

  1. Führen Sie den folgenden Befehl New-AzResourceGroupDeployment aus:

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -TemplateParameterFile "./azuredeploy.parameters.json" `
      -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
    

    In der vorherigen Übung haben Sie jedes Schlüssel-Wert-Paar direkt über die Befehlszeile bereitgestellt. Hier geben Sie "./azuredeploy.parameters.json" an, um Ihre Parameterdatei bereitzustellen.

    dnsLabelPrefix ist auf vm2- festgelegt, danach folgt eine Zufallszahl. Dies ist erforderlich, um sicherzustellen, dass sich der DNS-Name von dem in der vorherigen Übung verwendeten DNS-Namen unterscheidet.

Überprüfen der Bereitstellung

Vergewissern Sie sich, dass die VM bereitgestellt wird und über SSH verbunden werden kann. Gehen Sie folgendermaßen vor:

  1. Führen Sie den Befehl Invoke-Expression aus, um eine Verbindung mit der VM über SSH herzustellen:

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    Wenn Sie dazu aufgefordert werden, geben Sie yes ein, um die Verbindungsherstellung fortzusetzen. Geben Sie dann das Administratorkennwort ein: insecurepassword123!.

    Wichtig

    Wählen Sie in der Praxis sichere Kennwörter aus. Sie können auch die Authentifizierung mit öffentlichem Schlüssel verwenden, die in der Regel sicherer als die Verwendung von Kennwörtern ist.

  2. Führen Sie hostname über die SSH-Verbindung mit der VM aus, um den Hostnamen der VM auszugeben:

    hostname
    

    Sie sehen den internen Hostnamen vm1 der VM:

    vm2
    
  3. Führen Sie exit aus, um Ihre SSH-Sitzung zu verlassen.

    exit
    

Gut gemacht! Sie haben Ihre Bereitstellung so erweitert, dass sie eine Parameterdatei enthält, mit der Geheimnisinformationen aus Key Vault gelesen werden.

Bereitstellen von Azure Key Vault

Erstellen Sie in Azure Key Vault einen Schlüsseltresor, und fügen Sie das VM-Kennwort als sicheres Geheimnis hinzu. Gehen Sie folgendermaßen vor:

  1. Erstellen Sie eine Bash-Variable, die den Namen des Schlüsseltresors enthält.

    KVNAME=tailwind-secrets$RANDOM
    

    Schlüsseltresornamen müssen eindeutig sein. Der $RANDOM-Teil stellt sicher, dass der Name des Schlüsseltresors in einer zufälligen Reihe von Zahlen endet.

  2. Führen Sie den folgenden Befehl az keyvault create aus, um den Schlüsseltresor zu erstellen:

    az keyvault create \
      --name $KVNAME \
      --enabled-for-template-deployment true
    

    Das --enabled-for-template-deployment-Argument ermöglicht der ARM-Vorlage (Azure Resource Manager) das Abrufen von Geheimnissen aus dem Schlüsseltresor.

  3. Führen Sie den folgenden Befehl az keyvault secret set aus, um im Schlüsseltresor ein Geheimnis zu erstellen. Das Geheimnis erhält den Namen vmPassword und den Wert insecurepassword123!:

    az keyvault secret set \
      --vault-name $KVNAME \
      --name vmPassword \
      --value 'insecurepassword123!'
    

Erstellen der Parameterdatei

Hier erstellen Sie eine Parameterdatei, die den Namen der VM, den Benutzernamen des Administrators und einen Verweis auf das VM-Kennwort im Schlüsseltresor enthält.

Sie können über die Befehlszeile Parameter an Vorlagen übergeben. Denken Sie daran, dass eine Parameterdatei eine alternative Methode zum Übergeben von Parametern an Ihre ARM-Vorlage während der Bereitstellung ist. Eine Parameterdatei ermöglicht Ihnen den Zugriff auf Geheimnisse des Schlüsseltresors aus Ihrer Vorlage.

  1. Führen Sie den folgenden Befehl az keyvault show aus, um Ihre Key Vault-ID auszugeben:

    az keyvault show \
      --name $KVNAME \
      --query id \
      --output tsv
    

    Die Ausgabe sieht ungefähr wie folgt aus:

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Notieren Sie sich die Ausgabe für den nächsten Schritt.

  2. Erstellen Sie in Visual Studio Code eine Datei mit dem Namen azuredeploy.parameters.json in demselben Verzeichnis, das azuredeploy.json enthält.

  3. Fügen Sie diesen Inhalt azuredeploy.parameters.json hinzu:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Ersetzen Sie den Wert id (die leere Zeichenfolge) durch den Wert, den Sie im vorherigen Schritt kopiert haben. Speichern Sie dann die Datei.

Bereitstellen eines virtuellen Linux-Computers

Hier stellen Sie die gleiche ARM-Vorlage bereit, die Sie in der vorherigen Übung bereitgestellt haben. Dieses Mal geben Sie die Parameterdatei an, die auf das VM-Kennwort im Schlüsseltresor verweist.

Führen Sie den folgenden Befehl az deployment group create aus, um die Vorlage bereitzustellen:

az deployment group create \
  --template-file azuredeploy.json \
  --parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"

In der vorherigen Übung haben Sie jedes Schlüssel-Wert-Paar im --parameters-Argument bereitgestellt. Hier geben Sie @azuredeploy.parameters.json an, um Ihre Parameterdatei bereitzustellen.

dnsLabelPrefix ist auf vm2- festgelegt, danach folgt eine Zufallszahl. Dies ist erforderlich, um sicherzustellen, dass sich der DNS-Name von dem in der vorherigen Übung verwendeten DNS-Namen unterscheidet.

Überprüfen der Bereitstellung

Vergewissern Sie sich wie in der vorherigen Übung, dass die VM bereitgestellt wird und über SSH verbunden werden kann. Aus Gründen der Übersichtlichkeit überspringen Sie dieses Mal einige der Zwischenschritte.

  1. Führen Sie Folgendes aus, um über SSH eine Verbindung mit Ihrer VM herzustellen:

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    Wenn Sie dazu aufgefordert werden, geben Sie yes ein, um die Verbindungsherstellung fortzusetzen. Geben Sie dann das Administratorkennwort ein: insecurepassword123!.

  2. Führen Sie hostname über die SSH-Verbindung mit der VM aus, um den Hostnamen der VM auszugeben:

    hostname
    

    Sie sehen den internen Hostnamen vm2 der VM:

    vm2
    
  3. Führen Sie exit aus, um Ihre SSH-Sitzung zu verlassen.

    exit
    

Gut gemacht! Sie haben Ihre Bereitstellung so erweitert, dass sie eine Parameterdatei enthält, mit der Geheimnisinformationen aus Key Vault gelesen werden.