設定應用程式以信任外部識別提供者

本文說明如何在 Microsoft Entra ID 中管理應用程式中的同盟身分識別認證。 同盟身分識別認證會在應用程式與外部識別提供者 (IdP) 之間建立信任關係。

然後,您可以設定外部軟體工作負載,以從外部 IdP 交換來自 Microsoft 身分識別平台 存取令牌的令牌。 外部工作負載可以存取受 Microsoft Entra 保護的資源,而不需要管理秘密(在支援的案例中)。 若要深入瞭解令牌交換工作流程,請閱讀 工作負載身分識別同盟

在本文中,您將瞭解如何在 Microsoft Entra ID 中的應用程式中建立、列出和刪除同盟身分識別認證。

重要考慮和限制

若要建立、更新或刪除同盟身分識別認證,執行動作的帳戶必須具有Application 管理員 istrator、Application DeveloperCloud Application 管理員 istrator 或 Application Owner 角色。 需要 microsoft.directory/applications/credentials/update 許可權 才能更新同盟身分識別認證。

最多可以將 20 個同盟身分識別認證新增至應用程式或使用者指派的受控識別。

當您設定同盟身分識別認證時,有數個重要的資訊提供:

  • issuersubject 是設定信任關係所需的重要資訊片段。 和 subject 的組合issuer在應用程式上必須是唯一的。 當外部軟體工作負載要求 Microsoft 身分識別平台 交換存取令牌的外部令牌時,系統會針對issuer外部令牌中提供的 和subject宣告檢查同盟身分識別認證的簽發者和主體值。 如果該驗證檢查通過,Microsoft 身分識別平台 對外部軟體工作負載發出存取令牌。

  • issuer 是外部識別提供者的 URL,必須符合 issuer 所交換之外部令牌的宣告。 必要。 issuer如果宣告在值中有前置或尾端空格符,則會封鎖令牌交換。 此欄位的字元限制為 600 個字元。

  • subject 是外部軟體工作負載的標識碼,必須符合 sub 所交換之外部令牌的 (subject) 宣告。 主體 沒有固定格式,因為每個 IdP 都會使用自己的格式,有時是 GUID,有時是冒號分隔標識符,有時是任意字串。 此欄位的字元限制為 600 個字元。

    重要

    主體設定值必須完全符合 GitHub 工作流程組態上的組態。 否則,Microsoft 身分識別平台 會查看傳入的外部令牌,並拒絕存取令牌的交換。 您不會收到錯誤,交換會失敗,而不會發生錯誤。

    重要

    如果您不小心在主體設定中新增不正確的外部工作負載資訊,則會成功建立同盟身分識別認證,而不會發生錯誤。 在令牌交換失敗之前,錯誤不會變得明顯。

  • 物件會 列出可以出現在外部令牌中的物件。 必要。 您必須新增單一物件值,其限制為600個字元。 建議值為 「api://AzureADTokenExchange」。 它說,Microsoft 身分識別平台 必須在傳入令牌的宣告中aud接受什麼。

  • name 是同盟身分識別認證的唯一標識符。 必要。 此欄位的字元限制為 3-120 個字元,而且必須是 URL 易記。 支援英數位元、虛線或底線字元,第一個字元必須是英數位元。  一旦建立它就不可變了。

  • description 是同盟身分識別認證的使用者提供的描述。 選擇性。 Microsoft Entra ID 不會驗證或檢查描述。 此欄位的限制為 600 個字元。

任何同盟身分識別認證屬性值都不支援通配符。

若要深入瞭解支持的區域、傳播同盟認證更新的時間、支援的簽發者等等,請參閱 同盟身分識別認證的重要考慮和限制。

必要條件

在 Microsoft Entra 識別碼中建立應用程式註冊 。 將應用程式存取權授與外部軟體工作負載的目標 Azure 資源。

在下列步驟中尋找應用程式的物件標識碼(而非應用程式(用戶端)標識碼。 您可以在 Microsoft Entra 系統管理中心找到應用程式的物件識別碼。 移至應用程式註冊清單,然後選取您的應用程式註冊。 在 Overview-Essentials >中,尋找對象標識碼。

取得外部 IdP 和軟體工作負載的主體簽發者資訊,您在下列步驟中需要此資訊。

在應用程式上設定同盟身分識別認證

GitHub 動作

若要新增 GitHub 動作的同盟身分識別,請遵循下列步驟:

  1. 在 Microsoft Entra 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取 左側導覽窗格中的 [憑證和秘密 ],選取 [同盟認證 ] 索引卷標,然後選取 [ 新增認證]。

  2. 在 [ 同盟認證案例 ] 下拉式方塊中,選取 [ GitHub 動作部署 Azure 資源]。

  3. 指定 GitHub Actions 工作流程的組織和存放庫

  4. 針對 [實體類型],選取 [環境]、[分支]、[提取要求] 或 [卷標],然後指定值。 這些值必須完全符合 GitHub 工作流程中的組態。 分支和標記不支援模式比對。 如果您的推送工作流程針對許多分支或標記執行,請指定環境。 如需詳細資訊,請參閱 範例

  5. 新增同盟認證的 [名稱]。

  6. [簽發者]、[物件] 和 [主體標識符] 字段會根據您輸入的值自動填入。

  7. 選取 [新增 ] 以設定同盟認證。

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

使用 GitHub 工作流程的 Microsoft Entra 應用程式註冊中的下列值:

  • AZURE_CLIENT_ID應用程式 (用戶端) 識別碼

  • AZURE_TENANT_ID目錄 (租使用者) 識別碼

    下列螢幕快照示範如何複製應用程式標識碼和租用戶標識碼。

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

  • AZURE_SUBSCRIPTION_ID 您的訂用帳戶標識碼。 若要取得訂用帳戶標識碼,請在 Azure 入口網站開啟 [訂用帳戶],然後尋找您的訂用帳戶。 然後,複製訂用帳戶 標識碼

實體類型範例

分支範例

針對主要分支上推送或提取要求事件所觸發的工作流程:

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

指定 Branch 的實體類型,以及 「main」 的 GitHub 分支名稱。

環境範例

針對系結至名為「生產環境」的作業:

on:
  push:
    branches:
      - main

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

指定環境的實體類型,以及 「production」 的 GitHub 環境名稱

卷標範例

例如,針對推送至名為 「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.*

指定 Tag 的實體類型,以及 「v2」 的 GitHub 標籤名稱。

提取要求範例

針對提取要求事件所觸發的工作流程,請指定提取要求的實體類型

Kubernetes

在 Microsoft Entra 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取 左側導覽窗格中的 [憑證和秘密 ],選取 [同盟認證 ] 索引卷標,然後選取 [ 新增認證]。

從下拉功能表中選取存取 Azure 資源的 Kubernetes 案例。

填寫 [叢集簽發者 URL]、[命名空間]、[服務帳戶名稱] 和 [名稱] 字段:

  • 叢集簽發者 URL 是受控叢集的 OIDC 簽發者 URL,或自我管理叢集的 OIDC 簽發者 URL
  • 服務帳戶名稱 是 Kubernetes 服務帳戶的名稱,可為 Pod 中執行的進程提供身分識別。
  • 命名空間 是服務帳戶命名空間。
  • Name 是同盟認證的名稱,稍後無法變更。

其他識別提供者

在 Microsoft Entra 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取 左側導覽窗格中的 [憑證和秘密 ],選取 [同盟認證 ] 索引卷標,然後選取 [ 新增認證]。

從下拉功能表中選取 [ 其他簽發者 案例]。

指定下列欄位(使用在 Google Cloud 中執行的軟體工作負載作為範例):

  • Name 是同盟認證的名稱,稍後無法變更。
  • 主體標識碼:必須符合 sub 外部識別提供者所簽發之令牌中的宣告。 在此範例中使用Google Cloud時, 主體 是您計劃使用之服務帳戶的唯一標識符。
  • 簽發者:必須符合 iss 外部識別提供者所簽發之令牌中的宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 來擷取驗證令牌所需的密鑰。 針對Google Cloud,簽發 為 “https://accounts.google.com"。

列出應用程式上的同盟身分識別認證

在 Microsoft Entra 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取 左側導覽窗格中的 [憑證和秘密 ],然後選取 [ 同盟認證 ] 索引卷標。系統會列出在您的應用程式上設定的同盟認證。

從應用程式刪除同盟身分識別認證

在 Microsoft Entra 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取 左側導覽窗格中的 [憑證和秘密 ],然後選取 [ 同盟認證 ] 索引卷標。系統會列出在您的應用程式上設定的同盟認證。

若要刪除同盟身分識別認證,請選取 認證的 [刪除 ] 圖示。

必要條件

  • 在 Microsoft Entra 識別碼中建立應用程式註冊 。 將應用程式存取權授與外部軟體工作負載的目標 Azure 資源。
  • 尋找您在下列步驟中所需的應用程式物件識別碼、應用程式(用戶端)識別碼或識別碼 URI。 您可以在 Microsoft Entra 系統管理中心找到這些值。 移至已註冊的應用程式清單,然後選取您的應用程式註冊。 在 Overview-Essentials> 中,取得您在下列步驟中所需的物件識別碼應用程式(用戶端)標識碼應用程式識別碼 URI 值。
  • 取得外部 IdP 和軟體工作負載的主體簽發者資訊,您在下列步驟中需要此資訊。

在應用程式上設定同盟身分識別認證

執行 az ad app federated-credential create 命令,在您的應用程式上建立新的同盟身分識別認證。

參數 id 會指定應用程式的識別碼 URI、應用程式識別碼或物件識別碼。 參數 parameters 會以 JSON 格式指定用來建立同盟身分識別認證的參數。

GitHub Actions 範例

名稱會指定同盟身分識別認證的名稱。

簽發 會識別 GitHub OIDC 提供者的路徑: https://token.actions.githubusercontent.com/。 您的 Azure 應用程式會信任此簽發者。

subject 會識別 GitHub Actions 工作流程的 GitHub 組織、存放庫和環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平台 交換存取令牌的 GitHub 令牌時,系統會根據提供的 GitHub 令牌檢查同盟身分識別認證中的值。 在 Azure 授與存取令牌之前,要求必須符合這裡定義的條件。

  • 針對系結至環境的作業: repo:< Organization/Repository >:environment:< Name >
  • 針對未繫結至環境的作業,請根據用來觸發工作流程的參考路徑,包含分支/標記的參考路徑:repo:< Organization/Repository >:ref:< ref path>。 例如,repo:n-username/ node_express:ref:refs/heads/my-branchrepo: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 範例

簽發者 是您的服務帳戶簽發者 URL( 受控叢集的 OIDC 簽發者 URL自我管理叢集的 OIDC 簽發者 URL )。

subject 是發行至服務帳戶之令牌中的主體名稱。 Kubernetes 會針對主體名稱使用下列格式: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>

name 是同盟認證的名稱,稍後無法變更。

物件會 列出可以出現在外部令牌中的物件。 這是必填欄位。 建議值為 「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"
    ]
}

其他識別提供者範例

您可以在應用程式上設定同盟身分識別認證,並與其他外部識別提供者建立信任關係。 下列範例使用在Google Cloud 中執行的軟體工作負載作為範例:

name 是同盟認證的名稱,稍後無法變更。

id:應用程式的物件識別碼、應用程式(用戶端)識別碼或應用程式的標識碼 URI。

subject:必須符合 sub 外部識別提供者所簽發之令牌中的宣告。 在此範例中使用Google Cloud時, 主體 是您計劃使用之服務帳戶的唯一標識符。

簽發者:必須符合 iss 外部識別提供者所簽發之令牌中的宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 來擷取驗證令牌所需的密鑰。 針對Google Cloud,簽發 為 “https://accounts.google.com"。

物件:列出可出現在外部令牌中的物件。 這是必填欄位。 建議值為 「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"
    ]
}

列出應用程式上的同盟身分識別認證

執行 az ad app federated-credential list 命令,以列出您應用程式上的同盟身分識別認證。

id 參數會指定應用程式的識別碼 URI、應用程式識別碼或物件識別碼。

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

在應用程式上取得同盟身分識別認證

執行 az ad app federated-credential show 命令,以取得您應用程式上的同盟身分識別認證。

id 參數會指定應用程式的識別碼 URI、應用程式識別碼或物件識別碼。

federated-credential-id 會指定同盟身分識別認證的標識碼或名稱。

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

從應用程式刪除同盟身分識別認證

執行 az ad app federated-credential delete 命令,從您的應用程式中移除同盟身分識別認證。

id 參數會指定應用程式的識別碼 URI、應用程式識別碼或物件識別碼。

federated-credential-id 會指定同盟身分識別認證的標識碼或名稱。

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

必要條件

  • 若要執行範例文稿,您有兩個選項:
    • 使用 Azure Cloud Shell,您可以使用程式代碼區塊右上角的 [試用] 按鈕來開啟
    • 使用 Azure PowerShell 在本機執行腳本,如下一節所述。
  • 在 Microsoft Entra 識別碼中建立應用程式註冊 。 將應用程式存取權授與外部軟體工作負載的目標 Azure 資源。
  • 在下列步驟中尋找應用程式的物件標識碼(而非應用程式(用戶端)標識碼。 您可以在 Microsoft Entra 系統管理中心找到應用程式的物件識別碼。 移至已註冊的應用程式清單,然後選取您的應用程式註冊。 在 Overview-Essentials >中,尋找對象標識碼。
  • 取得外部 IdP 和軟體工作負載的主體簽發者資訊,您在下列步驟中需要此資訊。

在本機設定 Azure PowerShell

若要針對本文在本機使用 Azure PowerShell,而不是使用 Cloud Shell:

  1. 如果您尚未安裝 最新版的 Azure PowerShell

  2. 登入Azure。

    Connect-AzAccount
    
  3. 安裝最新版的 PowerShellGet

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    執行此命令以進行下一個步驟之後,您可能需要 Exit 離開目前的 PowerShell 工作階段。

  4. 安裝模組的 Az.Resources 發行前版本,以執行本文中的同盟身分識別認證作業。

    Install-Module -Name Az.Resources -AllowPrerelease
    

在應用程式上設定同盟身分識別認證

執行 New-AzADAppFederatedCredential Cmdlet,在應用程式上建立新的同盟身分識別認證。

GitHub Actions 範例

  • ApplicationObjectId:您先前在 Microsoft Entra ID 中註冊的應用程式對象標識碼(而非應用程式(用戶端)標識碼。
  • 簽發者 會將 GitHub 識別為外部令牌簽發者。
  • 主體 會識別 GitHub Actions 工作流程的 GitHub 組織、存放庫和環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平台 交換存取令牌的 GitHub 令牌時,系統會根據提供的 GitHub 令牌檢查同盟身分識別認證中的值。
    • 針對系結至環境的作業: repo:< Organization/Repository >:environment:< Name >
    • 針對未繫結至環境的作業,請根據用來觸發工作流程的參考路徑,包含分支/標記的參考路徑:repo:< Organization/Repository >:ref:< ref path>。 例如,repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
    • 針對由提取要求事件所觸發的工作流程:repo:< Organization/Repository >:pull-request
  • Name 是同盟認證的名稱,稍後無法變更。
  • 物件 會列出可以出現在外部令牌中的物件。 這是必填欄位。 建議值為 「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 中註冊的應用程式對象標識碼(而非應用程式(用戶端)標識碼。
  • 簽發者 是您的服務帳戶簽發者 URL( 受控叢集的 OIDC 簽發者 URL自我管理叢集的 OIDC 簽發者 URL )。
  • 主體是發行至服務帳戶之令牌中的主體 名稱。 Kubernetes 會針對主體名稱使用下列格式: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • Name 是同盟認證的名稱,稍後無法變更。
  • 物件 會列出可出現在外部令牌宣告中的 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'

其他識別提供者範例

指定下列參數(使用在 Google Cloud 中執行的軟體工作負載作為範例):

  • ObjectID:您先前在 Microsoft Entra ID 中註冊的應用程式對象識別碼(而非應用程式(用戶端)標識符。
  • Name 是同盟認證的名稱,稍後無法變更。
  • 主旨:必須符合 sub 外部識別提供者所簽發之令牌中的宣告。 在此範例中使用Google Cloud時, 主體 是您計劃使用之服務帳戶的唯一標識符。
  • 簽發者:必須符合 iss 外部識別提供者所簽發之令牌中的宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 來擷取驗證令牌所需的密鑰。 針對Google Cloud,簽發 為 “https://accounts.google.com"。
  • 對象:必須符合aud外部令牌中的宣告。 基於安全性考慮,您應該挑選適用於 Microsoft Entra 識別碼之令牌的唯一值。 建議值為 「api://AzureADTokenExchange」。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

列出應用程式上的同盟身分識別認證

執行 Get-AzADAppFederatedCredential Cmdlet 來列出應用程式的同盟身分識別認證。

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

在應用程式上取得同盟身分識別認證

執行 Get-AzADAppFederatedCredential Cmdlet,依標識符從應用程式取得同盟身分識別認證。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

從應用程式刪除同盟身分識別認證

執行 Remove-AzADAppFederatedCredential Cmdlet,從應用程式刪除同盟身分識別認證。

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

必要條件

在 Microsoft Entra 識別碼中建立應用程式註冊 。 將應用程式存取權授與外部軟體工作負載的目標 Azure 資源。

在下列步驟中尋找應用程式的物件標識碼(而非應用程式(用戶端)標識碼。 您可以在 Microsoft Entra 系統管理中心找到應用程式的物件識別碼。 移至已註冊的應用程式清單,然後選取您的應用程式註冊。 在 Overview-Essentials >中,尋找對象標識碼。

取得外部 IdP 和軟體工作負載的主體簽發者資訊,您在下列步驟中需要此資訊。

Microsoft Graph 端點 (https://graph.microsoft.com) 會公開 REST API,以在應用程式上建立、更新、刪除 federatedIdentityCredentials 。 啟動 Azure Cloud Shell 並登入您的租使用者,以從 AZ CLI 執行 Microsoft Graph 命令。

在應用程式上設定同盟身分識別認證

GitHub 動作

執行下列方法,在您的 應用程式上建立新的同盟身分識別認證 (由應用程式的物件標識元指定)。 簽發 會將 GitHub 識別為外部令牌簽發者。 subject 會識別 GitHub Actions 工作流程的 GitHub 組織、存放庫和環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平台 交換存取令牌的 GitHub 令牌時,系統會根據提供的 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"
}

name:Azure 應用程式的名稱。

簽發者:GitHub OIDC 提供者的路徑: https://token.actions.githubusercontent.com。 您的 Azure 應用程式會信任此簽發者。

subject:在 Azure 授與存取令牌之前,要求必須符合這裡定義的條件。

  • 針對系結至環境的作業: repo:< Organization/Repository >:environment:< Name >
  • 針對未繫結至環境的作業,請根據用來觸發工作流程的參考路徑,包含分支/標記的參考路徑:repo:< Organization/Repository >:ref:< ref path>。 例如,repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
  • 針對由提取要求事件所觸發的工作流程:repo:< Organization/Repository >:pull-request

物件會 列出可以出現在外部令牌中的物件。 這是必填欄位。 建議值為 「api://AzureADTokenExchange」。

Kubernetes 範例

執行下列方法,在應用程式上設定同盟身分識別認證,並與 Kubernetes 服務帳戶建立信任關係。 指定下列參數:

  • 簽發者 是您的服務帳戶簽發者 URL( 受控叢集的 OIDC 簽發者 URL自我管理叢集的 OIDC 簽發者 URL )。
  • subject 是發行至服務帳戶之令牌中的主體名稱。 Kubernetes 會針對主體名稱使用下列格式: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • name 是同盟認證的名稱,稍後無法變更。
  • 物件會 列出可以出現在外部令牌中的物件。 這是必填欄位。 建議值為 「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"
}

其他識別提供者範例

執行下列方法,在應用程式上設定同盟身分識別認證,並與外部識別提供者建立信任關係。 指定下列參數(使用在 Google Cloud 中執行的軟體工作負載作為範例):

  • name 是同盟認證的名稱,稍後無法變更。
  • ObjectID:您先前在 Microsoft Entra ID 中註冊的應用程式對象識別碼(而非應用程式(用戶端)標識符。
  • subject:必須符合 sub 外部識別提供者所簽發之令牌中的宣告。 在此範例中使用Google Cloud時, 主體 是您計劃使用之服務帳戶的唯一標識符。
  • 簽發者:必須符合 iss 外部識別提供者所簽發之令牌中的宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 來擷取驗證令牌所需的密鑰。 針對Google Cloud,簽發 為 “https://accounts.google.com"。
  • 物件會 列出可以出現在外部令牌中的物件。 這是必填欄位。 建議值為 「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"
}

列出應用程式上的同盟身分識別認證

執行下列方法來 列出應用程式的同盟身分識別認證( 由應用程式的物件識別元指定):

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"
    }
  ]
}

在應用程式上取得同盟身分識別認證

執行下列方法來 取得應用程式的同盟身分識別認證 (由應用程式的物件識別元指定):

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"
    }
}

從應用程式刪除同盟身分識別認證

執行下列方法, 從應用程式刪除同盟身分識別認證 (由應用程式的物件標識元指定):

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

下一步

  • 若要瞭解如何使用 Kubernetes 的工作負載身分識別同盟,請參閱 kubernetes 開放原始碼 專案的 Microsoft Entra 工作負載 ID。
  • 若要瞭解如何使用 GitHub Actions 的工作負載身分識別同盟,請參閱 設定 GitHub Actions 工作流程以取得存取令牌
  • 請閱讀 GitHub Actions 檔,以深入瞭解如何設定 GitHub Actions 工作流程,以從 Microsoft 身分識別提供者取得存取令牌並存取 Azure 資源。
  • 如需詳細資訊,請參閱 Microsoft Entra ID 如何使用 OAuth 2.0 用戶端認證授 與,以及由另一個 IdP 發出的客戶端判斷提示來取得令牌。
  • 如需外部識別提供者所建立之 JWT 所需格式的相關信息,請閱讀判斷 提示格式