次の方法で共有


Azure Container Apps のマネージド ID

Microsoft Entra ID のマネージド ID により、コンテナー アプリは、Microsoft Entra で保護された他のリソースにアクセスできます。 Microsoft Entra ID のマネージド ID の詳細については、「Azure リソースのマネージド ID」を参照してください。

コンテナー アプリには 2 種類の ID を付与できます:

  • システム割り当て ID はコンテナー アプリに関連付けられているため、コンテナー アプリが削除されると削除されます。 アプリは 1 つのシステム割り当て ID しか持つことはできません。
  • ユーザー割り当て ID は、コンテナー アプリやその他のリソースに割り当てることができるスタンドアロンの Azure リソースです。 コンテナー アプリは複数のユーザー割り当て ID を持つことができます。 ユーザー割り当て ID は、削除するまで存在します。

マネージド ID を使用する理由

実行中のコンテナー アプリでマネージド ID を使用すると、Microsoft Entra 認証をサポートしているサービスに対して認証できます。

マネージド ID を使用した場合:

  • アプリは、マネージド ID を使用してリソースに接続します。 コンテナー アプリで資格情報を管理する必要はありません。
  • ロールベースのアクセス制御を使用して、マネージド ID に特定のアクセス許可を付与できます。
  • システム割り当て ID が自動的に作成され、管理されます。 コンテナー アプリが削除されると削除されます。
  • ユーザー割り当て ID を追加および削除し、複数のリソースに割り当てることができます。 コンテナー アプリのライフ サイクルに依存しません。
  • マネージド ID を使用すると、ユーザー名とパスワードなしでプライベート Azure Container Registry に対して認証を行い、コンテナー アプリのコンテナーをプルできます。
  • マネージド ID を使用して、Dapr コンポーネントを介して Dapr 対応アプリケーションの接続を作成できます

一般的なユース ケース

システム割り当て ID は、次のワークロードに最適です:

  • 単一リソース内に格納されます
  • 独立した ID が必要です

ユーザー割り当て ID は、次のワークロードに最適です:

  • 複数のリソースで実行され、1 つの ID を共有できます
  • セキュアなリソースに対し事前認証が必要です

制限事項

init コンテナーからは、従量課金のみの環境専用ワークロード プロファイル環境でマネージド ID にアクセスすることはできません

マネージド ID の構成

マネージド ID は、次の方法で構成できます:

  • Azure portal
  • Azure CLI
  • 自分の Azure Resource Manager (ARM) テンプレート

実行中のコンテナー アプリでマネージド ID が追加、削除、または変更されると、アプリは自動的に再起動せず、新しいリビジョンは作成されません。

Note

2022 年 4 月 11 日より前にデプロイされたコンテナー アプリにマネージド ID を追加する場合は、新しいリビジョンを作成する必要があります。

システム割り当て ID を追加する

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

  2. [設定] グループで、[ID] を選択します。

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

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

システム割り当て ID のスクリーンショット。

ユーザー割り当て ID を追加する

ユーザー割り当て ID を使用してコンテナー アプリを構成するには、まず ID を作成してから、そのリソース識別子をコンテナー アプリの構成に追加する必要があります。 ユーザー割り当て ID は、Azure portal または Azure CLI を使用して作成できます。 ユーザー割り当て ID の作成と管理の詳細については、「ユーザー割り当てマネージド ID の管理」を参照してください。

最初に、ユーザー割り当て ID リソースを作成する必要があります。

  1. 「ユーザー割り当てマネージド ID の管理」の手順に従って、ユーザー割り当てマネージド ID リソースを作成します。

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

  3. [設定] グループで、[ID] を選択します。

  4. [ユーザー割り当て済み] タブ内で、[追加] を選択します。

  5. 先ほど作成した ID を検索して選択します。

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

ユーザー割り当て ID のスクリーンショット。

ターゲット リソースを構成する

