アプリでフェデレーション ID 資格情報に関する重要な考慮事項と制限事項

この記事では、Microsoft Entra アプリとユーザー割り当て済みマネージド ID でのフェデレーション ID 資格情報の使用に関する重要な考慮事項、制限事項、制約事項について説明します。

フェデレーション ID 資格情報によって有効になるシナリオの詳細については、ワークロード ID フェデレーションの概要に関する記事を参照してください。

フェデレーション ID 資格情報に関する一般的な考慮事項

適用対象: アプリケーションとユーザー割り当てマネージド ID

アプリ登録を作成してシークレットまたは証明書を追加するアクセス許可があれば、だれでもフェデレーション ID 資格情報をアプリに追加できます。 ただし、Microsoft Entra 管理センター[ユーザー] -> [ユーザー設定] ブレードで [ユーザーはアプリケーションを登録できる] スイッチが [いいえ] に設定されている場合は、アプリ登録を作成することも、フェデレーション ID 資格情報を構成することもできません。 フェデレーション ID 資格情報を代わりに構成してくれる管理者を探してください (アプリケーション管理者ロールまたはアプリケーション所有者ロールを持つ担当者)。

フェデレーション ID 資格情報を使用しても、Microsoft Entra テナントのサービス プリンシパル オブジェクト クォータは消費されません。

アプリケーションまたはユーザー割り当てマネージド ID に、最大 20 個のフェデレーション ID 資格情報を追加できます。

フェデレーション ID 資格情報を構成する場合に指定する重要な情報がいくつかあります。

  • issuersubjectは、信頼関係を設定するために必要な重要な情報です。 issuersubject の組合せは、アプリで一意である必要があります。 外部ソフトウェア ワークロードが Microsoft ID プラットフォーム に対してアクセス トークンの外部トークンの交換を要求すると、フェデレーション ID 資格情報の subjectsubject の値が、外部トークンで指定されたissuerおよびsubject要求に対してチェックされます。 その検証チェックに合格するとMicrosoft ID プラットフォームは外部ソフトウェア ワークロードにアクセス トークンを発行します。

  • issuer は、外部 ID プロバイダーの URL であり、交換される外部トークンの要求と issuer 一致する必要があります。 必須です。 issuer 要求の値に先頭または末尾の空白がある場合、トークン交換はブロックされます。 このフィールドの文字数制限は 600 文字です。

  • subjectは、外部 ソフトウェア ワークロードの識別子であり、交換される外部トークンの要求と sub (subject) 一致する必要があります。 subjectには固定形式はありません。各 IdP は独自の GUID (場合によってはコロンで区切られた識別子、もしくは任意の文字列) が使用されます。 このフィールドの文字数制限は 600 文字です。

    重要

    subject の設定値は、GitHub ワークフローの構成と完全に一致する必要があります。 そうしないと、Microsoft ID プラットフォームは、受信した外部トークンを確認し、アクセス トークンとの交換を拒否します。 エラーは発生しませんが、交換はエラーなしで失敗します。

    重要

    誤って subject 設定に正しくない外部ワークロード情報を追加した場合でも、フェデレーション ID 資格情報はエラーなしで正常に作成されます。 エラーは、トークンの交換が失敗するまで明らかになりません。

  • audiences は、外部トークンに指定できる対象ユーザーの一覧を示します。 必須です。 1 つの対象ユーザーの値を追加する必要があり、この値には 600 文字の制限があります。 推奨値は "api://AzureADTokenExchange" です。 これは、Microsoft ID プラットフォームが受信トークンの aud 要求で受け入れる必要があるものを示しています。

  • name は、フェデレーション ID 資格情報の一意識別子です。 必須です。 このフィールドの文字数は 3 から 120 文字に制限され、URL に対応している必要があります。 英数字、ダッシュ、またはアンダースコア文字がサポートされており、最初の文字は英数字でなければなりません。  作成後は変更できません。

  • description は、フェデレーション ID 資格情報のユーザー提供の説明です。 省略可能。 この説明は Microsoft Entra ID によって検証および確認されません。 このフィールドには、600 文字の制限があります。

フェデレーション ID 資格情報のプロパティ値では、ワイルドカード文字はサポートされていません。

サポートされていないリージョン (ユーザー割り当て済みマネージド ID)

適用対象: ユーザー割り当てマネージド ID

現在、次のリージョンで作成されたユーザー割り当てマネージド ID では、フェデレーション ID 資格情報の作成はサポートされていません

  • 東アジア
  • カタール中部
  • マレーシア南部
  • イタリア北部
  • イスラエル中部

これらのリージョンで、ユーザー割り当て ID でフェデレーション ID 資格情報を作成する操作のサポートは、段階的にロールアウトされます。このリージョンでフェデレーション ID 資格情報を使う必要があるリソースの場合、それを実現するには、サポートされているリージョンで作成されたユーザー割り当てマネージド ID を利用します。

サポートされている署名アルゴリズムと発行者

適用対象: アプリケーションとユーザー割り当てマネージド ID

ワークロード ID フェデレーションを使用したトークン交換でサポートされるのは、RS256 アルゴリズムを使用して署名されたトークンを提供する発行者のみです。 他のアルゴリズムで署名されたトークンの交換は、機能する可能性はありますが、テストされていません。

Microsoft Entra 発行者はサポートされていません

適用対象: アプリケーションとユーザー割り当てマネージド ID

同じテナントまたは異なるテナントからの 2 つの Microsoft Entra ID 間でフェデレーションを作成することはサポートされていません。 フェデレーション ID 資格情報を作成する場合、次の値を使用して "発行者" (外部 ID プロバイダーの URL) を構成することはできません。

  • *.login.microsoftonline.com
  • *.login.windows.net
  • *.login.microsoft.com
  • *.sts.windows.net

Microsoft Entra 発行者を使用してフェデレーション ID 資格情報を作成することは可能ですが、承認に使用しようとすると、エラー AADSTS700222: AAD-issued tokens may not be used for federated identity flows が発生して失敗します。

フェデレーション資格情報の変更が反映されるまでの時間

適用対象: アプリケーションとユーザー割り当てマネージド ID

フェデレーション ID 資格情報を最初に構成した後、それがリージョン全体に反映されるまでには時間がかかります。 フェデレーション ID 資格情報を構成した数分後に行われたトークン要求は、キャッシュが古いデータを含むディレクトリに設定されるため、失敗する可能性があります。 この時間枠の間は、承認要求が失敗し、次のエラー メッセージが返される場合があります。AADSTS70021: No matching federated identity record found for presented assertion.

この問題を回避するには、フェデレーション ID 資格情報を追加した後、承認サービスのすべてのノードでレプリケーションが完了するように、しばらく待ってからトークンを要求してください。 また、トークン要求の再試行ロジックを追加することもお勧めします。 トークンが正常に取得された後でも、要求ごとに再試行が行われるようにしてください。 最終的には、データが完全にレプリケートされた後、エラーの発生率が減少します。

同時更新はサポートされていない (ユーザー割り当て済みマネージド ID)

適用対象: ユーザー割り当てマネージド ID

同じユーザー割り当て済みマネージド ID で複数のフェデレーション ID 資格情報を作成すると、コンカレンシー検出ロジックが同時にトリガーされ、要求が失敗して 409 競合 HTTP 状態コードが返されます。

Terraform Provider for Azure (Resource Manager) バージョン 3.40.0 では、複数のフェデレーション ID 資格情報を同時ではなく順番に作成する更新プログラムを導入しています。 3.40.0 より前のバージョンでは、複数のフェデレーション ID が作成されると、パイプラインでエラーが発生するおそれがあります。 複数のフェデレーション ID 資格情報が順番に作成されるように、Terraform Provider for Azure (Resource Manager) v3.40.0 以降を使用することをお勧めします。

自動化または Azure Resource Manager テンプレート (ARM テンプレート) を使用して、同じ親 ID の下にフェデレーション ID 資格情報を作成する場合は、フェデレーション資格情報を順番に作成してください。 異なるマネージド ID にフェデレーション ID 資格情報を並行して作成することは、制限なしで実行できます。

フェデレーション ID 資格情報がループでプロビジョニングされている場合は、"mode": "serial" を設定することで、それらを順次にプロビジョニングできます。

