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'hub di Azure Stack Key Vault. L'uso di una password dell'insieme di credenziali delle chiavi è più sicuro rispetto al passaggio di una password di testo normale.

Panoramica

È possibile archiviare valori come password come segreto in un insieme di credenziali delle chiavi dell'hub di Azure Stack. 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

I passaggi seguenti descrivono il processo necessario per creare una macchina virtuale recuperando la password archiviata in un Key Vault:

  1. Creare un segreto Key Vault.
  2. Aggiornare il file azuredeploy.parameters.json.
  3. 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 Key Vault

Lo script seguente crea un insieme di credenziali delle chiavi e archivia una password nell'insieme di credenziali delle chiavi come segreto. Usare il -EnabledForDeployment parametro durante la creazione dell'insieme di credenziali delle chiavi. Questo parametro assicura che sia possibile fare riferimento all'insieme di credenziali delle chiavi dai 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 Deploy Windows VM with password in Key Vault .You to reference it in the Deploy Windows VM with password in key vault template. Scaricare la cartella 101-vm-secure-password nel computer di sviluppo. Questa cartella contiene i azuredeploy.json file e azuredeploy.parameters.json necessari nei passaggi successivi.

Modificare il azuredeploy.parameters.json file in base ai valori dell'ambiente. I parametri di particolare interesse sono il nome dell'insieme di credenziali, il gruppo di risorse dell'insieme di credenziali 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 azuredeploy.parameters.json file con l'URI dell'insieme di credenziali delle chiavi, secretName, adminUsername dei valori della macchina virtuale in base all'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 del modello

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:

Output della distribuzione

Passaggi successivi