Utiliser des secrets d’environnement avec Azure Developer CLI

Azure Developer CLI (azd) prend en charge le référencement des secrets Azure Key Vault dans votre environnement de projet (le .env fichier). Cela offre une option sécurisée permettant d’utiliser des données sensibles dans vos azd projets. Ces secrets s’intègrent à différentes azd fonctionnalités, telles que les hooks et les configurations de pipeline CI/CD.

Prerequisites

Définir un secret Key Vault

Pour définir un secret Key Vault, exécutez la azd env set-secret <name> commande, où <name> se trouve la clé dans l’environnement qui fait référence au secret Key Vault. Après avoir défini le secret, azd récupère automatiquement la valeur du coffre de clés dans les scénarios suivants.

Paramètres Bicep

Pour associer un paramètre Bicep à la valeur d’un secret Azure Key Vault, procédez comme suit :

  1. Annotez le paramètre Bicep pour qu'il soit sécurisé en utilisant le mot-clé @secure().
  2. Créez un mappage dans le main.parameters.json fichier qui lie le paramètre Bicep au nom de clé correspondant dans l’environnement qui fait référence au secret Azure Key Vault.

Note

Les secrets de l'environnement ne sont actuellement pas pris en charge lors de l'utilisation des fichiers de paramètres Bicep (.bicepparam).

Exemple

Depuis un projet azd, exécutez azd env set-secret MY_SECRET et suivez les invites pour sélectionner un secret existant dans Azure Key Vault ou en créer un nouveau. Une fois la commande terminée, la clé MY_SECRET contient une référence à un secret Key Vault. Ajoutez ou sélectionnez le paramètre Bicep avec lequel vous souhaitez utiliser la valeur et le désignez comme sécurisé :

@secure()
param secureParameter string

Créez le mappage dans le fichier main.parameters.json

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "secureParameter": {
        "value": "${MY_SECRET}"
      }
    }
}

La prochaine fois que vous exécutez azd up ou azd provision, azd utilise le secret Azure Key Vault comme valeur pour votre paramètre.

Hooks

azd peut récupérer automatiquement les secrets Azure Key Vault lorsqu’un hook s’exécute. Par défaut, lorsque azd exécute un hook, toutes les paires clé-valeur de l’environnement du projet (du fichier .env) sont configurées dans l’environnement du hook. Toutefois, les références aux secrets Key Vault ne sont pas automatiquement résolues en leurs valeurs secrètes correspondantes.

Pour résoudre ces références, procédez comme suit :

  1. Créez un mappage à partir de la clé dans l’environnement vers une nouvelle clé dans laquelle le secret Key Vault est résolu.
  2. Utilisez le secrets champ dans la définition de hook pour créer ce mappage.

Exemple

Exécutez azd env set-secret MY_SECRET dans un projet azd et suivez les invites pour sélectionner un secret Azure Key Vault existant ou en créer un nouveau. Une fois la commande terminée, la clé MY_SECRET fait référence à un secret Key Vault. Créez une définition de hook appropriée pour votre système d’exploitation.

hooks:
  preprovision: 
    run: 'echo ".env value: $MY_SECRET \nResolved secret: $SECRET_RESOLVE"'
    shell: sh
    interactive: true
    secrets:
      SECRET_RESOLVE: MY_SECRET

La prochaine fois que vous exécutez azd provision, le hook preprovision fonctionne et MY_SECRET est résolu en SECRET_RESOLVE.

Configuration du pipeline

azd simplifie le processus de configuration de l’intégration continue (CI) pour votre application. Que vous utilisiez GitHub ou Azure DevOps, exécutez azd pipeline config et suivez les étapes guidées pour configurer CI/CD.

Dans le cadre de la configuration automatique, azd crée des secrets et des variables pour votre flux de travail de déploiement CI/CD. Vous pouvez également définir vos propres variables et secrets à l’aide de la pipeline configuration dans azure.yaml. Les noms que vous définissez correspondent aux clés de votre azd environnement (.env). Si une clé contient une référence de secret (akvs), azd applique un comportement différent selon que vous l’ajoutez en tant que variable ou secret :

Approche Valeur CI/CD stockée Rotation des secrets Idéal pour
variables Informations de référence sur Key Vault (akvs://...) Automatique : le pipeline lit toujours la dernière valeur de Key Vault. Lorsque le principal du service CI/CD dispose d’un accès en lecture au Key Vault.
secrets Valeur secrète réelle Manuel : réexécutez azd pipeline config après la rotation. Lorsque vous ne pouvez pas attribuer l’accès en lecture au Key Vault au principal du service.

Note

Lorsque vous utilisez variables, azd tente d’attribuer un rôle d’accès en lecture au principal de service utilisé par le flux de travail CI/CD. Si vous n’avez pas suffisamment d’autorisations pour attribuer le rôle de lecture pour le coffre de clés, l’opération échoue. Utilisez secrets à la place.

Exemple

À partir d’un projet initialisé azd, exécutez azd env set-secret SECURE_KEY et suivez les instructions. Une fois la commande terminée, azd env get-values affiche la référence :

SECURE_KEY="akvs://faa080af-c1d8-40ad-9cce-000000000000/vivazqu-kv/SECURE-KEY-kv-secret"

Ajoutez SECURE_KEY soit à la liste variables soit à la liste secrets dans azure.yaml:

# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
name: your-project-name
pipeline:
  variables:
    - SECURE_KEY

Lorsque vous exécutez azd pipeline config, SECURE_KEY est défini en tant que variable CI/CD avec la référence Key Vault comme valeur. Si SECURE_KEY est également mappé à un paramètre d'entrée de Bicep ou à une définition de hook, azd résout automatiquement la valeur secrète au moment de l'exécution.