一部のリソースでは、アクセス権を付与するために、アプリのマネージド ID のロールの割り当てを構成する必要があります。 そうしないと、Azure Key Vault や Azure SQL Database などのサービスへのアプリからの呼び出しは、その ID に有効なトークンを使用した場合でも拒否されます。 Azure ロールベースのアクセス制御 (Azure RBAC) の詳細については、「RBAC とは」を参照してください。 Microsoft Entra トークンをサポートしているリソースの詳細については、「Microsoft Entra 認証をサポートしている Azure サービス」をご覧ください。

重要

マネージド ID のバックエンド サービスは、リソース URI ごとのキャッシュを約 24 時間保持します。 特定のターゲット リソースのアクセス ポリシーを更新し、そのリソースのトークンをすぐに取得した場合、そのトークンの有効期限が切れるまで、期限切れのアクセス許可を持つキャッシュされたトークンを取得し続ける可能性があります。 リソース トークンの強制はサポートされていません。

アプリ コードでの Azure サービスへの接続

アプリはマネージド ID を使用して、Azure SQL Database、Azure Key Vault、Azure Storage など、Microsoft Entra ID を使用している Azure リソースにアクセスするためのトークンを取得できます。 これらのトークンは、アプリケーションの特定のユーザーではなく、リソースにアクセスしているアプリケーションを表します。

Container Apps には、トークンを取得するための内部アクセス可能な REST エンドポイント が用意されています。 REST エンドポイントは、標準の HTTP GET 要求を使用してアプリ内から入手できます。これは、優先する言語で汎用 HTTP クライアントを使用して送信できます。 NET、JavaScript、Java、Python の場合、Azure ID クライアント ライブラリは、この REST エンドポイントを抽象化します。 その他の Azure サービスへの接続は、サービス固有のクライアントに資格情報オブジェクトを追加することで行うことができます。

Note

Azure ID クライアント ライブラリの使用時には、ユーザー割り当てマネージド ID のクライアント ID を明示的に指定する必要があります。

Note

Entity Framework Core で Azure SQ Lデータソースに接続する場合、マネージド ID 接続のための特別な接続文字列を提供する Microsoft.Data.SqlClient の使用をご検討下さい。

.NET のアプリの場合、マネージド ID を利用する最も簡単な方法は、.NET 用の Azure ID クライアント ライブラリを使用することです。 詳細については、次のリソースを参照してください。

リンクされた例では、DefaultAzureCredentialを使用します。 このオブジェクトは、Azure (マネージド ID を使用) とローカル コンピューター (マネージド ID を除く) で同じパターンが動作するため、ほとんどのシナリオで役立ちます。

スケール ルールにマネージド ID を使用する

スケール ルールでマネージド ID を使用して、マネージド ID をサポートする Azure サービスで認証できます。 スケール ルールでマネージド ID を使用するには、スケール ルールの auth プロパティではなく、identity プロパティを使用します。 identity プロパティに使用できる値は、ユーザー割り当て ID の Azure リソース ID か、システム割り当て ID を使用する system です。

Note

スケール ルールでのマネージド ID 認証はパブリック プレビュー段階です。 API バージョンの 2024-02-02-preview で使用できます。

次の ARM テンプレートの例は、Azure Queue Storage スケール ルールでマネージド ID を使用する方法を示しています。

Queue Storage アカウントでは、accountName プロパティを使用してストレージ アカウントを識別しますが、identity プロパティは使用するマネージド ID を指定します。 auth プロパティを使用する必要はありません。

"scale": {
    "minReplicas": 1,
    "maxReplicas": 10,
    "rules": [{
        "name": "myQueueRule",
        "azureQueue": {
            "accountName": "mystorageaccount",
            "queueName": "myqueue",
            "queueLength": 2,
            "identity": "<IDENTITY1_RESOURCE_ID>"
        }
    }]
}

スケール ルールでマネージド ID を使用する方法の詳細については、「Azure Container Apps でスケーリング ルールを設定する」を参照してください。

マネージド ID の可用性を制御する

