Zelfstudie: Azure Key Vault integreren in uw ARM-sjabloonimplementatie
Ontdek hoe u geheime waarden uit Azure Key Vault ophaalt en deze als parameters doorgeeft tijdens de implementatie van een ARM-sjabloon (Azure Resource Manager). De parameterwaarde wordt nooit weergegeven, omdat u alleen naar de sleutelkluis-ID verwijst. U kunt een statische of dynamische ID gebruiken om naar de geheime waarden in de sleutelkluis te verwijzen. In deze zelfstudie wordt een statische ID gebruikt. Met de statische ID verwijst u naar de sleutelkluis in het parameterbestand van de sjabloon, niet het sjabloonbestand. Zie Azure Key Vault gebruiken om veilige parameterwaarden door te geven tijdens de implementatie voor meer informatie over beide methoden.
In de zelfstudieImplementatievolgorde van resources instellen maakt u een virtuele machine. U moet de gebruikersnaam en het wachtwoord voor de VM-beheerder opgeven. In plaats van het wachtwoord op te geven, kunt u het wachtwoord vooraf opslaan in een Azure-sleutelkluis en vervolgens de sjabloon aanpassen om het wachtwoord van de sleutelkluis tijdens de implementatie op te halen.
Deze zelfstudie bestaat uit de volgende taken:
- Een sleutelkluis voorbereiden
- Een snelstartsjabloon openen
- Het parameterbestand bewerken
- De sjabloon implementeren
- De implementatie valideren
- Resources opschonen
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Zie Complexe cloudimplementaties beheren met behulp van geavanceerde ARM-sjabloonfuncties voor een Learn-module die gebruikmaakt van een veilige waarde van een sleutelkluis.
Vereisten
U hebt het volgende nodig om dit artikel te voltooien:
Visual Studio Code met de extensie Resource Manager Tools. Zie quickstart: ARM-sjablonen maken met Visual Studio Code.
Gebruik een gegenereerd wachtwoord voor het beheerdersaccount van de virtuele machine om de beveiliging te verbeteren. U kunt Azure Cloud Shell gebruiken om de volgende opdracht uit te voeren in PowerShell of Bash:
openssl rand -base64 32
Voor meer informatie voert u de opdracht uit
man openssl rand
om de handmatige pagina te openen.Controleer of het gegenereerde wachtwoord voldoet aan de wachtwoordvereisten voor virtuele machines. Elke Azure-service heeft eigen wachtwoordvereisten. Zie Wat zijn de wachtwoordvereisten bij het maken van een virtuele machine? voor meer informatie over wachtwoordvereisten voor virtuele machines.
Een sleutelkluis voorbereiden
In deze sectie maakt u een sleutelkluis en voegt u er een geheime waarde aan toe, zodat u de geheime waarde kunt ophalen wanneer u de sjabloon implementeert. Er zijn verschillende manieren om een sleutelkluis te maken. In deze zelfstudie gebruikt u Azure PowerShell om een ARM-sjabloon te implementeren. Deze sjabloon doet het volgende:
- Hiermee maakt u een sleutelkluis waarvoor de eigenschap
enabledForTemplateDeployment
is ingeschakeld. Deze eigenschap moet de waarde true hebben, anders kan tijdens het sjabloonimplementatieproces geen toegang worden verkregen tot de geheime waarden in de sleutelkluis. - Hiermee voegt u een geheim toe aan de sleutelkluis. In het geheim wordt het wachtwoord van de VM-beheerder opgeslagen.
Notitie
Als de gebruiker die de sjabloon voor de virtuele machine implementeert, moet de eigenaar of inzender u toegang verlenen tot de machtiging voor de Microsoft.KeyVault/vaults/deploy/action
sleutelkluis als u niet de eigenaar of inzender bent van de sleutelkluis. Zie Azure Key Vault gebruiken om veilige parameterwaarden door te geven tijdens de implementatie voor meer informatie.
Als u het volgende Azure PowerShell-script wilt uitvoeren, selecteert u Probeer het om Cloud Shell te openen. Plak het script door met de rechtermuisknop op het shell-venster te klikken en Plakken te selecteren.
$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 ..."
Belangrijk
- De naam van de resourcegroep is de naam van het project, maar met rg eraan toegevoegd. Als u de resources die u in deze zelfstudie hebt gemaakt, eenvoudig wilt opschonen, gebruikt u dezelfde projectnaam en resourcegroepsnaam wanneer u de volgende sjabloon implementeert.
- De standaardnaam voor de geheime waarde is vmAdminPassword. Deze is vastgelegd in de sjabloon.
- Als u de sjabloon de geheime waarde op wilt laten halen, moet u voor de sleutelkluis een toegangsbeleid met de naam Toegang tot Azure Resource Manager inschakelen voor sjabloonimplementatie inschakelen. Dit beleid wordt ingeschakeld in de sjabloon. Zie Sleutelkluizen en geheime waarden implementerenvoor meer informatie over het toegangsbeleid.
De sjabloon heeft één uitvoerwaarde, genaamd keyVaultId
. U gebruikt deze ID en de geheime naam later in deze zelfstudie om de geheime waarde op te halen. De indeling van de resource-ID is:
/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>
Wanneer u de ID kopieert en plakt, kan deze over meerdere regels worden verdeeld. Voeg de regels samen en verwijder extra spaties.
Als u de implementatie wilt valideren, voert u de volgende Power shell-opdracht uit in hetzelfde shell-deelvenster om de geheime waarde als leesbare tekst op te halen. De opdracht werkt alleen in dezelfde shell-sessie, omdat deze gebruikmaakt van de variabele $keyVaultName
, die is gedefinieerd in het voorgaande PowerShell-script.
$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
Nu heeft u de voorbereidende stappen voor de sleutelkluis en geheime waarde uitgevoerd. In de volgende secties ziet u hoe u een bestaande sjabloon kunt aanpassen om de geheime waarde op te halen tijdens de implementatie.
Een snelstartsjabloon openen
Snelstartsjablonen voor Azure is een opslagplaats voor ARM-sjablonen. In plaats van een sjabloon helemaal vanaf de basis te maken, kunt u een voorbeeldsjabloon zoeken en aanpassen. De sjabloon die in deze zelfstudie wordt gebruikt, heet Een eenvoudige Windows-VM implementeren.
Selecteer in Visual Studio Code File>Open File.
Plak de volgende URL in het vak File name:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
Selecteer Openen om het bestand te openen. Het scenario is hetzelfde als het scenario dat wordt gebruikt in de zelfstudie: ARM-sjablonen maken met afhankelijke resources. In de sjabloon zijn zes resources gedefinieerd:
- Microsoft.Storage/storageAccounts.
- Microsoft.Network/publicIPAddresses.
- Microsoft.Network/networkSecurityGroups.
- Microsoft.Network/virtualNetworks.
- Microsoft.Network/networkInterfaces.
- Microsoft.Compute/virtualMachines.
Het is handig om enige basiskennis te hebben van de sjabloon voordat u deze gaat aanpassen.
Selecteer Bestand>Opslaan als en sla het bestand vervolgens op uw lokale computer op als azuredeploy.json.
Herhaal stap 1-3 om de volgende URL te openen en sla het bestand dan op als azuredeploy.parameters.json.
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
Het parameterbestand bewerken
Als u een statische ID gebruikt, hoeft u geen wijzigingen aan te brengen in het sjabloonbestand. De geheime waarde kan worden opgehaald door het parameterbestand voor de sjabloon te configureren.
Open in Visual Studio Code azuredeploy.para meters.json als deze nog niet is geopend.
Werk de parameter
adminPassword
bij naar:"adminPassword": { "reference": { "keyVault": { "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>" }, "secretName": "vmAdminPassword" } },
Belangrijk
Vervang de waarde voor
id
door de resource-id van de sleutelkluis die u in de vorige procedure hebt gemaakt. DesecretName
wordt vastgelegd als vmAdminPassword. Zie Een sleutelkluis voorbereiden.Werk de volgende waarden bij:
adminUsername
: De naam van het beheerdersaccount van de virtuele machine.dnsLabelPrefix
: Geef de waarde eendnsLabelPrefix
naam.
Zie de vorige afbeelding voor voorbeelden van namen.
De wijzigingen opslaan.
De sjabloon implementeren
Meld u aan bij Cloud Shell.
Kies uw favoriete omgeving door in de linkerbovenhoek PowerShell of Bash (voor CLI) te selecteren. U moet de shell opnieuw starten wanneer u overschakelt.
Selecteer Upload/download files en selecteer Uploaden. Upload azuredeploy.json en azuredeploy.para meters.json naar Cloud Shell. Nadat u het bestand hebt geüpload, kunt u de
ls
opdracht en decat
opdracht gebruiken om te controleren of het bestand is geüpload.Gebruik het volgende PowerShell-script om de sjabloon te implementeren.
$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 ..."
Wanneer u de sjabloon implementeert, gebruikt u dezelfde resourcegroep als die van de sleutelkluis. Deze methode maakt het gemakkelijker om de resources op te schonen, omdat u slechts één resourcegroep hoeft te verwijderen in plaats van twee.
De implementatie valideren
Wanneer u de virtuele machine heeft geïmplementeerd, test u de aanmeldingsreferenties met het wachtwoord dat is opgeslagen in de sleutelkluis.
Open de Azure Portal.
Selecteer Resourcegroepen><YourResourceGroupName>>simpleWinVM.
Selecteer bovenaan Verbinding maken.
Selecteer RDP-bestand downloaden en volg de instructies voor het aanmelden bij de virtuele machine met behulp van het wachtwoord dat is opgeslagen in de sleutelkluis.
Resources opschonen
Als u uw Azure-resources niet meer nodig heeft, schoon dan de resources op die u heeft geïmplementeerd door de resourcegroep te verwijderen.
$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 ..."
Volgende stappen
In deze zelfstudie heeft u een geheime waarde uit uw Azure-sleutelkluis opgehaald. Vervolgens gebruikte u de geheime waarde in uw sjabloonimplementatie. Voor meer informatie over het gebruik van extensies van virtuele machines voor de uitvoering van post-implementatietaken raadpleegt u: