Implementación de una máquina virtual de Azure Stack Hub mediante una contraseña almacenada en Key Vault

Los pasos de este artículo describen la implementación de una máquina virtual de Windows Server mediante una contraseña almacenada en Key Vault de Azure Stack Hub. El uso de una contraseña de almacén de claves es más seguro que pasar una contraseña de texto sin formato.

Información general

Puede almacenar valores, por ejemplo, una contraseña como un secreto, en un almacén de claves de Azure Stack Hub. Después de crear un secreto, puede hacer referencia a él en las plantillas de Azure Resource Manager. El uso de secretos con Resource Manager proporciona las siguientes ventajas:

  • No tiene que escribir manualmente el secreto cada vez que implemente un recurso.
  • Puede especificar qué usuarios o entidades de servicio pueden acceder a un secreto.

Prerrequisitos

Los pasos siguientes describen el proceso necesario para crear una máquina virtual mediante la recuperación de la contraseña almacenada en un almacén de claves:

  1. Cree un secreto de almacén de claves.
  2. Actualice el archivo azuredeploy.parameters.json.
  3. Implemente la plantilla.

Nota:

Puede seguir estos pasos desde el Kit de desarrollo de Azure Stack (ASDK) o desde un cliente externo, si se conecta a través de VPN.

Creación de un secreto de almacén de claves

El script siguiente crea un almacén de claves y almacena en él una contraseña como un secreto. Use el parámetro -EnabledForDeployment al crear el almacén de claves. Este parámetro se asegura de que se puede hacer referencia al almacén de claves desde las plantillas de 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

Cuando se ejecuta el script anterior, la salida incluye el identificador URI (identificador uniforme de recursos) del secreto. Anote este URI. Tendrá que hacer referencia a él durante la implementación de máquina virtual Windows con contraseña en la plantilla de almacén de claves. Descargue la carpeta 101-vm-secure-password en el equipo de desarrollo. Esta carpeta contiene los archivos azuredeploy.json y azuredeploy.parameters.json que necesitará en los pasos siguientes.

Modificar el archivo azuredeploy.parameters.json según los valores del entorno. Los parámetros de especial interés son el nombre del almacén, el grupo de recursos del almacén y el identificador URI del secreto (que se generó en el script anterior). El archivo siguiente es un ejemplo de un archivo de parámetros.

Actualice el archivo azuredeploy.parameters.json

Actualice el archivo azuredeploy.parameters.json con los valores de KeyVault URI, secretName y adminUsername de la máquina virtual correspondientes a su entorno. El siguiente archivo JSON muestra un ejemplo del archivo de parámetros de plantilla:

{
    "$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"
        }
    }
}

Implementación de plantilla

Ahora implemente la plantilla con el siguiente script de PowerShell:

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>"

Cuando la plantilla se ha implementado correctamente, se producen en la siguiente salida:

Salida de la implementación

Pasos siguientes