共用方式為


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

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

接著,您可以設定外部軟體工作負載,以將外部 IdP 的權杖與 Microsoft 身分識別平台的存取權杖交換。 外部工作負載可以存取 Microsoft Entra 保護的資源,而不需要管理密碼 (在支援的案例中)。 若要深入了解權杖交換工作流程,請參閱工作負載身分識別同盟

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

重要考量與限制

若要建立、更新或刪除同盟身分識別認證,執行動作的帳戶必須擁有應用程式管理員應用程式開發人員雲端應用程式管理員或應用程式擁有者角色。 需要 microsoft.directory/applications/credentials/update 權限才能更新同盟身分識別認證。

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

設定同盟身分識別認證時,可以提供幾項重要的資訊:

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

  • 簽發者是外部識別提供者的 URL。此值必須與要交換之外部權杖的 issuer 宣告相符。 必要。 如果 issuer 宣告在值中有前置或尾端空白字元,則系統會封鎖權杖交換。 此欄位的字元數限制為 600 個。

  • 主體是外部軟體工作負載的識別碼。此值必須與要交換之外部權杖的 sub (subject) 宣告相符。 主體沒有固定的格式,因為每個 IdP 都使用自己的格式 - 有時是 GUID,有時是以冒號分隔的識別碼,有時是任意字串。 此欄位的字元數限制為 600 個。

    重要

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

    重要

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

  • 對象會列出可出現在外部權杖中的對象。 必要。 您必須新增單一受眾值,其限制為 600 個字元。 建議值為 "api://AzureADTokenExchange"。 其指出 Microsoft 身分識別平台在傳入權杖的 aud 宣告中必須接受哪些內容。

  • 名稱是同盟身分識別認證的唯一識別碼。 必要。 此欄位的限制為 3-120 個字元,而且必須是易記的 URL。 支援英數字元、破折號或底線字元,第一個字元必須是英數字元。  名稱一旦建立,就是不可改變。

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

任何同盟身分識別認證屬性值皆不支援萬用字元。

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

必要條件

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

尋找您在下列步驟中所需應用程式的物件識別碼 (而非應用程式 (用戶端) 識別碼)。 您可以在 Microsoft Entra 系統管理中心中找到應用程式的物件識別碼。 移至應用程式註冊清單,並且選取應用程式註冊。 在 [概觀]->[基本資訊] 中,尋找 [物件識別碼]

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

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

GitHub 動作

若要新增 GitHub Actions 的同盟身分識別,請依照下列步驟操作:

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

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

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

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

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

  6. [簽發者]、[對象] 和 [主體識別碼] 欄位會根據您所輸入的值自動填入。

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

    新增認證視窗的螢幕擷取畫面,並且顯示範例值。

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

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

  • AZURE_TENANT_ID 目錄 (租用戶) 識別碼

    下列螢幕擷取畫面示範如何複製應用程式識別碼和租用戶識別碼。

    螢幕擷取畫面示範如何從 Microsoft Entra 系統管理中心複製應用程式識別碼和租用戶識別碼。

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

實體類型範例

分支範例

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

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

指定 [分支] 的 [實體類型] 和「主要」的 [GitHub 分支名稱]

環境範例

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

on:
  push:
    branches:
      - main

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

指定 [環境] 的 [實體類型],以及「生產」的 [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.*

指定 [標記] 的 [實體類型] 和 "v2" 的 [GitHub 標記名稱]

提取要求範例

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

Kubernetes

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

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

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

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

其他識別提供者

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

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

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

  • 名稱是同盟認證的名稱,之後無法變更。
  • 主體識別碼:必須符合外部識別提供者所發出權杖中的 sub 宣告。 此範例中使用的是 Google Cloud,主體 會是您打算使用的服務帳戶唯一識別碼。
  • 簽發者:必須符合外部識別提供者所發出權杖中的 iss 宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 擷取驗證權杖所需的金鑰。 若為 Google Cloud,「簽發者」為 "https://accounts.google.com"。

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

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

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

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

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

必要條件

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

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

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

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

GitHub Actions 範例

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

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

主體會識別 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 00001111-aaaa-2222-bbbb-3333cccc4444 --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)。

主體是簽發給服務帳戶之權杖中的主體名稱。 Kubernetes 使用下列格式的主體名稱:system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>

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

對象會列出可出現在外部權杖中的對象。 這是必填欄位。 建議值為 "api://AzureADTokenExchange"。

az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

其他身分識別提供者範例

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

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

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

