Gérer les secrets dans les modèles

Effectué

Quand vous passez une valeur sécurisée (par exemple, un mot de passe) comme paramètre pendant le déploiement, vous pouvez récupérer la valeur dans un coffre de clés Azure.

Référencez le coffre de clés et le secret dans votre fichier de paramètres.

La valeur n’est jamais exposée, car vous référencez uniquement son ID Key Vault.

Le coffre de clés peut exister dans un autre abonnement que celui du groupe de ressources de déploiement.

Sélectionner un coffre de clés et un secret

Pour créer un coffre de clés et un secret, utilisez Azure CLI ou PowerShell.

Pour accéder aux secrets de ce coffre de clés à partir d’un déploiement Resource Manager, la propriété Key Vault enabledForTemplateDeployment doit être définie sur true.

Utilisation de l’interface de ligne de commande Azure

L’extrait de code suivant montre comment vous pouvez déployer un coffre de clés et un secret avec Azure CLI :

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

Autoriser l’accès à la clé secrète

En plus de définir la propriété du coffre de clés enabledForTemplateDeployment sur true, l’utilisateur qui déploie le modèle doit avoir l’autorisation Microsoft.KeyVault/vaults/deploy/action pour l’étendue du coffre de clés.

Contenant également le groupe de ressources et le coffre de clés. Les rôles propriétaire et contributeur accordent cet accès.

Si vous créez le coffre de clés, vous en êtes le propriétaire et vous avez donc l’autorisation.

Toutefois, si le coffre de clés est sous un autre abonnement, son propriétaire doit accorder l’accès.

Référencement d’un secret avec un ID statique

Le coffre de clés est référencé dans le fichier de paramètres et non dans le modèle.

L’illustration suivante montre comment le fichier de paramètres fait référence à la question secrète et passe cette valeur au modèle.

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.

Le modèle suivant déploie une base de données SQL qui comprend un mot de passe d’administrateur.

Le paramètre du mot de passe est défini sur une chaîne sécurisée. Toutefois, le modèle ne spécifie pas l’origine de cette valeur :

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

Vous pouvez maintenant créer un fichier de paramètres pour le modèle précédent. Dans le fichier de paramètres, spécifiez un paramètre qui correspond au nom du paramètre dans le modèle.

Pour la valeur de paramètre, référencez le secret à partir du coffre de clés. Vous référencez le secret en passant l’identificateur de ressource du coffre de clés et le nom du secret.

Le secret Key Vault doit déjà exister dans le fichier de paramètres suivant et vous fournissez une valeur statique pour son ID de ressource.

Copiez ce fichier localement et définissez l’ID d’abonnement, le nom du coffre et le nom du serveur 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>"
        }
    }
}

Vous devez déployer le modèle et passer le fichier de paramètres au modèle.

Pour plus d’informations, utilisez Azure Key Vault pour transmettre des valeurs de paramètre sécurisées pendant le déploiement.

Cette page web contient également des informations pour référencer un secret avec un ID dynamique.