Container Apps では、init コンテナーおよびメイン コンテナーを指定できます。 既定では、従量課金ワークロード プロファイル環境のメインおよび init コンテナーの両方で、マネージド ID を使用して他の Azure サービスにアクセスできます。 従量課金のみの環境と専用ワークロード プロファイル環境では、メイン コンテナーのみがマネージド ID を使用できます。 マネージド ID アクセス トークンは、コンテナー アプリで構成されているすべてのマネージド ID で使用できます。 ただし、状況によっては、init コンテナーまたはメイン コンテナーのみがマネージド ID のアクセス トークンを必要とします。 マネージド ID のみを使用して Azure Container Registry にアクセスしてコンテナー イメージをプルできる場合もあり、アプリケーション自体から Azure Container Registry にアクセスする必要はありません。

API バージョン 2024-02-02-preview 以降では、init およびメイン フェーズ中にコンテナー アプリで使用できるマネージド ID を制御して、最小限の特権のセキュリティ原則に従うことができます。 次のオプションを使用できます。

  • Init: init コンテナーでのみ使用できます。 これは、マネージド ID を必要とする初期化作業を実行する必要があるが、メイン コンテナーでマネージド ID が不要になった場合に使用します。 このオプションは現在、ワークロード プロファイル従量課金環境でのみサポートされています
  • Main: メイン コンテナーでのみ使用できます。 これは、init コンテナーにマネージド ID が必要ない場合に使用します。
  • All: すべてのコンテナーで使用できます。 この値が既定値です。
  • None: どのコンテナーでも使用できません。 これは、ACR イメージ プル、スケール ルール、または Key Vault シークレットにのみ使用され、コンテナーで実行されているコードで使用できる必要がないマネージド ID がある場合に使用します。

次の ARM テンプレートの例は、次のようなワークロード プロファイル従量課金環境でコンテナー アプリを構成する方法を示しています。

  • コンテナー アプリのシステム割り当て ID をメイン コンテナーのみに制限します。
  • 特定のユーザー割り当て ID を init コンテナーのみに制限します。
  • コンテナー内のコードでそのマネージド ID を使用してレジストリにアクセスすることを許可せずに、Azure Container Registry イメージ プルに対して特定のユーザー割り当て ID を使用します。 この例では、コンテナー自体がレジストリにアクセスする必要はありません。

この方法では、悪意のあるアクターがコンテナーへの未承認のアクセス権を取得した場合にアクセスできるリソースが制限されます。

{
    "location": "eastus2",
    "identity":{
    "type": "SystemAssigned, UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>":{},
            "<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
         }
     },
    "properties": {
        "workloadProfileName":"Consumption",
        "environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
        "configuration": {
            "registries": [
            {
                "server": "myregistry.azurecr.io",
                "identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
            }],
            "identitySettings":[
            {
                "identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
                "lifecycle": "None"
            },
            {
                "identity": "<IDENTITY1_RESOURCE_ID>",
                "lifecycle": "Init"
            },
            {
                "identity": "system",
                "lifecycle": "Main"
            }]
        },
        "template": {
            "containers":[
                {
                    "image":"myregistry.azurecr.io/main:1.0",
                    "name":"app-main"
                }
            ],
            "initContainers":[
                {
                    "image":"myregistry.azurecr.io/init:1.0",
                    "name":"app-init",
                }
            ]
        }
    }
}

マネージド ID を表示

次の Azure CLI コマンドを使用して、システム割り当てマネージド ID とユーザー割り当てマネージド ID を表示できます。 出力には、コンテナー アプリに割り当てられているすべてのマネージド ID の型、テナント ID、プリンシパル ID が表示されます。

az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>

マネージド ID の削除

システム割り当て ID を削除すると、Microsoft Entra ID から削除されます。 コンテナー アプリのリソース自体を削除すると、システム割り当て ID も Microsoft Entra ID から自動的に削除されます。 お使いのコンテナー アプリからユーザー割り当てマネージド ID を削除しても、Microsoft Entra ID からは削除されません。

  1. アプリのページの左側のナビゲーションで、[設定] グループまで下にスクロールします。

  2. [ID] を選択します。 次に、ID の種類に基づいて、次の手順に従います。

    • システムに割り当てられた ID: [システム割り当て済み] タブで [状態][オフ] に切り替えます。 [保存] を選択します。
    • ユーザーに割り当てられたID: [ユーザ割り当て済み] タブを選択し、ID のチェックボックスを選択し、[削除] を選択します。 [はい] を選択して確定します。

次のステップ