Övning – Hantera hemligheter i ARM-mallar
I föregående övning körde du en enkel ARM-mall som etablerar en virtuell Linux-dator. I den här delen ska du följa en liknande process.
Den här gången lagrar du lösenordet i Azure Key Vault i stället för att skicka det som en parameter. För att ARM-mallen ska kunna komma åt lösenordet skapar du en parameterfil som refererar till Key Vault-hemligheten i din prenumeration.
Distribuera Azure Key Vault
Kommentar
På grund av begränsningar i sandbox-miljön skapar du här en Key Vault via Azure-portalen. Normalt skulle du använda cmdleten New-AzKeyVault
till att skapa en Key Vault-instans via Azure PowerShell.
Skapa en Key Vault-instans och ge åtkomstbehörighet under distributionen. Så här gör du:
Skapa en PowerShell-variabel som innehåller namnet på Key Vault-instansen:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Kör
$KVNAME
för att skriva ut variabelns värde:$KVNAME
Dina utdata bör se ut så här (du ser ett annat tal):
tailwind-secrets5978564
Kopiera värdet till ett praktiskt ställe till nästa steg.
Logga in på Azure-portalen med samma konto som du använde när du aktiverade sandbox-miljön.
I menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.
Ange Key Vault i sökrutan.
Välj Key Vault i listan och välj Skapa för att börja konfigurera Key Vault.
Ange de här värdena i fönstret Skapa:
- Resursgrupp:
namn på resursgrupp . - Nyckelvalvsnamn: Ditt värde
$KVNAME
för , till exempel tailwind-secrets5978564.
- Resursgrupp:
Välj Granska + skapa.
Välj Skapa. Det här tar någon minut. När resursen har skapats väljer du Gå till resurs.
Välj Åtkomstkonfiguration under Inställningar. Aktivera alternativet Azure Resource Manager för malldistribution och välj Tillämpa.
Kör cmdleten
ConvertTo-SecureString
från PowerShell-sessionen och tilldela resultatet till variabelnsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Kör följande
Set-AzKeyVaultSecret
-kommando för att skapa en hemlighet i Key Vault. Hemligheten hetervmPassword
, med värdetinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Skapa parameterfilen
Här skapar du en parameterfil som innehåller namnet på den virtuella datorns, administratörens användarnamn och en referens till VM-lösenordet i nyckelvalvet.
Du kan skicka parametrar till mallar från kommandoraden. Kom ihåg att du också kan skicka parametrar till ARM-mallen under distributionen via en parameterfil. Med en parameterfil kan du komma åt hemligheter i nyckelvalv från din mall.
Kör följande
Get-AzKeyVault
-kommando för att skriva ut nyckelvalvets ID:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
Resultatet ser ut ungefär så här:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Anteckna utdata till nästa steg.
Skapa en fil med namnet azuredeploy.parameters.json i Visual Studio Code, i samma katalog som innehåller azuredeploy.json.
Lägg till följande innehåll i azuredeploy.parameters.json:
{ "$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" } } } }
Ersätt värdet för
id
(den tomma strängen) med värdet du kopierade i föregående steg. Spara sedan filen.
Distribuera en virtuell Linux-dator
Här distribuerar du samma ARM-mall som du distribuerade i föregående övning. Den här gången anger du parameterfilen som refererar till den virtuella datorns lösenord i nyckelvalvet.
Kör följande
New-AzResourceGroupDeployment
-kommando:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
I föregående övning angav du varje nyckel/värde-par direkt från kommandoraden. Här anger du parameterfilen med
"./azuredeploy.parameters.json"
.dnsLabelPrefix
anges tillvm2-
följt av ett slumpmässigt tal. Det här krävs för att du ska använda ett annat DNS-namn än i föregående övning.
Verifiera distributionen
Kontrollera att den virtuella datorn är etablerad och går att ansluta till via SSH. Så här gör du:
Kör kommandot
Invoke-Expression
för att ansluta till den virtuella datorn via SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
När du uppmanas till det anger du
yes
för att fortsätta ansluta. Ange sedan administratörslösenordet .insecurepassword123!
Viktigt!
I praktiken bör du använda säkra lösenord. Du kan också autentisera med offentlig nyckel, vilket normalt är säkrare än att använda lösenord.
Utgå från SSH-anslutningen till den virtuella datorn och kör
hostname
för att skriva ut den virtuella datorns värdnamn:hostname
Du ser den virtuella datorns interna värdnamn:
vm1
vm2
Kör
exit
för att stänga SSH-sessionen.exit
Bra jobbat! Du har utökat distributionen med en parameterfil som läser hemligheter från Key Vault.
Distribuera Azure Key Vault
I Azure Key Vault skapar du en Key Vault-instans och lägger till den virtuella datorns lösenord som en säker hemlighet. Så här gör du:
Skapa en Bash-variabel som innehåller namnet på Key Vault-instansen.
KVNAME=tailwind-secrets$RANDOM
Namn på Key Vault-instanser måste vara unika. Delen
$RANDOM
ser till att namnet på Key Vault-instansen slutar med en slumpmässig serie siffror.Kör följande
az keyvault create
-kommando för att skapa Key Vault-instansen:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
Argumentet
--enabled-for-template-deployment
gör att ARM-mallen kan hämta hemligheter från nyckelvalvet.Kör följande
az keyvault secret set
-kommando för att skapa en hemlighet i Key Vault. Hemligheten hetervmPassword
, med värdetinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Skapa parameterfilen
Här skapar du en parameterfil som innehåller namnet på den virtuella datorns, administratörens användarnamn och en referens till VM-lösenordet i nyckelvalvet.
Du kan skicka parametrar till mallar från kommandoraden. Kom ihåg att du också kan skicka parametrar till ARM-mallen under distributionen via en parameterfil. Med en parameterfil kan du komma åt hemligheter i nyckelvalv från din mall.
Kör följande
az keyvault show
-kommando för att skriva ut nyckelvalvets ID:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
Resultatet ser ut ungefär så här:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Anteckna utdata till nästa steg.
Skapa en fil med namnet azuredeploy.parameters.json i Visual Studio Code, i samma katalog som innehåller azuredeploy.json.
Lägg till följande innehåll i azuredeploy.parameters.json:
{ "$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" } } } }
Ersätt värdet för
id
(den tomma strängen) med värdet du kopierade i föregående steg. Spara sedan filen.
Distribuera en virtuell Linux-dator
Här distribuerar du samma ARM-mall som du distribuerade i föregående övning. Den här gången anger du parameterfilen som refererar till den virtuella datorns lösenord i nyckelvalvet.
Distribuera mallen med följande az deployment group create
-kommando:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
I föregående övning angav du varje nyckel/värde-par i argumentet --parameters
. Här anger du parameterfilen med @azuredeploy.parameters.json
.
dnsLabelPrefix
anges till vm2-
följt av ett slumpmässigt tal. Det här krävs för att du ska använda ett annat DNS-namn än i föregående övning.
Verifiera distributionen
Precis som i föregående övning kontrollerar du att den virtuella datorn är etablerad och går att ansluta till via SSH. Den här gången hoppar du över några mellanliggande steg för att korta ned det hela.
Kör följande kommando för att ansluta till din virtuella dator via SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
När du uppmanas till det anger du
yes
för att fortsätta ansluta. Ange sedan administratörslösenordet .insecurepassword123!
Utgå från SSH-anslutningen till den virtuella datorn och kör
hostname
för att skriva ut den virtuella datorns värdnamn:hostname
Du ser den virtuella datorns interna värdnamn:
vm2
vm2
Kör
exit
för att stänga SSH-sessionen.exit
Bra jobbat! Du har utökat distributionen med en parameterfil som läser hemligheter från Key Vault.