主體:必須符合外部識別提供者所發出權杖中的 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 00001111-aaaa-2222-bbbb-3333cccc4444 --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 00001111-aaaa-2222-bbbb-3333cccc4444

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

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

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

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

az ad app federated-credential show --id 00001111-aaaa-2222-bbbb-3333cccc4444 --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 00001111-aaaa-2222-bbbb-3333cccc4444 --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

必要條件

  • 若要執行範例指令碼,您有兩個選項:
    • 使用 Azure Cloud Shell,您可以使用程式碼區塊右上角的 [試試看] 按鈕開啟。
    • 使用 Azure PowerShell 在本機執行指令碼,如下一節所述。
  • 在 Microsoft Entra ID 中建立應用程式註冊。 將您的應用程式存取權授與由外部軟體工作負載視為目標的 Azure 資源。
  • 尋找您在下列步驟中所需應用程式的物件識別碼 (而非應用程式 (用戶端) 識別碼)。 您可以在 Microsoft Entra 系統管理中心中找到應用程式的物件識別碼。 移至 [已註冊的應用程式] 清單,然後選取應用程式註冊。 在 [概觀]->[基本資訊] 中,尋找 [物件識別碼]
  • 取得外部 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 中所註冊應用程式的物件識別碼 (不是應用程式 (用戶端) 識別碼)。
  • Issuer 會將 GitHub 識別為外部權杖簽發者。
  • Subject 會識別 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
  • 名稱是同盟認證的名稱,之後無法變更。
  • 對象會列出可出現在外部權杖中的對象。 這是必填欄位。 建議值為 "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>
  • 名稱是同盟認證的名稱,之後無法變更。
  • 對象會列出可出現在外部權杖 aud 宣告中的對象。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

其他身分識別提供者範例

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

  • ObjectID:您先前在 Microsoft Entra ID 中所註冊應用程式的物件識別碼 (不是應用程式 (用戶端) 識別碼)。
  • 名稱是同盟認證的名稱,之後無法變更。
  • 主體:必須符合外部識別提供者所發出權杖中的 sub 宣告。 此範例中使用的是 Google Cloud,主體 會是您打算使用的服務帳戶唯一識別碼。
  • 簽發者:必須符合外部識別提供者所發出權杖中的 iss 宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 擷取驗證權杖所需的金鑰。 若為 Google Cloud,「簽發者」為 "https://accounts.google.com"。
  • 對象:必須符合外部權杖中的 aud 宣告。 基於安全性理由,您應該挑選針對 Microsoft Entra ID 的權杖唯一值。 建議值為 "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-AzADAppFederatedCredenti Cmdlet,依識別碼取得應用程式中的同盟身分識別認證。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

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

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

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

必要條件

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

尋找您在下列步驟中所需應用程式的物件識別碼 (而非應用程式 (用戶端) 識別碼)。 您可以在 Microsoft Entra 系統管理中心中找到應用程式的物件識別碼。 移至 [已註冊的應用程式] 清單,然後選取應用程式註冊。 在 [概觀]->[基本資訊] 中,尋找 [物件識別碼]

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

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

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

GitHub 動作

執行下列方法,在您的應用程式上建立新的同盟身分識別認證 (由應用程式的物件識別碼指定)。 簽發者將 GitHub 識別為外部權杖簽發者。 主體會識別 GitHub Actions 工作流程的 GitHub 組織、存放庫和環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平台將 GitHub 權杖交換為存取權杖時,將根據提供的 GitHub 權杖檢查同盟身分識別認證中的值。

az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/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('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
  "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 應用程式信任。

主體:在 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)。
  • 主體是簽發給服務帳戶之權杖中的主體名稱。 Kubernetes 使用下列格式的主體名稱:system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • 名稱是同盟認證的名稱,之後無法變更。
  • 對象會列出可出現在外部權杖中的對象。 這是必填欄位。 建議值為 "api://AzureADTokenExchange"。
az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

您會收到回應:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

其他身分識別提供者範例

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

  • 名稱是同盟認證的名稱,之後無法變更。
  • ObjectID:您先前在 Microsoft Entra ID 中所註冊應用程式的物件識別碼 (不是應用程式 (用戶端) 識別碼)。
  • 主體:必須符合外部識別提供者所發出權杖中的 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('00001111-aaaa-2222-bbbb-3333cccc4444')/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/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials'

您會看到如下的回應:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "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/00001111-aaaa-2222-bbbb-3333cccc4444//federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

您會看到如下的回應:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials('00001111-aaaa-2222-bbbb-3333cccc4444')/00001111-aaaa-2222-bbbb-3333cccc4444",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "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/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

下一步