Azure Developer CLI で環境シークレットを使用する

Azure Developer CLI (azd) では、プロジェクト環境内の Azure Key Vault シークレット ( .env ファイル) の参照がサポートされています。 これにより、 azd プロジェクトで機密データを操作するための安全なオプションが提供されます。 これらのシークレットは、フックや CI/CD パイプライン構成など、さまざまな azd 機能と統合されます。

前提条件

  • Azure Developer CLI がインストールされていること。
  • アクセスできるAzure Key Vaultインスタンス、または自分で作成するための権限を持っているインスタンス。

Key Vault シークレットを設定する

Key Vault シークレットを設定するには、 azd env set-secret <name> コマンドを実行します。ここで、 <name> は Key Vault シークレットを参照する環境内のキーです。 シークレットを設定した後、 azd は次のシナリオで Key Vault から値を自動的に取得します。

Bicepパラメーター

Bicep パラメーターを Azure Key Vault シークレットの値に関連付けるには、次の手順に従います。

  1. @secure() キーワードを使用して、Bicep パラメーターにセキュリティで保護された注釈を付けます。
  2. Bicep パラメーターを、Azure Key Vault シークレットを参照する環境内の対応するキー名にリンクするマッピングを main.parameters.json ファイルに作成します。

Bicep パラメーター ファイル (.bicepparam) を使用する場合、環境シークレットは現在サポートされていません。

azd プロジェクトから、azd env set-secret MY_SECRETを実行し、プロンプトに従って既存の Azure Key Vault シークレットを選択するか、新しいシークレットを作成します。 コマンドが完了すると、キー MY_SECRET は Key Vault シークレットへの参照を保持します。 値を使用する Bicep パラメーターを追加または選択し、セキュリティで保護されたパラメーターとして指定します。

@secure()
param secureParameter string

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

次回 azd up または azd provisionを実行するときに、 azd はパラメーターの値として Azure Key Vault シークレットを使用します。

フック

azd は、フックの実行時に Azure Key Vault シークレットを自動的に取得できます。 既定では、 azd フックを実行すると、プロジェクト環境 ( .env ファイル) からのすべてのキーと値のペアがフックの環境に設定されます。 ただし、Key Vault シークレットへの参照は、対応するシークレット値に自動的に解決されません。

これらの参照を解決するには、次の手順に従います。

  1. 環境内のキーから、Key Vault シークレットが解決される新しいキーへのマッピングを作成します。
  2. フック定義の secrets フィールドを使用して、このマッピングを作成します。

azd プロジェクトから、azd env set-secret MY_SECRETを実行し、プロンプトに従って既存の Azure Key Vault シークレットを選択するか、新しいシークレットを作成します。 コマンドが完了すると、キー MY_SECRET は Key Vault シークレットを参照します。 オペレーティング システムに適したフック定義を作成します。

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

次回 azd provisionを実行すると、 preprovision フックが実行され、 MY_SECRETSECRET_RESOLVEに解決されます。

パイプライン構成

azd は、アプリケーションの継続的インテグレーション (CI) を設定するプロセスを簡略化します。 GitHub と Azure DevOps のどちらを使用する場合でも、 azd pipeline config 実行し、ガイド付きの手順に従って CI/CD を構成します。

自動構成の一部として、 azd は CI/CD デプロイ ワークフローのシークレットと変数を作成します。 pipelineazure.yaml構成を使用して、独自の変数とシークレットを定義することもできます。 定義する名前は、 azd 環境 (.env) のキーに対応します。 キーがシークレット参照 (akvs) を持っている場合、変数として追加するかシークレットとして追加するかによって、azd は異なる動作を適用します。

方法 格納されている CI/CD 値 秘密のローテーション 最適な用途
variables Key Vault リファレンス (akvs://...) 自動 — パイプラインは常に Key Vault から最新の値を読み取ります。 CI/CD サービス プリンシパルに Key Vault の読み取りアクセス権がある場合。
secrets 実際のシークレット 手動 — 回転後に azd pipeline config 再実行します。 Key Vault の読み取りアクセスをサービス プリンシパルに割り当てることができない場合。

variablesを使用すると、azdは CI/CD ワークフローで使用されるサービス プリンシパルに読み取りアクセス ロールを割り当てようとします。 Key Vault の読み取りロールを割り当てるための十分なアクセス許可がない場合、操作は失敗します。 secrets を代わりに使用します。

初期化された azd プロジェクトから、 azd env set-secret SECURE_KEY を実行し、プロンプトに従います。 コマンドが完了すると、 azd env get-values 参照が表示されます。

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

SECURE_KEYvariablesまたはsecretsリストに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

azd pipeline configを実行すると、SECURE_KEYはその値として Key Vault 参照を持つ CI/CD 変数として設定されます。 SECURE_KEYが Bicep 入力パラメーターまたはフック定義にもマップされている場合、azdは実行時にシークレット値を自動的に解決します。