次の方法で共有


Azure Container Appsでシークレットを管理する

Azure Container Appsを使用すると、アプリケーションは機密性の高い構成値を安全に格納できます。 シークレットがアプリケーション レベルで定義されると、コンテナー アプリのリビジョンにセキュリティで保護された値を使用できるようになります。 さらに、スケール ルール内でセキュリティで保護された値を参照できます。 Dapr でシークレットを使用する方法の詳細については、Dapr 統合に関するページを参照してください。

  • シークレットはアプリケーション全体に関するものであり、特定のアプリケーションのリビジョンには依存しません。
  • シークレットを追加、削除、または変更しても、新しいリビジョンは生成されません。
  • アプリケーションの各リビジョンで、1 つまたは複数のシークレットを参照できます。
  • 複数のリビジョンで同じシークレットを参照できます。

シークレットを更新または削除しても、アプリ内の既存のリビジョンには自動的には影響しません。 シークレットが更新または削除されるときは、2 つの方法のいずれかで変更に対応できます。

  1. 新しいリビジョンをデプロイします。
  2. 既存のリビジョンを再起動します。

シークレットを削除する前に、古いシークレットを参照しない新しいリビジョンをデプロイします。 次に、シークレットを参照するすべてのリビジョンを非アクティブ化します。

シークレットの定義

シークレットは、名前と値のペアのセットとして定義されます。 各シークレットの値は、Azure Key Vaultに格納されているシークレットへの直接または参照として指定されます。

運用環境でシークレットの値を直接指定することは避けてください。 代わりに、「Store secret value in Container Apps」セクションで説明されているように、Azure Key Vaultに格納されているシークレットへの参照を使用します。

Container Apps にシークレット値を格納する

以下は、ポータルまたは異なるコマンド ライン オプションを使用してシークレットを定義する場合に使用されます。

  1. Azure ポータルでコンテナー アプリに移動します。

  2. [ セキュリティ ] セクションで、[ シークレット] を選択します。

  3. [追加] を選択します。

  4. [Add secret] (シークレットの追加) コンテキスト ペインに次の情報を入力します。

    • 名前: シークレットの名前。
    • 種類: Container Apps シークレットを選びます。
    • : シークレットの値。
  5. [追加] を選択します。

Key Vaultからシークレットを参照する

シークレットを定義するときは、Azure Key Vaultに格納されているシークレットへの参照を作成します。 Container Apps は、Key Vaultからシークレット値を自動的に取得し、コンテナー アプリでシークレットとして使用できるようにします。

Key Vaultからシークレットを参照するには、まずコンテナー アプリでマネージド ID を有効にし、Key Vault シークレットへのアクセス権を ID に付与する必要があります。

コンテナー アプリでマネージド ID を有効にするには、マネージド ID に関する記事を参照してください。

Key Vault シークレットへのアクセスを許可するには、マネージド ID に Azure RBAC ロール Key Vault シークレット ユーザーを付与します。

  1. Azure ポータルでコンテナー アプリに移動します。

  2. [ セキュリティ ] セクションで、[ ID] を選択します。

  3. [システム割り当て済み] タブで、[状態][オン] に設定します。

また、ユーザー割り当てマネージド ID を使用することもできます。これは、複数のリソース間で再利用でき、アプリのライフサイクルとは別に保持されます。 これを使用するには、[ ユーザー割り当て ] タブを選択し、既存の ID を選択します。

  1. [保存] を選択してシステム割り当てマネージド ID を有効にします。

  2. システム割り当てマネージド ID を有効にし、コンテナー アプリをMicrosoft Entra IDに登録することを確認するポップアップが表示されます。 [はい] を選択します。

  3. [ セキュリティ ] セクションで、[ シークレット] を選択します。

  4. [追加] を選択します。

  5. [Add secret] (シークレットの追加) コンテキスト ペインに次の情報を入力します。

    • 名前: シークレットの名前。
    • Type: Key Vault参照を選択します。
    • Key Vault シークレット URL: Key Vault内のシークレットの URI。 この URI の形式は次のとおりです: https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
    • ID: [システム割り当て] を選択します。
  6. [追加] を選択します。

UDR With Azure Firewall を使用している場合は、AzureKeyVault サービス タグと login.microsoft.com FQDN をファイアウォールの許可リストに追加する必要があります。 必要な追加のサービス タグを決定するには、Azure Firewallを参照してください。

シークレット URI とシークレットローテーションのKey Vault

Key Vault シークレット URI は、次のいずれかの形式にする必要があります。

  • https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: 特定バージョンのシークレットを参照します。
  • https://myvault.vault.azure.net/secrets/mysecret: シークレットの最新バージョンを参照します。

URI にバージョンが指定されていない場合、アプリはキー コンテナーに存在する最新バージョンを使います。 新しいバージョンが使用可能になると、30 分以内にアプリは最新バージョンを自動的に取得します。 環境変数でシークレットを参照するアクティブなリビジョンは自動的に再起動され、新しい値が取得されます。

