アプリ レベルのシークレットは、関数コードとバインドが実行時に使用する構成値です。 HTTP エンドポイントをセキュリティで保護する Functions アクセス キーとは異なり、アプリ レベルのシークレットは、アプリケーションが他のサービスに接続するために必要な資格情報です。
たとえば、次のような場合です。
-
インフラストラクチャ接続 -
AzureWebJobsStorage接続文字列、Event Hubs、Service Bus、Cosmos DB、SQL についてのトリガーおよびバインド接続。 - ビジネス資格情報 - サードパーティの API キー、データベース パスワード、SaaS プラットフォーム トークン。
- カスタム構成 - コードが環境変数から読み取る機密性の高い値。
ストレージ オプションを選択する
Azure Container Appsでは、アプリ レベルのシークレットを格納する 2 つの方法が提供されます。
| オプション | 最適な用途 | 集中管理 | 自動回転 | 監査ログ記録 |
|---|---|---|---|---|
| Container Apps のシークレット | 開発/テスト、単純なシングルアプリ ワークロード | いいえ - 対象範囲は1つのアプリに限定されています。 | いいえ | アクティビティ ログのみ |
| Key Vault の参照 | 運用、マルチアプリ、コンプライアンス | はい - すべてのアプリで | はい (バージョンレス URI) | Key Vaultの完全診断 |
Tip
わかりやすくするために、Container Apps のシークレットから始めます。 一元管理、自動ローテーション、またはコンプライアンス グレードの監査が必要な場合は、Key Vault参照に移動します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
- Azure CLI バージョン 2.40.0 以降。
- 既存の Azure Functions アプリを持つか、または作成するためのアクセス許可を持っていること。
コンテナーアプリのシークレットを使用する
Container Apps は、アプリの configuration.secrets 配列にシークレットを格納し、保存時の値を暗号化します。 環境変数、スケール ルール、ボリューム マウント、および Dapr コンポーネントでシークレットを参照できます。
シークレットを格納する
[ 設定] で、[シークレット] を選択 します。
[ 追加] を選択し、次の値を入力します。
財産 価値 氏名 database-passwordなどのシークレット名。 小文字、数字、ハイフンのみを使用します。Type コンテナアプリのシークレット 価値 秘密の値。 [] を選択し、[] を追加します。
環境変数でシークレットを参照する
シークレットを格納した後、それを環境変数で参照して、関数コードで読み取ることができるようにします。
Functions コンテナー アプリの [ アプリケーション] で、[ リビジョンとレプリカ] を選択します。
[ 新しいリビジョンの作成] を選択します。
[ コンテナー ] タブで、コンテナーを選択し、[ 編集] を選択します。
[ 環境変数 ] タブを選択し、[ 追加] を選択します。
次の値を入力します。
財産 価値 氏名 DATABASE_PASSWORDSource シークレットを参照する 価値 database-password[保存] を選択し、[作成] を選択して新しいリビジョンをデプロイします。
シークレットを確認する
関数がシークレット値を読み取ることができることを確認するには、関数を呼び出し、不足している構成に関連するエラーなしで実行されていることを確認します。
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>"
Important
Container Apps は、実行時に環境変数にシークレット値を挿入します。 コードは環境変数を読み取り、シークレット ストアに直接アクセスしません。
Limitations
Container Apps シークレットには、次の制限があります。
- 一元化なし - 各コンテナー アプリは、独自のシークレットを個別に格納します。
- 自動ローテーションなし - シークレット値を手動で更新する必要があります。
- 有効期限なし - シークレットは自動的に期限切れになりません。
- 制限付き監査 - 基本的なアクティビティ ログのみ。シークレット アクセスの詳細な監査はありません。
- バージョン管理なし - 組み込みのシークレット バージョン履歴はありません。
- 更新動作 - シークレットを変更しても、新しいリビジョンはトリガーされません。 変更を取得するには、新しいリビジョンを作成するか、既存のリビジョンを再起動する必要があります。
Key Vault参照を使用する
Key Vault参照を使用すると、コンテナー アプリはマネージド ID を使用してAzure Key Vaultからシークレットを直接プルできます。 このアプローチでは、一元管理、自動ローテーション、コンプライアンス グレードの監査が提供されます。
手順 1: マネージド ID を設定する
コンテナー アプリには、資格情報なしでKey Vaultに対する認証を行うためにマネージド ID が必要です。
[設定] にある [ID] を選択します。
[ システム割り当て済み ] タブで、[ 状態] を [オン] に設定します。
[ 保存] を選択し、[ はい ] を選択して確定します。
手順 2: Key Vault アクセス権を付与する
Key Vault シークレット ユーザー ロールをマネージド ID に割り当てて、シークレットを読み取ることができるようにします。
Azure ポータルでKey Vaultに移動します。
[設定] から [アクセス制御 (IAM)] を選択します。
[追加]>[ロール割り当ての追加] の順に選択します。
Role タブで、Key Vault シークレット ユーザーを選択します。
次へを選択します。
[メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。
[ マネージド ID の選択 ] ウィンドウで、サブスクリプションを選択し、マネージド ID の種類として [コンテナー アプリ ] を選択し、Functions コンテナー アプリを選択して、[選択] を 選択します。
レビュー + 割り当て を選択します。
手順 3: シークレットをKey Vaultに格納する
Key Vaultの Objects で、Secrets を選択します。
生成/インポート を選択します。
次の値を入力します。
財産 価値 アップロード オプション 手動 氏名 DatabasePasswordなどのシークレット名。価値 秘密の値。 を選択してを作成します。
新しく作成したシークレットを選択し、現在のバージョンを選択します。
シークレット識別子 URI をコピーします。 自動ローテーションを有効にするには、(末尾のバージョン セグメントを除く) バージョンレス URI を使用します。
手順 4: Container Apps でKey Vault シークレットを参照する
Key Vault シークレットを参照する Container Apps シークレットを作成し、環境変数にバインドします。
Functions コンテナー アプリに移動します。 [ 設定] で、[シークレット] を選択 します。
[] を選択し、[] を追加します。
[ シークレットの追加] に、次の値を入力します。
財産 価値 氏名 database-passwordType Key Vault リファレンス Key Vault のシークレット URL コピーしたシークレット識別子 URI。 アイデンティティ システム割り当て (またはユーザーが割り当てたアイデンティティ)。 [] を選択し、[] を追加します。
[ アプリケーション] で、[ リビジョンとレプリカ] を選択します。
DATABASE_PASSWORDシークレットを参照database-password環境変数を使用して新しいリビジョンを作成します。
手順 5: Key Vault参照を確認する
関数を呼び出し、不足している構成に関連するエラーなしで実行することを確認します。
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>"
シークレットの自動ローテーション
バージョンレス URI でKey Vault シークレットを参照すると、Container Apps によって最新バージョンが自動的に取得されます。
-
バージョンレス URI:
https://myvault.vault.azure.net/secrets/mysecret- 常に最新バージョンを使用します。 -
バージョン付き URI:
https://myvault.vault.azure.net/secrets/mysecret/ec96f020...- 特定のバージョンに固定されています。
バージョンレス URI では、Container Apps は 30 分以内に新しいバージョンをチェックし、アクティブなリビジョンを自動的に再起動して新しい値を取得します。