Oefening: geheimen beheren in uw ARM-sjabloon
In de vorige oefening hebt u een eenvoudige Azure Resource Manager-sjabloon (ARM) voor het inrichten van een virtuele Linux-machine uitgevoerd. In dit gedeelte volgt u een soortgelijk proces.
In plaats van het wachtwoord door te geven als een parameter, slaat u het wachtwoord op in Azure Key Vault. Om de ARM-sjabloon toegang tot het wachtwoord te geven, maakt u een parameterbestand dat verwijst naar het sleutelkluisgeheim in uw abonnement.
Azure Key Vault implementeren
Notitie
Als gevolg van beperkingen met de sandbox maakt u hier een sleutelkluis in Azure Key Vault vanuit Azure Portal. Normaal gesproken gebruikt u de cmdlet New-AzKeyVault
om een sleutelkluis te maken vanuit Azure PowerShell.
Maak een sleutelkluis en sta toegang voor implementatietijd toe. Hiervoor doet u het volgende:
Maak een PowerShell-variabele met de naam van de sleutelkluis:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Voer
$KVNAME
uit om de waarde af te drukken:$KVNAME
De uitvoer ziet er ongeveer zo uit (met een ander getal):
tailwind-secrets5978564
Kopieer de waarde naar een handige locatie voor de volgende stap.
Meld u aan bij Azure Portal met het account waarmee u de sandbox hebt geactiveerd.
Selecteer in het menu van Azure Portal of op de startpagina de optie Een resource maken.
Typ Key Vault in het zoekvak.
Selecteer Key Vault in de lijst en selecteer Maken om de sleutelkluis te configureren.
Geef in het deelvenster voor het maken de volgende waarden op:
- Resourcegroep:
naam van de resourcegroep . - Key Vault-naam: uw waarde van
$KVNAME
bijvoorbeeld tailwind-secrets5978564.
- Resourcegroep:
Selecteer Controleren + maken.
Selecteer Maken. Dit duurt ongeveer een minuut. Wanneer de resource is gemaakt, selecteert u Naar de resource gaan.
Selecteer Toegangsconfiguratie onder Instellingen. Schakel de optie Azure Resource Manager in voor sjabloonimplementatie en selecteer Toepassen.
Voer vanuit uw PowerShell-sessie de cmdlet
ConvertTo-SecureString
uit en wijs het resultaat toe aan de variabelesecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Voer de volgende
Set-AzKeyVaultSecret
-opdracht uit om een geheim in de sleutelkluis te maken. Het geheim heeft de naamvmPassword
, met de waardeinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Het parameterbestand maken
Hier maakt u een parameterbestand met de naam van de virtuele machine, de gebruikersnaam van de beheerder en een verwijzing naar het wachtwoord van de virtuele machine in de sleutelkluis.
U kunt parameters doorgeven aan sjablonen vanaf de opdrachtregel. Ter herinnering, een parameterbestand is een alternatieve methode om parameters aan uw ARM-sjabloon door te geven tijdens de implementatie. Met een parameterbestand kunt u toegang krijgen tot sleutelkluisgeheimen met behulp van uw sjabloon.
Voer de volgende
Get-AzKeyVault
-opdracht uit om uw Key Vault-id af te drukken:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
De uitvoer ziet er ongeveer als volgt uit:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Noteer de uitvoer voor de volgende stap.
Maak in Visual Studio Code een bestand met de naam azuredeploy.parameters.json in de map die ook azuredeploy.json bevat.
Voeg deze inhoud toe aan 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" } } } }
Vervang de waarde van
id
(de lege tekenreeks) door de waarde die u in de vorige stap hebt gekopieerd. Sla het bestand op.
Een Linux-VM implementeren
Hier implementeert u dezelfde ARM-sjabloon die u in de vorige oefening hebt geïmplementeerd. Deze keer geeft u het parameterbestand op dat verwijst naar het wachtwoord voor de VM in de sleutelkluis.
Voer de volgende
New-AzResourceGroupDeployment
-opdracht uit:New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
In de vorige oefening hebt u elk sleutel-waardepaar rechtstreeks opgegeven vanaf de opdrachtregel. Hier geeft u
"./azuredeploy.parameters.json"
op als uw parameterbestand.De
dnsLabelPrefix
is ingesteld opvm2-
, gevolgd door een willekeurig getal. Dit is nodig om ervoor te zorgen dat de DNS-naam verschilt van de DNS-naam die u in de vorige oefening hebt gebruikt.
Implementatie verifiëren
Controleer of de VM is ingericht en of deze via SSH kan worden aangesloten. Hiervoor doet u het volgende:
Voer de opdracht
Invoke-Expression
uit om via SSH verbinding te maken met de virtuele machine:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
Voer desgevraagd in
yes
om door te gaan met verbinding maken. Voer vervolgens het beheerderswachtwoord in.insecurepassword123!
Belangrijk
In het echt moet u wachtwoorden natuurlijk veilig bewaren. U kunt ook verificatie op basis van openbare sleutels gebruiken, dat meestal veiliger is dan het gebruik van wachtwoorden.
Voer
hostname
uit vanaf uw SSH-verbinding naar de virtuele machine uit om de hostnaam van de VM af te drukken:hostname
U ziet de interne hostnaam van de virtuele machine:
vm1
vm2
Voer
exit
uit om uw SSH-sessie te verlaten.exit
Goed gedaan! U hebt uw implementatie uitgebreid met een parameterbestand dat geheime informatie uit Key Vault leest.
Azure Key Vault implementeren
Maak in Azure Key Vault een sleutelkluis en voeg het wachtwoord voor de VM toe als een beveiligd geheim. Hiervoor doet u het volgende:
Maak een Bash-variabele met de naam van de sleutelkluis.
KVNAME=tailwind-secrets$RANDOM
Sleutelkluisnamen moeten uniek zijn. Het onderdeel
$RANDOM
zorgt ervoor dat de sleutelkluisnaam eindigt op een willekeurige reeks cijfers.Voer de volgende
az keyvault create
-opdracht uit om de sleutelkluis te maken:az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
Met het argument
--enabled-for-template-deployment
kan de Azure Resource Manager-sjabloon (ARM) geheimen ophalen uit de sleutelkluis.Voer de volgende
az keyvault secret set
-opdracht uit om een geheim in de sleutelkluis te maken. Het geheim heeft de naamvmPassword
, met de waardeinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Het parameterbestand maken
Hier maakt u een parameterbestand met de naam van de virtuele machine, de gebruikersnaam van de beheerder en een verwijzing naar het wachtwoord van de virtuele machine in de sleutelkluis.
U kunt parameters doorgeven aan sjablonen vanaf de opdrachtregel. Ter herinnering, een parameterbestand is een alternatieve methode om parameters aan uw ARM-sjabloon door te geven tijdens de implementatie. Met een parameterbestand kunt u toegang krijgen tot sleutelkluisgeheimen met behulp van uw sjabloon.
Voer de volgende
az keyvault show
-opdracht uit om uw Key Vault-id af te drukken:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
De uitvoer ziet er ongeveer als volgt uit:
/subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Noteer de uitvoer voor de volgende stap.
Maak in Visual Studio Code een bestand met de naam azuredeploy.parameters.json in de map die ook azuredeploy.json bevat.
Voeg deze inhoud toe aan 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" } } } }
Vervang de waarde van
id
(de lege tekenreeks) door de waarde die u in de vorige stap hebt gekopieerd. Sla het bestand op.
Een Linux-VM implementeren
Hier implementeert u dezelfde ARM-sjabloon die u in de vorige oefening hebt geïmplementeerd. Deze keer geeft u het parameterbestand op dat verwijst naar het wachtwoord voor de VM in de sleutelkluis.
Voer de volgende az deployment group create
-opdracht uit om de sjabloon te implementeren:
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
In de vorige oefening hebt u elk sleutel-waardepaar opgegeven in het argument --parameters
. Hier geeft u @azuredeploy.parameters.json
op als uw parameterbestand.
De dnsLabelPrefix
is ingesteld op vm2-
, gevolgd door een willekeurig getal. Dit is nodig om ervoor te zorgen dat de DNS-naam verschilt van de DNS-naam die u in de vorige oefening hebt gebruikt.
De implementatie controleren
Controleer of de VM is ingericht en of deze via SSH kan worden aangesloten, net als in de vorige oefening. Om het kort te houden, slaat u dit keer een aantal tussenstappen over.
Voer de volgende stappen uit om via SSH verbinding te maken met uw VM:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
Voer desgevraagd in
yes
om door te gaan met verbinding maken. Voer vervolgens het beheerderswachtwoord in.insecurepassword123!
Voer
hostname
uit vanaf uw SSH-verbinding naar de virtuele machine uit om de hostnaam van de VM af te drukken:hostname
U ziet de interne hostnaam van de virtuele machine:
vm2
vm2
Voer
exit
uit om uw SSH-sessie te verlaten.exit
Goed gedaan! U hebt uw implementatie uitgebreid met een parameterbestand dat geheime informatie uit Key Vault leest.