使うシークレットのバージョンを完全に制御するには、URI でバージョンを指定します。

環境変数でのシークレットの参照

シークレットの定義」セクションの説明に従いアプリケーション レベルでシークレットを宣言した後、コンテナー アプリで新しいリビジョンを作成するとき、環境変数でそれらのシークレットを参照できます。 環境変数でシークレットを参照すると、その値には、シークレットで定義されている値が設定されます。

次の例は、アプリケーション レベルで接続文字列を宣言するアプリケーションを示しています。 この接続は、コンテナー環境変数とスケール ルールで参照されています。

コンテナー アプリでシークレットを定義したら、新しいリビジョンを作成するときに環境変数でそれを参照できます。

  1. Azure ポータルでコンテナー アプリに移動します。

  2. [アプリケーション] セクションで、[リビジョンとレプリカ] を選択します。

  3. リビジョンとレプリカ ページで、[新しいリビジョンの作成] を選択します。

  4. 新しいリビジョンの作成とデプロイ ページの [コンテナー] タブの [コンテナー イメージ] セクションで、コンテナーを選択します。

  5. 編集を選択します。

  6. [コンテナーの編集] コンテキスト ウィンドウで、[環境変数] タブを選択します。

  7. [追加] を選択します。

  8. 次の情報を入力してください。

    • 名前: 環境変数の名前。
    • ソース: [Reference a secret] (シークレットの参照) を選びます。
    • : 前に定義したシークレットを選択します。
  9. [保存] を選択します。

  10. 新しいリビジョンの作成とデプロイ ページで、[作成] を選択して新しいリビジョンを作成します。

ボリューム内にシークレットを配置する

シークレットの定義」セクションの説明に従いアプリケーション レベルでシークレットを宣言した後、コンテナー アプリで新しいリビジョンを作成するとき、ボリューム マウントでそれらのシークレットを参照できます。 ボリューム内のシークレットをマウントする場合、各シークレットはボリューム内のファイルとしてマウントされます。 ファイル名はシークレットの名前であり、ファイルの内容はシークレットの値です。 ボリューム マウントですべてのシークレットを読み込むか、特定のシークレットを読み込むことができます。

コンテナー アプリでシークレットを定義したら、新しいリビジョンを作成するときにボリューム マウントでそれを参照できます。

  1. Azure ポータルでコンテナー アプリに移動します。

  2. [アプリケーション] セクションで、[リビジョンとレプリカ] を選択します。

  3. リビジョンとレプリカ ページで、[新しいリビジョンの作成] を選択します。

  4. 新しいリビジョンの作成とデプロイ ページの [コンテナー] タブの [コンテナー イメージ] セクションで、コンテナーを選択します。

  5. 編集を選択します。

  6. [コンテナーの編集] コンテキスト ペインで、[ボリューム マウント] タブを選びます。

  7. [Create new volume] (新しいボリュームの作成) を選びます。

  8. [ボリュームの追加] コンテキスト ウィンドウで、次の情報を入力します:

    • ボリュームの種類: Secret を選択します。
    • 名前: mysecrets
    • Mount all secrets (すべてのシークレットをマウントする): 有効

    特定のシークレットを読み込む場合は、[Mount all secrets] (すべてのシークレットをマウントする) を無効にして、読み込むシークレットを選びます。

  9. [追加] を選択します。

  10. [コンテナーの編集] コンテキスト ウィンドウの [ボリューム名] で、mysecrets を選択します。

  11. [マウント パス] に「/mnt/secrets」と入力します。

  12. [保存] を選択します。

  13. 新しいリビジョンの作成とデプロイ ページで、[作成] を選択し、ボリューム マウントを使用して新しいリビジョンを作成します。

Key Vault リファレンスのトラブルシューティング

Azure Key Vaultからシークレットを参照すると、シークレットの取得または同期中に問題が発生する可能性があります。 一般的なエラーと解決策を次に示します。

エラー 原因 Resolution
管理IDが有効になっていません コンテナー アプリにはマネージド ID が割り当てられません。 コンテナー アプリでシステム割り当てマネージド ID またはユーザー割り当てマネージド ID を有効にします。 マネージド ID に関するページを参照してください。
ID が見つかりません 指定したマネージド ID が存在しないか、コンテナー アプリに割り当てられません。 ID が作成 され、[ID] セクションでコンテナー アプリに割り当てられているかどうかを確認します。
Key Vaultでシークレットが無効になっている シークレットは、Key Vault リソースで無効になっています。 Azure ポータルでKey Vaultに移動し、シークレットを有効にします。
認証に失敗しました マネージド ID には、シークレットを読み取るために必要なアクセス許可がありません。 Key Vaultのマネージド ID に Key Vault シークレット ユーザー ロールを付与します。 「Key Vault シークレット ユーザーを参照してください。
RBAC アクセス許可が拒否されました マネージド ID には、Key Vaultにアクセスするための十分なアクセス許可がありません。 Key Vaultの RBAC ロールの割り当てを確認し、シークレットの読み取りアクセス許可が含まれていることを確認します。

次のステップ