dependsOn プロパティを使用して、複数の新しいフェデレーション ID 資格情報を順番にプロビジョニングすることもできます。 次の Azure Resource Manager テンプレート (ARM テンプレート) の例では、"dependsOn" プロパティを使用して、ユーザー割り当て済みマネージド ID に対して 3 つの新しいフェデレーション ID 資格情報を順番に作成しています。

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
        "userAssignedIdentities_parent_uami_name": { 
            "defaultValue": "parent_uami", 
            "type": "String" 
        } 
    }, 
    "variables": {}, 
    "resources": [ 
        { 
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities", 
            "apiVersion": "2022-01-31-preview", 
            "name": "[parameters('userAssignedIdentities_parent_uami_name')]", 
            "location": "eastus" 
        }, 
        { 
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", 
            "apiVersion": "2022-01-31-preview", 
            "name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic01')]", 
            "dependsOn": [ 
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]" 
            ], 
            "properties": { 
                "issuer": "https://kubernetes-oauth.azure.com", 
                "subject": "fic01", 
                "audiences": [ 
                    "api://AzureADTokenExchange" 
                ] 
            } 
        }, 
        { 
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", 
            "apiVersion": "2022-01-31-preview", 
            "name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic02')]", 
            "dependsOn": [ 
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]", 
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials', parameters('userAssignedIdentities_parent_uami_name'), 'fic01')]" 
            ], 
            "properties": { 
                "issuer": "https://kubernetes-oauth.azure.com", 
                "subject": "fic02", 
                "audiences": [ 
                    "api://AzureADTokenExchange" 
                ] 
            } 
        }, 
        { 
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials", 
            "apiVersion": "2022-01-31-preview", 
            "name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic03')]", 
            "dependsOn": [ 
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]", 
                "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials', parameters('userAssignedIdentities_parent_uami_name'), 'fic02')]" 
            ], 
            "properties": { 
                "issuer": "https://kubernetes-oauth.azure.com", 
                "subject": "fic03", 
                "audiences": [ 
                    "api://AzureADTokenExchange" 
                ] 
            } 
        } 
    ] 
} 

Azure ポリシー

適用対象: アプリケーションとユーザー割り当てマネージド ID

次の ARM テンプレートの例のように、deny Azure Policy を使用できます。

{ 
"policyRule": { 
            "if": { 
                "field": "type", 
                "equals": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials" 
            }, 
            "then": { 
                "effect": "deny" 
            } 
        } 
}

スロットルの制限

適用対象: ユーザー割り当てマネージド ID

次の表は、ユーザー割り当て済みマネージド ID の REST API への要求に関する制限事項について説明したものです。 スロットルの制限を超えると、HTTP 429 エラーが発生します。

操作 Microsoft Entra テナントあたりの 1 秒あたりの要求数 サブスクリプションあたりの要求数/秒 リソースあたりの要求数/秒
作成または更新要求 10 2 0.25
取得要求 30 10 0.5
リソース グループ別の一覧表示またはサブスクリプション別の一覧表示要求 15 5 0.25
削除要求 10 2 0.25

エラー

適用対象: アプリケーションとユーザー割り当てマネージド ID

フェデレーション ID 資格情報の作成、更新、取得、一覧表示、または削除時には、次のエラー コードが返されることがあります。

HTTP コード エラー メッセージ コメント
405 要求の形式が予期しないものでした。フェデレーション ID 資格情報のサポートは有効になっていません。 フェデレーション ID 資格情報は、このリージョンでは有効になっていません。 "現在サポートされているリージョン" を参照してください。
400 フェデレーション ID 資格情報には、対象ユーザーを 1 人だけ指定する必要があります。 現在、フェデレーション ID 資格情報では、1 人の対象ユーザー "api://AzureADTokenExchange" がサポートされています。
400 HTTP 本文のフェデレーション ID 資格情報に空のプロパティがあります フェデレーション ID 資格情報のプロパティはすべて必須です。
400 フェデレーション ID 資格情報名 "{ficName}" が無効です。 英数字、ダッシュ、アンダースコア、3 ~ 120 個までの記号。 先頭に使用できるのは英数字のみです。
404 親のユーザー割り当て済み ID が存在しません。 フェデレーション ID 資格情報のリソース パスで、ユーザー割り当て済み ID 名を確認してください。
400 このマネージド ID には、発行者とサブジェクトの組み合わせが既に存在します。 これは制約です。 ユーザー割り当て済み ID に関連付けられているすべてのフェデレーション ID 資格情報を一覧表示して、既存のフェデレーション ID 資格情報を検索してください。
409 Conflict 同じユーザー割り当て済み ID のフェデレーション ID 資格情報リソースへの同時書き込み要求が拒否されました。