Tutorial: Integrieren von Azure Key Vault in Ihre Bereitstellung einer ARM-Vorlage

Hier wird beschrieben, wie Sie bei der Bereitstellung einer Azure Resource Manager-Vorlage (ARM-Vorlage) Geheimnisse aus einer Azure Key Vault-Instanz abrufen und als Parameter übergeben. Der Parameterwert wird nie verfügbar gemacht, da lediglich die Key Vault-ID als Verweis verwendet wird. Sie können mithilfe einer statischen oder dynamischen ID auf das Schlüsseltresorgeheimnis verweisen. In diesem Tutorial wird eine statische ID verwendet. Bei der Herangehensweise mit statischer ID verweisen Sie auf den Schlüsseltresor in der Vorlagenparameterdatei, nicht in der Vorlagendatei. Weitere Informationen zu beiden Herangehensweisen finden Sie unter Verwenden von Azure Key Vault zum Übergeben eines sicheren Parameterwerts während der Bereitstellung.

Im Tutorial Festlegen der Reihenfolge für die Ressourcenbereitstellung erstellen Sie einen virtuellen Computer (VM). Sie müssen den Administratorbenutzernamen und das Kennwort für den virtuellen Computer angeben. Anstatt das Kennwort einzugeben, können Sie es in Azure Key Vault vorab speichern und die Vorlage anschließend anpassen, um das Kennwort während der Bereitstellung aus dem Schlüsseltresor abzurufen.

Abbildung: Integration einer Resource Manager-Vorlage in einem Schlüsseltresor

Dieses Tutorial enthält die folgenden Aufgaben:

  • Vorbereiten eines Schlüsseltresors
  • Öffnen einer Schnellstartvorlage
  • Bearbeiten der Parameterdatei
  • Bereitstellen der Vorlage
  • Überprüfen der Bereitstellung
  • Bereinigen von Ressourcen

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Informationen zu einem Lernmodul, das einen sicheren Wert aus einem Schlüsseltresor verwendet, finden Sie unter Verwalten komplexer Cloudbereitstellungen mithilfe erweiterter ARM-Vorlagenfunktionen.

Voraussetzungen

Damit Sie die Anweisungen in diesem Artikel ausführen können, benötigen Sie Folgendes:

  • Visual Studio Code mit der Erweiterung „Azure Resource Manager-Tools“. Weitere Informationen finden Sie unter Schnellstart: Erstellen von ARM-Vorlagen mit Visual Studio Code.

  • Verwenden Sie aus Sicherheitsgründen ein generiertes Kennwort für das Administratorkonto des virtuellen Computers. Sie können Azure Cloud Shell verwenden, um den folgenden Befehl in PowerShell oder Bash auszuführen:

    openssl rand -base64 32
    

    Wenn Sie mehr erfahren möchten, führen Sie man openssl rand aus, um die Handbuchseite zu öffnen.

    Vergewissern Sie sich, dass das generierte Kennwort die Kennwortanforderungen für den virtuellen Computer erfüllt. Jeder Azure-Dienst hat bestimmte Kennwortanforderungen. Informationen zu den Kennwortanforderungen für virtuelle Computer finden Sie unter Welche Anforderungen an das Kennwort gelten beim Erstellen eines virtuellen Computers?.

Vorbereiten eines Schlüsseltresors

In diesem Abschnitt erstellen Sie einen Schlüsseltresor und fügen ihm ein Geheimnis hinzu, damit Sie dieses beim Bereitstellen der Vorlage abrufen können. Es gibt zahlreiche Möglichkeiten zum Erstellen eines Schlüsseltresors. In diesem Tutorial verwenden Sie Azure PowerShell, um eine ARM-Vorlage bereitzustellen. Mit dieser Vorlage werden zwei Schritte ausgeführt:

  • Erstellen eines Schlüsseltresors mit aktivierter enabledForTemplateDeployment-Eigenschaft. Diese Eigenschaft muss auf true festgelegt sein, damit der Vorlagenbereitstellungsprozess auf die im Schlüsseltresor definierten Geheimnisse zugreifen kann.
  • Hinzufügen eines Geheimnisses zum Schlüsseltresor. Das Geheimnis enthält das Administratorkennwort für den virtuellen Computer.

Hinweis

Wenn Sie als Benutzer, der die Vorlage für virtuelle Maschinen bereitstellt, nicht Besitzer oder ein Mitwirkender für den Schlüsseltresor sind, muss der Besitzer oder ein Mitwirkender Ihnen Zugriff auf die Berechtigung Microsoft.KeyVault/vaults/deploy/action für den Schlüsseltresor gewähren. Weitere Informationen finden Sie unter Verwenden von Azure Key Vault zum Übergeben eines sicheren Parameterwerts während der Bereitstellung.

Wählen Sie zum Ausführen des folgenden Azure PowerShell-Skripts die Option Jetzt ausprobieren aus, um Cloud Shell zu öffnen. Klicken Sie zum Einfügen des Skripts mit der rechten Maustaste auf den Shellbereich, und wählen Sie Einfügen aus.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Write-Host "Press [ENTER] to continue ..."

Wichtig

  • Der Ressourcengruppenname entspricht dem Projektnamen mit dem Zusatz rg. Um das Bereinigen der in diesem Tutorial erstellten Ressourcen zu vereinfachen, verwenden Sie beim Bereitstellen der nächsten Vorlage den gleichen Projekt- und Ressourcengruppennamen.
  • Der Standardname für das Geheimnis lautet vmAdminPassword. Er ist in der Vorlage hartcodiert.
  • Damit die Vorlage das Geheimnis abrufen kann, müssen Sie die Zugriffsrichtlinie Zugriff auf Azure Resource Manager für Vorlagenbereitstellung aktivieren für den Schlüsseltresor aktivieren. Diese Richtlinie ist in der Vorlage aktiviert. Weitere Informationen zu dieser Zugriffsrichtlinie finden Sie unter Bereitstellen von Schlüsseltresoren und Geheimnissen.

Die Vorlage enthält einen Ausgabewert mit dem Namen keyVaultId. Sie verwenden diese ID zusammen mit dem Geheimnisnamen, um den Geheimniswert später in diesem Tutorial abzurufen. Die Ressourcen-ID hat das folgende Format:

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

Beim Kopieren und Einfügen der ID wird diese möglicherweise auf mehrere Zeilen aufgeteilt. Führen Sie die Zeilen zusammen, und löschen Sie die zusätzlichen Leerzeichen.

Führen Sie zum Überprüfen der Bereitstellung den folgenden PowerShell-Befehl im gleichen Shellbereich aus, um das Geheimnis als Klartext abzurufen. Der Befehl funktioniert nur in der gleichen Shellsitzung, da er die Variable $keyVaultName verwendet, die im vorherigen PowerShell-Skript definiert wurde.

$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

Damit haben Sie einen Schlüsseltresor und ein Geheimnis vorbereitet. In den folgenden Abschnitten wird beschrieben, wie Sie eine vorhandene Vorlage anpassen, um das Geheimnis während der Bereitstellung abzurufen.

Öffnen einer Schnellstartvorlage

„Azure-Schnellstartvorlagen“ ist ein Repository für ARM-Vorlagen. Statt eine Vorlage von Grund auf neu zu erstellen, können Sie eine Beispielvorlage verwenden und diese anpassen. Die in diesem Tutorial verwendete Vorlage heißt Deploy a simple Windows VM (Bereitstellen eines einfachen virtuellen Windows-Computers).

  1. Wählen Sie in Visual Studio Code Datei>Datei öffnen aus.

  2. Fügen Sie im Feld Dateiname die folgende URL ein:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Wählen Sie Öffnen aus, um die Datei zu öffnen. Das Szenario entspricht dem verwendeten Szenario unter Tutorial: Erstellen von ARM-Vorlagen mit abhängigen Ressourcen. Die Vorlage definiert sechs Ressourcen:

    Bevor Sie die Vorlage anpassen, sollten Sie sich zunächst grundlegend damit vertraut machen.

  4. Wählen Sie Datei>Speichern unter aus. Speichern Sie dann eine Kopie der Datei unter dem Namen azuredeploy.json auf dem lokalen Computer.

  5. Wiederholen Sie die Schritte 1 bis 3, um die folgende URL zu öffnen, und speichern Sie die Datei anschließend als azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

Bearbeiten der Parameterdatei

Bei der Methode mit statischer ID muss die Vorlagendatei nicht geändert werden. Der Geheimniswert wird durch Konfigurieren der Vorlagenparameterdatei abgerufen.

  1. Öffnen Sie azuredeploy.parameters.json in Visual Studio Code, falls die Datei noch nicht geöffnet ist.

  2. Ändern Sie den adminPassword-Parameter wie folgt:

    "adminPassword": {
        "reference": {
            "keyVault": {
                "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
            },
            "secretName": "vmAdminPassword"
        }
    },
    

    Wichtig

    Ersetzen Sie den Wert für id durch die Ressourcen-ID des zuvor erstellten Schlüsseltresors. secretName wird als vmAdminPassword hartcodiert. Informationen finden Sie unter Vorbereiten eines Schlüsseltresors.

    Integrieren von Key Vault und Resource Manager-Vorlage: VM-Bereitstellung – Parameterdatei

  3. Ändern Sie die folgenden Werte:

    • adminUsername: Der Name des Administratorkontos für den virtuellen Computer.
    • dnsLabelPrefix: Benennen Sie den dnsLabelPrefix-Wert.

    Beispiele für Namen finden Sie in der vorherigen Abbildung.

  4. Speichern Sie die Änderungen.

Bereitstellen der Vorlage

  1. Melden Sie sich bei Cloud Shell an.

  2. Wählen Sie Ihre bevorzugte Umgebung aus, indem Sie links oben PowerShell oder Bash (für die CLI) auswählen. Bei einem Wechsel ist ein Neustart der Shell erforderlich.

    Azure-Portal, Cloud Shell, Datei hochladen

  3. Wählen Sie Dateien hochladen/herunterladen und dann Hochladen aus. Laden Sie azuredeploy.json und azuredeploy.parameters.json in Cloud Shell hoch. Nach dem Hochladen der Datei können Sie den Befehl ls und den Befehl cat verwenden, um zu überprüfen, ob die Datei hochgeladen wurde.

  4. Führen Sie das folgende PowerShell-Skript aus, um die Vorlage bereitzustellen.

    $projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
    $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -TemplateFile "$HOME/azuredeploy.json" `
        -TemplateParameterFile "$HOME/azuredeploy.parameters.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    Verwenden Sie beim Bereitstellen der Vorlage die gleiche Ressourcengruppe wie für den Schlüsseltresor. Auf diese Weise lassen sich die Ressourcen einfacher bereinigen, da Sie statt zwei nur eine Ressourcengruppe löschen müssen.

Überprüfen der Bereitstellung

Testen Sie nach erfolgreicher Bereitstellung des virtuellen Computers die Anmeldeinformationen unter Verwendung des im Schlüsseltresor gespeicherten Kennworts.

  1. Öffnen Sie das Azure-Portal.

  2. Wählen Sie Ressourcengruppen><NameIhrerRessourcengruppe>>simpleWinVM aus.

  3. Wählen Sie oben die Option Verbinden aus.

  4. Wählen Sie RDP-Datei herunterladen aus, und melden Sie sich gemäß den Anweisungen unter Verwendung des im Schlüsseltresor gespeicherten Kennworts bei dem virtuellen Computer an.

Bereinigen von Ressourcen

Wenn Sie die Azure-Ressourcen nicht mehr benötigen, löschen Sie die Ressourcengruppe, um die bereitgestellten Ressourcen zu bereinigen.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

Nächste Schritte

In diesem Tutorial haben Sie ein Geheimnis aus Ihrem Azure-Schlüsseltresor abgerufen. Anschließend haben Sie das Geheimnis bei der Vorlagenbereitstellung verwendet. Informationen zum Ausführen von Aufgaben nach der Bereitstellung mithilfe von VM-Erweiterungen finden Sie unter