Esercitazione: Integrare Azure Key Vault nella distribuzione di modelli di Azure Resource Manager
Informazioni su come recuperare i segreti da Azure Key Vault e passarli come parametri quando si distribuisce un modello di Azure Resource Manager (modello di ARM). Il valore dei parametri non viene mai esposto perché si fa riferimento solo al relativo ID dell'insieme di credenziali delle chiavi. Per fare riferimento al segreto dell'insieme di credenziali delle chiavi, è possibile usare un ID statico o un ID dinamico. In questa esercitazione viene usato un ID statico. Con l'approccio basato sull'ID statico, si fa riferimento all'insieme di credenziali delle chiavi nel file dei parametri del modello, non nel file del modello. Per altre informazioni su entrambi gli approcci, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.
Nell'esercitazione Impostare l'ordine di distribuzione delle risorse viene creata una macchina virtuale. È necessario specificare il nome utente e la password dell'amministratore della macchina virtuale. Invece di immettere la password, è possibile archiviarla preventivamente in Azure Key Vault e quindi personalizzare il modello per recuperare la password dall'insieme di credenziali delle chiavi durante la distribuzione.
Questa esercitazione illustra le attività seguenti:
- Preparare un insieme di credenziali delle chiavi
- Aprire un modello di avvio rapido
- Modificare il file dei parametri
- Distribuire il modello
- Convalidare la distribuzione
- Pulire le risorse
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Per un modulo Learn che usa un valore sicuro da un insieme di credenziali delle chiavi, vedere Gestire distribuzioni cloud complesse usando le funzionalità avanzate dei modelli di ARM.
Per completare questo articolo, devi avere quanto segue:
Visual Studio Code con l'estensione Strumenti di Resource Manager. Vedere Guida di avvio rapido - Creare modelli di ARM con Visual Studio Code.
Per una maggiore sicurezza, usare una password generata per l'account amministratore della macchina virtuale. È possibile usare Azure Cloud Shell per eseguire il comando seguente in PowerShell o Bash:
openssl rand -base64 32
Per ulteriori informazioni, eseguire
man openssl rand
per aprire la pagina manuale.Verificare che la password generata soddisfi i requisiti delle password per le macchine virtuali. Ogni servizio di Azure presenta requisiti specifici in termini di password. Per informazioni sui requisiti delle password per le macchine virtuali, vedere Quali requisiti devono avere le password quando si crea una macchina virtuale?.
In questa sezione si crea un insieme di credenziali delle chiavi e vi si aggiunge un segreto, per poter recuperare il segreto quando si distribuisce il modello. Esistono molti modi per creare un insieme di credenziali delle chiavi. In questa esercitazione si usa Azure PowerShell per distribuire un modello di Azure Resource Manager. Questo modello consente di eseguire due operazioni:
- Creare un insieme di credenziali delle chiavi con la proprietà
enabledForTemplateDeployment
abilitata. Affinché il processo di distribuzione del modello possa accedere ai segreti definiti nell'insieme di credenziali delle chiavi, impostare questa proprietà su true. - Aggiungere un segreto all'insieme di credenziali delle chiavi. Il segreto contiene la password dell'amministratore della macchina virtuale.
Nota
In qualità di utente che distribuisce il modello di macchina virtuale, non si è il Proprietario o un Collaboratore dell'insieme di credenziali delle chiavi, quindi il Proprietario o un Collaboratore deve concedere all'utente l'accesso all'autorizzazione Microsoft.KeyVault/vaults/deploy/action
per l'insieme di credenziali delle chiavi. Per altre informazioni, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.
Per eseguire lo script di Azure PowerShell seguente, selezionare Prova per aprire Cloud Shell. Per incollare lo script, fare clic con il pulsante destro del mouse sul riquadro della shell e quindi scegliere Incolla.
$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 ..."
Importante
- Il nome del gruppo di risorse corrisponde al nome del progetto seguito da rg. Per semplificare la pulizia delle risorse create in questa esercitazione, usare lo stesso nome di progetto e di gruppo di risorse per la distribuzione del modello seguente.
- Il nome predefinito del segreto è vmAdminPassword. Tale nome è hardcoded nel modello.
- Affinché il modello possa recuperare il segreto, è necessario abilitare un criterio di accesso denominato Abilita l'accesso ad Azure Resource Manager per la distribuzione dei modelli per l'insieme di credenziali delle chiavi. Questo criterio viene abilitato nel modello. Per altre informazioni sui criteri di accesso, vedere Distribuire insiemi di credenziali delle chiavi e segreti.
Il modello ha un valore di output denominato keyVaultId
. Questo ID verrà usato insieme al nome del segreto per recuperare il valore del segreto più avanti nell'esercitazione. Il formato dell'ID della risorsa è il seguente:
/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>
Quando si copia e si incolla l'ID, questo potrebbe venire suddiviso in più righe. Unire le righe e tagliare gli spazi aggiuntivi.
Per convalidare la distribuzione, eseguire il comando di PowerShell seguente nello stesso riquadro della shell per recuperare il segreto come testo non crittografato. Il comando funziona solo nella stessa sessione della shell, perché utilizza la variabile $keyVaultName
, definita nello script di PowerShell precedente.
$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
A questo punto sono stati preparati un insieme di credenziali delle chiavi e un segreto. Le sezioni seguenti illustrano come personalizzare un modello esistente per recuperare il segreto durante la distribuzione.
Modelli di avvio rapido di Azure è un repository di modelli di Azure Resource Manager. Anziché creare un modello da zero, è possibile trovare un modello di esempio e personalizzarlo. Il modello usato in questa esercitazione è il modello di distribuzione di una macchina virtuale Windows semplice.
In Visual Studio Code selezionare File>Apri file.
Nella casella Nome file incollare l'URL seguente:
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
Selezionare Apri per aprire il file. È lo stesso scenario utilizzato in Esercitazione: Creare modelli di ARM con risorse dipendenti. Il modello definisce sei risorse:
- Microsoft.Storage/storageAccounts.
- Microsoft.Network/publicIPAddresses.
- Microsoft.Network/networkSecurityGroups.
- Microsoft.Network/virtualNetworks.
- Microsoft.Network/networkInterfaces.
- Microsoft.Compute/virtualMachines.
Prima di personalizzare il modello è utile acquisirne una conoscenza di base.
Selezionare File>Salva con nome e quindi salvare una copia del file con il nome azuredeploy.json nel computer locale.
Ripetere i passaggi da 1 a 3 per aprire l'URL seguente e quindi salvare il file con il nome azuredeploy.parameters.json.
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
Con l'approccio basato sull'ID statico non è necessario apportare modifiche al file del modello. Il recupero del valore del segreto viene eseguito configurando il file dei parametri del modello.
In Visual Studio Code aprire azuredeploy.parameters.json, se non è già aperto.
Aggiornare il parametro
adminPassword
in:"adminPassword": { "reference": { "keyVault": { "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>" }, "secretName": "vmAdminPassword" } },
Importante
Sostituire il valore di
id
con l'ID della risorsa dell'insieme di credenziali delle chiavi creato nella routine precedente. Il valore hardcoded disecretName
è vmAdminPassword. Vedere Preparare un insieme di credenziali delle chiavi.Aggiornare i valori seguenti:
adminUsername
: il nome dell'account amministratore della macchina virtuale.dnsLabelPrefix
: denominare il valorednsLabelPrefix
.
Per esempi di nomi, vedere l'immagine precedente.
Salvare le modifiche.
Accedere a Cloud Shell.
Scegliere l'ambiente preferito selezionando PowerShell o Bash (per l'interfaccia della riga di comando) nell'angolo in alto a sinistra. Quando si cambia interfaccia, è necessario riavviare la shell.
Selezionare Carica/Scarica file e quindi Carica. Caricare entrambi i file azuredeploy.json e azuredeploy.parameters.json in Cloud Shell. Dopo aver caricato il file, è possibile usare i comandi
ls
ecat
per verificare che sia stato caricato correttamente.quindi eseguire lo script di PowerShell seguente per distribuire il modello.
$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 ..."
Quando si distribuisce il modello, usare lo stesso gruppo di risorse usato nell'insieme di credenziali delle chiavi. Questo approccio semplifica la pulizia delle risorse, perché è necessario eliminare un solo gruppo di risorse anziché due.
Dopo aver distribuito la macchina virtuale, testare le credenziali di accesso usando la password archiviata nell'insieme di credenziali delle chiavi.
Apri il portale di Azure.
Selezionare Gruppi di risorse><NomeGruppoRisorse>>simpleWinVM.
Selezionare Connetti nella parte superiore.
Selezionare Scarica file RDP e quindi seguire le istruzioni per accedere alla macchina virtuale usando la password archiviata nell'insieme di credenziali delle chiavi.
Quando non sono più necessarie, eseguire la pulizia delle risorse di Azure distribuite eliminando il gruppo di risorse.
$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 ..."
In questa esercitazione è stato recuperato un segreto da Azure Key Vault. Il segreto è stato quindi usato per la distribuzione del modello. Per informazioni su come usare estensioni di macchina virtuale per eseguire le attività post-distribuzione, vedere: