外部 ID プロバイダーを信頼するようにアプリを構成する

この記事では、Microsoft Entra ID のアプリケーションでフェデレーション ID 資格情報を管理する方法について説明します。 フェデレーション ID 資格情報は、アプリケーションと外部 ID プロバイダー (IdP) の間に信頼関係を作成します。

次に、外部 IdP からのトークンを Microsoft ID プラットフォームからのアクセス トークンと交換するように、外部ソフトウェア ワークロードを構成できます。 外部ワークロードは、シークレットを管理する必要なく、Microsoft Entra で保護されたリソースにアクセスできます (サポートされているシナリオの場合)。 トークン交換ワークフローの詳細については、ワークロード ID フェデレーションに関する記事をお読みください。

この記事では、Microsoft Entra ID のアプリケーションでフェデレーション ID 資格情報を作成、一覧表示、削除する方法について説明します。

重要な考慮事項と制限事項

フェデレーション ID 資格情報を作成、更新、または削除するには、アクションを実行するアカウントに 、アプリケーション管理者アプリケーション開発者クラウド アプリケーション管理者、またはアプリケーション所有者ロールが必要です。 フェデレーション ID 資格情報を更新するには microsoft.directory/applications/credentials/update アクセス許可が必要です。

アプリケーションまたはユーザー割り当てマネージド 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 資格情報に関する重要な考慮事項と制限事項に関するページを参照してください。

前提条件

Microsoft Entra ID でアプリ登録を作成します。 外部ソフトウェア ワークロードの対象となる Azure リソースへのアクセス権をアプリに付与します。

以下の手順で必要になるアプリのオブジェクト ID を見つけます (アプリケーション (クライアント) ID ではありません)。 アプリのオブジェクト ID は、Microsoft Entra 管理センターで確認できます。 アプリの登録一覧に移動し、対象のアプリの登録を選びます。 [概要]->[要点] で、オブジェクト IDを見つけます。

以下の手順で必要になる、外部 IdP およびソフトウェア ワークロードの subjectissuer の情報を取得します。

フェデレーション ID 資格情報をアプリに構成する

GitHub Actions

GitHub アクションにフェデレーション ID を追加するには、次の手順に従います。

  1. Microsoft Entra 管理センターのアプリの登録エクスペリエンスでアプリの登録を見つけます。 左側のナビゲーション ペインで [証明書とシークレット] を選択し、[フェデレーション資格情報] タブを選択してから、[資格情報の追加] を選択します。

  2. [Federated credential scenario](フェデレーション資格情報シナリオ) ドロップダウン ボックスで、[Azure リソースをデプロイする GitHub Actions] を選択します。

  3. GitHub Actions ワークフローの [組織][リポジトリ] を指定します。

  4. [エンティティ型][環境][Branch](ブランチ)[Pull Request]、または [タグ] を選択し、値を指定します。 値は、 GitHub ワークフローの構成と完全に一致する必要があります。 パターン マッチングは、ブランチとタグではサポートされていません。 プッシュ時ワークフローが多数のブランチまたはタグに対して実行される場合は、環境を指定します。 詳細については、 を参照してください。

  5. フェデレーション資格情報の [名前] を追加します。

  6. [発行者][Audiences](対象)、および [Subject identifier](サブジェクト識別子) フィールドには、入力した値に基づいて自動的に値が設定されます。

  7. [追加] を選び、フェデレーション資格情報を構成します。

    Screenshot of the Add a credential window, showing sample values.

GitHub ワークフローには、Microsoft Entra アプリケーションの登録から次の値を使用します。

  • AZURE_CLIENT_ID: アプリケーション (クライアント) ID

  • AZURE_TENANT_ID: ディレクトリ (テナント) ID

    次のスクリーンショットは、アプリケーション ID とテナント ID をコピーする方法を示しています。

    Screenshot that demonstrates how to copy the application ID and tenant ID from Microsoft Entra admin center.

  • AZURE_SUBSCRIPTION_ID: お使いのサブスクリプション ID。 サブスクリプション ID を取得するには、Azure portal[サブスクリプション] を開き、お使いのサブスクリプションを見つけます。 次に、サブスクリプション ID をコピーします。

エンティティ型の例

ブランチの例

メイン ブランチでプッシュまたはプル要求イベントによってトリガーされるワークフローの場合:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

ブランチエンティティ型と、GitHub ブランチ名 "main" を指定します。

環境の例

"Production" という名前の環境に関連付けられているジョブの場合:

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

環境エンティティ型と、GitHub 環境名 "production" を指定します。

タグの例

たとえば、"v2" という名前のタグへのプッシュによってトリガーされるワークフローの場合は、次のようになります。

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:
      - v2
      - v1.*

タグエンティティ型と、GitHub タグ名 "v2" を指定します。

プル要求の例

プル要求イベントによってトリガーされるワークフローの場合は、プル要求エンティティ型を指定します

Kubernetes

Microsoft Entra 管理センターのアプリの登録エクスペリエンスでアプリの登録を見つけます。 左側のナビゲーション ペインで [証明書とシークレット] を選択し、[フェデレーション資格情報] タブを選択してから、[資格情報の追加] を選択します。

ドロップダウン メニューから [Azure リソースにアクセスする Kubernetes] というシナリオを選択します。

[クラスター発行者の URL][名前空間][サービス アカウント名][名前] の各フィールドに入力します。

  • [クラスター発行者の URL] は、マネージド クラスターの OIDC Issuer URL または自己管理型クラスターの OIDC Issuer URL です。
  • [サービス アカウント名] は、Kubernetes サービス アカウントの名前であり、ポッドで実行されるプロセスの ID を提供するものです。
  • [名前空間] は、サービス アカウントの名前空間です。
  • [名前] はフェデレーション資格情報の名前です。これを後で変更することはできません。

他の ID プロバイダー

Microsoft Entra 管理センターのアプリの登録エクスペリエンスでアプリの登録を見つけます。 左側のナビゲーション ペインで [証明書とシークレット] を選択し、[フェデレーション資格情報] タブを選択してから、[資格情報の追加] を選択します。

ドロップダウン メニューから [Other issuer] (その他の発行者) のシナリオを選択します。

次のフィールドを指定します (例として、Google Cloud で実行されているソフトウェア ワークロードを使用しています)。

  • [名前] はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • サブジェクト識別子: 外部 ID プロバイダーによって発行されたトークン内の sub 要求と一致する必要があります。 Google Cloud を使用しているこの例では、subject は、使用する予定のサービス アカウントの一意の ID です。
  • 発行者: 外部 ID プロバイダーによって発行されたトークン内の iss 要求と一致する必要があります。 OIDC Discovery 仕様に準拠する URL です。Microsoft Entra ID では、この発行者 URL を使用して、トークンを検証するために必要なキーをフェッチします。 Google Cloud の場合、issuer は "https://accounts.google.com" です。

アプリのフェデレーション ID 資格情報を一覧表示する

Microsoft Entra 管理センターのアプリの登録エクスペリエンスでアプリの登録を見つけます。 左側のナビゲーション ペインで [証明書とシークレット] を選択し、[フェデレーション資格情報] タブを選択します。アプリに構成されているフェデレーション資格情報が一覧表示されます。

アプリからフェデレーション ID 資格情報を削除する

Microsoft Entra 管理センターのアプリの登録エクスペリエンスでアプリの登録を見つけます。 左側のナビゲーション ペインで [証明書とシークレット] を選択し、[フェデレーション資格情報] タブを選択します。アプリに構成されているフェデレーション資格情報が一覧表示されます。

フェデレーション ID 資格情報を削除するには、資格情報の [削除] アイコンを選択します。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • Microsoft Entra ID でアプリ登録を作成します。 外部ソフトウェア ワークロードの対象となる Azure リソースへのアクセス権をアプリに付与します。
  • 次の手順で必要な、アプリのオブジェクト ID、アプリ (クライアント) ID、または識別子 URI を検索します。 これらの値は Microsoft Entra 管理センターで確認できます。 登録済みアプリケーションの一覧に移動し、対象のアプリの登録を選択します。 [概要]->[要点] で、次の手順で必要なオブジェクト IDアプリケーション (クライアント) ID、またはアプリケーション ID URI の値を取得します。
  • 以下の手順で必要になる、外部 IdP およびソフトウェア ワークロードの subjectissuer の情報を取得します。

フェデレーション ID 資格情報をアプリに構成する

az ad app federated-credential create コマンドを実行して、アプリに新しいフェデレーション ID 資格情報を作成します。

id パラメーターでは、アプリケーションの識別子 URI、アプリケーション ID、またはオブジェクト ID を指定します。 parameters パラメーターでは、フェデレーション ID 資格情報を作成するためのパラメーターを JSON 形式で指定します。

GitHub Actions の例

name では、フェデレーション ID 資格情報の名前を指定します。

issuer では、GitHub OIDC プロバイダーへのパスを識別します (https://token.actions.githubusercontent.com/)。 この発行者は、Azure アプリケーションによって信頼されるようになります。

subject は、GitHub Actions ワークフローの GitHub 組織、リポジトリ、環境を識別します。 GitHub Actions ワークフローが Microsoft ID プラットフォームに対して GitHub トークンとアクセス トークンの交換を要求すると、フェデレーション ID 資格情報の値が、指定された GitHub トークンと照合されます。 Azure がアクセス トークンを付与する前に、要求はここで定義されている条件と一致する必要があります。

  • 環境に関連付けられているジョブの場合: repo:< Organization/Repository >:environment:< Name >
  • 環境に関連付けられていないジョブの場合は、ワークフローのトリガーに使用される ref パスに基づいて、ブランチ/タグの ref パスを含めます: repo:< Organization/Repository >:ref:< ref path>。 たとえば、repo:n-username/ node_express:ref:refs/heads/my-branch または repo:n-username/ node_express:ref:refs/tags/my-tag です。
  • プル要求イベントによってトリガーされるワークフローの場合: repo:< Organization/Repository >:pull-request
az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Testing",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:octo-org/octo-repo:environment:Production",
    "description": "Testing",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Kubernetes の例

issuer は、サービス アカウントの発行者 URL (マネージド クラスターの OIDC Issuer URL または自己管理型クラスターの OIDC Issuer URL) です。

subject は、サービス アカウントに対して発行されるトークンのサブジェクト名です。 Kubernetes は、サブジェクト名に system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME> の形式を使用します。

name はフェデレーション資格情報の名前です。これを後で変更することはできません。

audiences は、外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

他の ID プロバイダーの例

アプリにフェデレーション ID 資格情報を構成し、他の外部 ID プロバイダーとの信頼関係を作成できます。 次の例では、Google Cloud で実行されているソフトウェア ワークロードを使用しています。

name はフェデレーション資格情報の名前です。これを後で変更することはできません。

id: アプリのオブジェクト ID、アプリケーション (クライアント) ID、または識別子 URI。

subject: 外部 ID プロバイダーによって発行されたトークン内の sub 要求と一致する必要があります。 Google Cloud を使用しているこの例では、subject は、使用する予定のサービス アカウントの一意の ID です。

issuer: 外部 ID プロバイダーによって発行されたトークン内の iss 要求と一致する必要があります。 OIDC Discovery 仕様に準拠する URL です。Microsoft Entra ID では、この発行者 URL を使用して、トークンを検証するために必要なキーをフェッチします。 Google Cloud の場合、issuer は "https://accounts.google.com" です。

audiences: 外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "GcpFederation",
    "issuer": "https://accounts.google.com",
    "subject": "112633961854638529490",
    "description": "Test GCP federation",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

アプリのフェデレーション ID 資格情報を一覧表示する

az ad app federated-credential list コマンドを実行して、アプリのフェデレーション ID 資格情報を一覧表示します。

id パラメーターでは、アプリケーションの識別子 URI、アプリケーション ID、またはオブジェクト ID を指定します。

az ad app federated-credential list --id f6475511-fd81-4965-a00e-41e7792b7b9c

アプリでフェデレーション ID 資格情報を取得する

az ad app federated-credential show コマンドを実行して、アプリでフェデレーション ID 資格情報を取得します。

id パラメーターでは、アプリケーションの識別子 URI、アプリケーション ID、またはオブジェクト ID を指定します。

federated-credential-id では、フェデレーション ID 資格情報の ID または名前を指定します。

az ad app federated-credential show --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

アプリからフェデレーション ID 資格情報を削除する

az ad app federated-credential delete コマンドを実行して、アプリからフェデレーション ID 資格情報を削除します。

id パラメーターでは、アプリケーションの識別子 URI、アプリケーション ID、またはオブジェクト ID を指定します。

federated-credential-id では、フェデレーション ID 資格情報の ID または名前を指定します。

az ad app federated-credential delete --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

前提条件

  • サンプル スクリプトを実行するには、次の 2 つのオプションがあります。
    • Azure Cloud Shell を使用します。これは、コード ブロックの右上隅にある [試してみる] ボタンから開くことができます。
    • Azure PowerShell を使用して、スクリプトをローカルで実行します。次のセクションの説明を参照してください。
  • Microsoft Entra ID でアプリ登録を作成します。 外部ソフトウェア ワークロードの対象となる Azure リソースへのアクセス権をアプリに付与します。
  • 以下の手順で必要になるアプリのオブジェクト ID を見つけます (アプリケーション (クライアント) ID ではありません)。 アプリのオブジェクト ID は、Microsoft Entra 管理センターで確認できます。 登録済みアプリケーションの一覧に移動し、対象のアプリの登録を選択します。 [概要]->[要点] で、オブジェクト IDを見つけます。
  • 以下の手順で必要になる、外部 IdP およびソフトウェア ワークロードの subjectissuer の情報を取得します。

ローカルで Azure PowerShell を構成する

このアーティクルのために、Cloud Shell を使わずにMicrosoft Azure PowerShell をローカルで使用するには、次の手順に従います。

  1. 最新バージョンの Azure PowerShell をインストールします (まだインストールしていない場合)。

  2. Azure にサインインします。

    Connect-AzAccount
    
  3. PowerShellGet の最新バージョンをインストールします。

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    次の手順のために、このコマンドを実行した後、現在の PowerShell セッションを Exit 終了する必要があるかもしれません。

  4. Az.Resources モジュールのプレリリース バージョンをインストールして、この記事のフェデレーション ID 資格情報操作を実行します。

    Install-Module -Name Az.Resources -AllowPrerelease
    

フェデレーション ID 資格情報をアプリに構成する

New-AzADAppFederatedCredential コマンドレットを実行して、アプリケーションに新しいフェデレーション ID 資格情報を作成します。

GitHub Actions の例

  • ApplicationObjectId: 以前に Microsoft Entra ID に登録したアプリの (アプリケーション (クライアント) ID ではなく) オブジェクト ID。
  • Issuer は、GitHub を外部トークン発行者として識別します。
  • Subject は、GitHub Actions ワークフローの GitHub 組織、リポジトリ、環境を識別します。 GitHub Actions ワークフローが Microsoft ID プラットフォームに対して GitHub トークンとアクセス トークンの交換を要求すると、フェデレーション ID 資格情報の値が、指定された GitHub トークンと照合されます。
    • 環境に関連付けられているジョブの場合: repo:< Organization/Repository >:environment:< Name >
    • 環境に関連付けられていないジョブの場合は、ワークフローのトリガーに使用される ref パスに基づいて、ブランチ/タグの ref パスを含めます: repo:< Organization/Repository >:ref:< ref path>。 たとえば、repo:n-username/ node_express:ref:refs/heads/my-branch または repo:n-username/ node_express:ref:refs/tags/my-tag です。
    • プル要求イベントによってトリガーされるワークフローの場合: repo:< Organization/Repository >:pull-request
  • Name はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • Audience は、外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://token.actions.githubusercontent.com/' -Name 'GitHub-Actions-Test' -Subject 'repo:octo-org/octo-repo:environment:Production'

Kubernetes の例

  • ApplicationObjectId: 以前に Microsoft Entra ID に登録したアプリの (アプリケーション (クライアント) ID ではなく) オブジェクト ID。
  • Issuer は、サービス アカウントの発行者 URL (マネージド クラスターの OIDC Issuer URL または自己管理型クラスターの OIDC Issuer URL) です。
  • Subject は、サービス アカウントに対して発行されるトークンのサブジェクト名です。 Kubernetes は、サブジェクト名に system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME> の形式を使用します。
  • Name はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • Audience は、外部トークンの aud 要求に指定できる対象ユーザーの一覧を示します。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

他の ID プロバイダーの例

次のパラメーターを指定します (例として、Google Cloud で実行されているソフトウェア ワークロードを使用しています)。

  • ObjectID: 以前に Microsoft Entra ID に登録したアプリの (アプリケーション (クライアント) ID ではなく) オブジェクト ID。
  • Name はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • Subject: 外部 ID プロバイダーによって発行されたトークン内の sub 要求と一致する必要があります。 Google Cloud を使用しているこの例では、subject は、使用する予定のサービス アカウントの一意の ID です。
  • 発行者: 外部 ID プロバイダーによって発行されたトークン内の iss 要求と一致する必要があります。 OIDC Discovery 仕様に準拠する URL です。Microsoft Entra ID では、この発行者 URL を使用して、トークンを検証するために必要なキーをフェッチします。 Google Cloud の場合、issuer は "https://accounts.google.com" です。
  • Audiences: 外部トークン内の aud 要求と一致する必要があります。 セキュリティ上の理由から、Microsoft Entra ID を対象とするトークンに対して一意の値を選択する必要があります。 推奨値は "api://AzureADTokenExchange" です。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

アプリのフェデレーション ID 資格情報を一覧表示する

Get-AzADAppFederatedCredential コマンドレットを実行して、アプリケーションのフェデレーション ID 資格情報を一覧表示します。

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

アプリでフェデレーション ID 資格情報を取得する

Get-AzADAppFederatedCredential コマンドレットを実行して、アプリケーションから ID によるフェデレーション ID 資格情報を取得します。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

アプリからフェデレーション ID 資格情報を削除する

Remove-AzADAppFederatedCredential コマンドレットを実行して、アプリケーションからフェデレーション ID 資格情報を削除します。

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

前提条件

Microsoft Entra ID でアプリ登録を作成します。 外部ソフトウェア ワークロードの対象となる Azure リソースへのアクセス権をアプリに付与します。

以下の手順で必要になるアプリのオブジェクト ID を見つけます (アプリケーション (クライアント) ID ではありません)。 アプリのオブジェクト ID は、Microsoft Entra 管理センターで確認できます。 登録済みアプリケーションの一覧に移動し、対象のアプリの登録を選択します。 [概要]->[要点] で、オブジェクト IDを見つけます。

以下の手順で必要になる、外部 IdP およびソフトウェア ワークロードの subjectissuer の情報を取得します。

Microsoft Graph エンドポイント (https://graph.microsoft.com) では、アプリケーションで federatedIdentityCredentials を作成、更新、削除する REST API を公開しています。 AZ CLI から Microsoft Graph コマンドを実行するには、Azure Cloud Shell を起動し、テナントにサインインします。

フェデレーション ID 資格情報をアプリに構成する

GitHub Actions

次のメソッドを実行して、アプリ (アプリのオブジェクト ID で指定) の新しいフェデレーション ID 資格情報を作成します。 issuer は、GitHub を外部トークン発行者として識別します。 subject は、GitHub Actions ワークフローの GitHub 組織、リポジトリ、環境を識別します。 GitHub Actions ワークフローが Microsoft ID プラットフォームに対して GitHub トークンとアクセス トークンの交換を要求すると、フェデレーション ID 資格情報の値が、指定された GitHub トークンと照合されます。

az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Testing","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

応答が返されます。

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
  "issuer": "https://token.actions.githubusercontent.com",
  "name": "Testing",
  "subject": "repo:octo-org/octo-repo:environment:Production"
}

名前: Azure アプリケーションの名前。

発行者: GitHub OIDC プロバイダーへのパス: https://token.actions.githubusercontent.com。 この発行者は、Azure アプリケーションによって信頼されるようになります。

subject: Azure がアクセス トークンを付与する前に、要求はここで定義されている条件と一致する必要があります。

  • 環境に関連付けられているジョブの場合: repo:< Organization/Repository >:environment:< Name >
  • 環境に関連付けられていないジョブの場合は、ワークフローのトリガーに使用される ref パスに基づいて、ブランチ/タグの ref パスを含めます: repo:< Organization/Repository >:ref:< ref path>。 たとえば、repo:n-username/ node_express:ref:refs/heads/my-branch または repo:n-username/ node_express:ref:refs/tags/my-tag です。
  • プル要求イベントによってトリガーされるワークフローの場合: repo:< Organization/Repository >:pull-request

audiences は、外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。

Kubernetes の例

次のメソッドを実行して、アプリでフェデレーション ID 資格情報を構成し、Kubernetes サービス アカウントとの信頼関係を作成します。 次のパラメーターを指定します。

  • issuer は、サービス アカウントの発行者 URL (マネージド クラスターの OIDC Issuer URL または自己管理型クラスターの OIDC Issuer URL) です。
  • subject は、サービス アカウントに対して発行されるトークンのサブジェクト名です。 Kubernetes は、サブジェクト名に system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME> の形式を使用します。
  • name はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • audiences は、外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。
az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

応答が返されます。

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

他の ID プロバイダーの例

次のメソッドを実行して、アプリにフェデレーション ID 資格情報を構成し、外部 ID プロバイダーとの信頼関係を作成します。 次のパラメーターを指定します (例として、Google Cloud で実行されているソフトウェア ワークロードを使用しています)。

  • name はフェデレーション資格情報の名前です。これを後で変更することはできません。
  • ObjectID: 以前に Microsoft Entra ID に登録したアプリの (アプリケーション (クライアント) ID ではなく) オブジェクト ID。
  • subject: 外部 ID プロバイダーによって発行されたトークン内の sub 要求と一致する必要があります。 Google Cloud を使用しているこの例では、subject は、使用する予定のサービス アカウントの一意の ID です。
  • issuer: 外部 ID プロバイダーによって発行されたトークン内の iss 要求と一致する必要があります。 OIDC Discovery 仕様に準拠する URL です。Microsoft Entra ID では、この発行者 URL を使用して、トークンを検証するために必要なキーをフェッチします。 Google Cloud の場合、issuer は "https://accounts.google.com" です。
  • audiences は、外部トークンに指定できる対象ユーザーの一覧を示します。 このフィールドへの入力は必須です。 推奨値は "api://AzureADTokenExchange" です。
az rest --method POST --uri 'https://graph.microsoft.com/applications/<ObjectID>/federatedIdentityCredentials' --body '{"name":"GcpFederation","issuer":"https://accounts.google.com","subject":"112633961854638529490","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

応答が返されます。

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://accounts.google.com"",
  "name": "GcpFederation",
  "subject": "112633961854638529490"
}

アプリのフェデレーション ID 資格情報を一覧表示する

次のメソッドを実行して、(アプリのオブジェクト ID で指定された) アプリのフェデレーション ID 資格情報を一覧表示します。

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials'

次のような応答が返されます。

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
  ]
}

アプリでフェデレーション ID 資格情報を取得する

次のメソッドを実行して、(アプリのオブジェクト ID で指定された) アプリのフェデレーション ID 資格情報を取得します。

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c//federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

次のような応答が返されます。

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials('f6475511-fd81-4965-a00e-41e7792b7b9c')/f6475511-fd81-4965-a00e-41e7792b7b9c",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
}

アプリからフェデレーション ID 資格情報を削除する

次のメソッドを実行して、(アプリのオブジェクト ID で指定された) アプリからフェデレーション ID 資格情報を削除します。

az rest -m DELETE  -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

次のステップ