Administración de los secretos en las plantillas

Completado

Al pasar un valor seguro (como una contraseña) como parámetro durante la implementación, puede recuperar el valor de un Azure Key Vault.

Haga referencia al Key Vault y al secreto en el archivo de parámetros.

El valor nunca se expone, ya que solo se hace referencia a su identificador de Key Vault.

El Key Vault puede existir en una suscripción diferente a la del grupo de recursos en el que se va a implementar.

Implementación de un Key Vault y un secreto

Para crear un Key Vault y un secreto, use la CLI de Azure o PowerShell.

Para acceder a los secretos dentro del Key Vault desde una implementación de Resource Manager, la propiedad de Key Vault enabledForTemplateDeployment debe establecerse en true.

Uso de la CLI de Azure

El siguiente fragmento de código es un ejemplo de cómo puede implementar un almacén de claves y un secreto mediante la CLI de Azure:

keyVaultName='{your-unique-vault-name}'
resourceGroupName='{your-resource-group-name}'
location='centralus'
userPrincipalName='{your-email-address-associated-with-your-subscription}'

# Create a resource group
az group create --name $resourceGroupName --location $location

# Create a Key Vault
az keyvault create \
  --name $keyVaultName \
  --resource-group $resourceGroupName \
  --location $location \
  --enabled-for-template-deployment true
az keyvault set-policy --upn $userPrincipalName --name $keyVaultName --secret-permissions set delete get list

# Create a secret with the name, vmAdminPassword
password=$(openssl rand -base64 32)
echo $password
az keyvault secret set --vault-name $keyVaultName --name 'vmAdminPassword' --value $password

Habilitación del acceso al secreto

Aparte de establecer la propiedad enabledForTemplateDeployment del almacén de claves en true, el usuario que implementa la plantilla debe tener el permiso Microsoft.KeyVault/vaults/deploy/action para el ámbito del almacén de claves.

Además, se incluye el grupo de recursos y el almacén de claves. Los roles Propietario y Colaborador conceden este acceso.

Si crea el Key Vault, usted es el propietario, por lo que tiene permiso de forma inherente.

Sin embargo, si el almacén de claves está en otra suscripción, el propietario del almacén de claves debe conceder acceso.

Referencia a un secreto con identificador estático

Se hace referencia al Key Vault en el archivo de parámetros y no en la plantilla.

La siguiente imagen muestra que el archivo de parámetros hace referencia al secreto y pasa dicho valor a la plantilla.

Diagram showing the illustration of the flow of a secret during template deployment. The parameter file references the secret from the template and passes that value to the template.

La plantilla siguiente implementa una base de datos SQL que incluye una contraseña de administrador.

El parámetro de contraseña se establece en una cadena segura. Pero la plantilla no especifica de dónde procede ese valor:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "adminLogin": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    },
    "sqlServerName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('sqlServerName')]",
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2015-05-01-preview",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {
        "administratorLogin": "[parameters('adminLogin')]",
        "administratorLoginPassword": "[parameters('adminPassword')]",
        "version": "12.0"
      }
    }
  ],
  "outputs": {
  }
}

Ahora puede crear un archivo de parámetros para la plantilla anterior. En el archivo de parámetros, especifique un parámetro que coincida con el nombre del parámetro de la plantilla.

Para el valor del parámetro, haga referencia al secreto del Key Vault. Para hacer referencia al secreto, pase el identificador de recurso del Key Vault y el nombre del secreto.

El secreto del Key Vault debe existir en el siguiente archivo de parámetros y usted debe proporcionar un valor estático para su id. de recurso.

Copie este archivo localmente y establezca el id. de suscripción, el nombre del almacén y el nombre del servidor SQL:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adminLogin": {
            "value": "exampleadmin"
        },
        "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "/subscriptions/<subscription-id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
              },
              "secretName": "examplesecret"
            }
        },
        "sqlServerName": {
            "value": "<your-server-name>"
        }
    }
}

Debería implementar la plantilla y pasar el archivo de parámetros a la plantilla.

Para obtener más información, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación.

También hay detalles en esta página web para hacer referencia a un secreto con un identificador dinámico.