次の方法で共有


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

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

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

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

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

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

シークレットの定義

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

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

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

ポータルを介して、またはさまざまなコマンド ライン オプションを介してシークレットを定義する場合。

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

  2. [設定] セクションで、[シークレット] を選択します。

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

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

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

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

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

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

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

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

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

  2. [設定] セクションで、[ID] を選択します。

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

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

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

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

  3. [設定] セクションで、[シークレット] を選択します。

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

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

    • 名前: シークレットの名前。
    • 種類: Key Vault の参照 を選択します。
    • Key Vault secret URL (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] (UDR と Azure Firewall) を使っている場合、AzureKeyVault サービス タグと login.microsoft.com FQDN をファイアウォールの許可リストに追加する必要があります。 必要な追加のサービス タグを判断するには、「Azure Firewall を使用した UDR の構成」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. 編集を選択します。

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

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

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

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

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

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

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

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

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

  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 portal で Key Vault に移動し、シークレットを有効にします。
認証に失敗しました マネージド ID には、シークレットを読み取るために必要なアクセス許可がありません。 Key Vault のマネージド ID に Key Vault シークレット ユーザー ロールを付与します。 Key Vault シークレット ユーザーを参照してください。
RBAC アクセス許可が拒否されました マネージド ID には、Key Vault にアクセスするための十分なアクセス許可がありません。 Key Vault での RBAC ロールの割り当てを確認し、シークレットの読み取りアクセス許可が含まれていることを確認します。

次のステップ