Distribuire una macchina virtuale dell'hub di Azure Stack usando una password archiviata in Key Vault
Questo articolo illustra come distribuire una macchina virtuale Windows Server usando una password archiviata nell'insieme di credenziali delle chiavi dell'hub di Azure Stack. L'uso di una password del vault delle chiavi è più sicuro rispetto alla trasmissione di una password in testo normale.
Panoramica
È possibile archiviare valori come una password come segreto in un key vault di Azure Stack Hub. Dopo aver creato un segreto, è possibile farvi riferimento nei modelli di Azure Resource Manager. L'uso dei segreti con Resource Manager offre i vantaggi seguenti:
- Non è necessario immettere manualmente il segreto ogni volta che si distribuisce una risorsa.
- È possibile specificare quali utenti o entità servizio possono accedere a un segreto.
Prerequisiti
- È necessario sottoscrivere un'offerta che include il servizio Key Vault.
- Installare PowerShell per l'hub di Azure Stack.
- Configurare l'ambiente PowerShell.
I passaggi seguenti descrivono il processo necessario per creare una macchina virtuale recuperando la password archiviata in un insieme di credenziali delle chiavi:
- Creare un segreto di Key Vault.
- Aggiornare il file
azuredeploy.parameters.json
. - Distribuire il modello.
Nota
È possibile usare questi passaggi da Azure Stack Development Kit (ASDK) o da un client esterno se si è connessi tramite VPN.
Creare un segreto di Key Vault
Lo script seguente crea un Key Vault e archivia una password nel Key Vault come segreto. Usare il parametro -EnabledForDeployment
quando si crea l'insieme di chiavi. Questo parametro garantisce che il Key Vault faccia riferimento ai modelli di Azure Resource Manager.
$vaultName = "contosovault"
$resourceGroup = "contosovaultrg"
$location = "local"
$secretName = "MySecret"
New-AzResourceGroup `
-Name $resourceGroup `
-Location $location
New-AzKeyVault `
-VaultName $vaultName `
-ResourceGroupName $resourceGroup `
-Location $location
-EnabledForTemplateDeployment
$secretValue = ConvertTo-SecureString -String '<Password for your virtual machine>' -AsPlainText -Force
Set-AzureKeyVaultSecret `
-VaultName $vaultName `
-Name $secretName `
-SecretValue $secretValue
Quando si esegue lo script precedente, l'output include l'URI segreto (Uniform Resource Identifier). Prendere nota di questo URI. È necessario farvi riferimento nel modello Distribuire VM Windows con password nel Key Vault. Scaricare la cartella 101-vm-secure-password nel computer di sviluppo. Questa cartella contiene i file azuredeploy.json
e azuredeploy.parameters.json
necessari nei passaggi successivi.
Modificare il file azuredeploy.parameters.json
in base ai valori dell'ambiente. I parametri di particolare interesse sono il nome della cassaforte, il gruppo di risorse della cassaforte e l'URI segreto (come generato dallo script precedente). Il file seguente è un esempio di file di parametri.
Aggiornare il file azuredeploy.parameters.json
Aggiornare il file azuredeploy.parameters.json
con l'URI di KeyVault, il nome del segreto e il nome utente amministrativo della macchina virtuale in base al proprio ambiente. Il file JSON seguente mostra un esempio del file di parametri del modello:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminUsername": {
"value": "demouser"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/xxxxxx/resourceGroups/RgKvPwd/providers/Microsoft.KeyVault/vaults/KvPwd"
},
"secretName": "MySecret"
}
},
"dnsLabelPrefix": {
"value": "mydns123456"
},
"windowsOSVersion": {
"value": "2016-Datacenter"
}
}
}
Distribuzione di modelli
Distribuire ora il modello usando lo script di PowerShell seguente:
New-AzResourceGroupDeployment `
-Name KVPwdDeployment `
-ResourceGroupName $resourceGroup `
-TemplateFile "<Fully qualified path to the azuredeploy.json file>" `
-TemplateParameterFile "<Fully qualified path to the azuredeploy.parameters.json file>"
Quando il modello viene distribuito correttamente, viene restituito l'output seguente: