Übung: Verwalten von Geheimnissen in der ARM-Vorlage
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:
Erstellen Sie eine PowerShell-Variable, die den Namen des Schlüsseltresors enthält:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
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.
Melden Sie sich beim Azure-Portal mit dem Konto an, über das Sie die Sandbox aktiviert haben.
Wählen Sie im Menü des Azure-Portals oder auf der Startseite die Option Ressource erstellen aus.
Geben Sie Key Vault in das Suchfeld ein.
Wählen Sie in der Liste Key Vault aus, und klicken Sie auf Erstellen, um mit dem Konfigurieren des Schlüsseltresors zu beginnen.
Geben Sie im Erstellungsbereich die folgenden Werte an:
- Ressourcengruppe:
Name der Ressourcengruppe . - Name des Schlüsseltresors: Ihr Wert für
$KVNAME
, z. B. tailwind-secrets5978564.
- Ressourcengruppe:
Klicken Sie auf Überprüfen + erstellen.
Klicken Sie auf Erstellen. Dies sollte ungefähr eine Minute dauern. Nachdem die Ressource erstellt wurde, wählen Sie Zu Ressource wechseln aus.
Wählen Sie Zugriffskonfiguration unter Einstellungen aus. Aktivieren Sie die Option Azure Resource Manager für Vorlagenbereitstellung, und wählen Sie Übernehmen aus.
Führen Sie in der PowerShell-Sitzung das Cmdlet
ConvertTo-SecureString
aus, und weisen Sie das Ergebnis dersecretSecureString
-Variablen zu:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Führen Sie den folgenden Befehl
Set-AzKeyVaultSecret
aus, um im Schlüsseltresor ein Geheimnis zu erstellen. Das Geheimnis erhält den NamenvmPassword
und den Wertinsecurepassword123!
:$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.
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Notieren Sie sich die Ausgabe für den nächsten Schritt.
Erstellen Sie in Visual Studio Code eine Datei mit dem Namen azuredeploy.parameters.json in demselben Verzeichnis, das azuredeploy.json enthält.
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" } } } }
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
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 aufvm2-
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:
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.
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
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:
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.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.Führen Sie den folgenden Befehl
az keyvault secret set
aus, um im Schlüsseltresor ein Geheimnis zu erstellen. Das Geheimnis erhält den NamenvmPassword
und den Wertinsecurepassword123!
: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.
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Notieren Sie sich die Ausgabe für den nächsten Schritt.
Erstellen Sie in Visual Studio Code eine Datei mit dem Namen azuredeploy.parameters.json in demselben Verzeichnis, das azuredeploy.json enthält.
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" } } } }
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.
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!
.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
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.