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

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

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

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

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

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

シークレットの定義

シークレットは、名前と値のペアのセットとして定義されます。 各シークレットの値は、直接指定するか、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 シークレットへのアクセス権を付与するには、Key Vault で作成したマネージド ID のアクセス ポリシーを作成します。 このポリシーで "Get" シークレット アクセス許可を有効にします。

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

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

  3. [システム割り当て済み] タブで [オン] を選びます。

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

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

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

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

    • 名前: シークレットの名前。
    • 種類: [キー コンテナー参照] を選びます。
    • Key Vault secret URL (Key Vault シークレットの URL): Key Vault のシークレットの URI。
    • ID: Key Vault からシークレットを取得するために使う ID。
  8. [追加] を選択します。

Note

[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. [Revision management] (リビジョン管理) ページを開きます。

  3. [新しいリビジョンの作成] を選択します。

  4. [新しいリビジョンの作成とデプロイ] ページでコンテナーを選びます。

  5. [環境変数] セクションで [追加] を選びます。

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

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

  8. [作成] を選んで新しいリビジョンを作成します。

ボリューム内のシークレットのマウント

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

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

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

  2. [Revision management] (リビジョン管理) ページを開きます。

  3. [新しいリビジョンの作成] を選択します。

  4. [Create and deploy new revision] (新しいリビジョンの作成とデプロイ) ページで。

  5. コンテナーを選び、[編集] を選びます。

  6. [ボリュームのマウント] セクションで [シークレット] セクションを展開します。

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

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

    • 名前: mysecrets
    • Mount all secrets (すべてのシークレットをマウントする): 有効

    Note

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

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

  10. [ボリューム名] で [mysecrets] を選びます。

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

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

  13. [作成] を選び、ボリューム マウントを使って新しいリビジョンを作成します。

次のステップ