共用方式為


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

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

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

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

重要考慮和限制

若要建立、更新或刪除同盟身分識別認證,執行動作的帳戶必須是應用程式的擁有者,或具有下列其中一個 Entra 角色:應用程式管理員Cloud Application Administrator全域管理員混合式身分識別系統管理員。 需要 microsoft.directory/applications/credentials/update 許可權 才能更新聯合身分識別認證。

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

當您設定同盟身份认证凭证時,有幾項重要資訊需要提供:

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

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

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

    重要

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

    重要

    如果您不小心在 主體 設定中加入了錯誤的外部工作負載資訊,聯邦身分識別認證仍然能成功建立,且不會出現錯誤。 在令牌交換失敗之前,錯誤不會變得明顯。

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

  • 名稱 是聯邦身分憑證的唯一識別碼。 必填。 此欄位的字元限制為 3-120 個字元,且必須符合 URL 格式。 支援英數位元、虛線或底線字元,第一個字元必須是英數位元。 一旦建立它就不可變了。

  • 描述 是由使用者提供的聯合身份認證描述。 自選。 Microsoft Entra ID 不會驗證或檢查描述。 此欄位的限制為 600 個字元。

在任何聯邦身份憑證的屬性值中都不支援萬用字元。

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

先決條件

  • 在 Microsoft Entra 身分識別中建立應用程式註冊受控識別。 讓您的應用程式獲得對外部軟體負載目標 Azure 資源的存取權。
  • 在後續步驟中需要找到應用程式的物件識別碼(而非應用程式(用戶端)識別碼)。 您可以在 Microsoft Entra 系統管理中心中找到應用程式的物件識別碼。 移至應用程式註冊清單,然後選取您的應用程式註冊。 在 概觀中,您可以找到 物件識別碼
  • 在接下來的步驟中,請取得您的外部 IdP 和軟體工作負載所需的 主體資訊簽發者資訊

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

GitHub Actions

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

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

  2. 同盟認證案例 的下拉式方塊中,選取 使用 GitHub Actions 部署 Azure 資源

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

  4. 針對 [實體類型],選取 [環境]、[分支]、[拉取請求] 或 [標籤] 並指定值。 這些值必須與 GitHub 工作流程中的組態完全相符,。 不支援分支和標記的樣式匹配。 如果您的 on-push 工作流程需要在多個分支或標記上運行,請指定一個環境。 如需詳細資訊,請參閱範例。

  5. 為同盟認證新增 名稱

  6. 簽發者受眾,以及 主體標識碼 欄位會根據您輸入的值自動填入。

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

    [新增認證] 視窗的螢幕快照,其中顯示範例值。

請使用您的 GitHub 工作流程所需之 Microsoft Entra 應用程式註冊中的下列值:

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

  • AZURE_TENANT_ID 目錄(租戶)識別碼

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

    示範如何從 Microsoft entra 系統管理中心複製應用程式識別碼和租使用者標識碼的螢幕快照。

實體類型範例

分支範例

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

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

指定 實體類型Branch,以及 GitHub 分支名稱 為 "main"。

環境範例

針對與名為「生產」的環境相關的工作:

on:
  push:
    branches:
      - main

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

指定< c0 >實體類型為< c1 >Environment,並將< c2 >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.*

指定 標籤實體類型,以及名稱為 "v2" 的 GitHub 標籤

提取要求範例

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

Kubernetes

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

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

填入 叢集簽發者 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 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取左側導覽窗格中 憑證 & 秘密,然後選取 [同盟認證] 索引卷標。系統會列出在您的應用程式上設定的同盟認證。

若要刪除同盟身份識別憑證,請選取該憑證的 刪除 圖示。

設定彈性同盟身分識別認證 (預覽)

  1. 流覽至 [Microsoft Entra ID],然後選取您要在其中設定同盟身分識別認證的應用程式。
  2. 在左側瀏覽窗格中,選取 [憑證與秘密]。
  3. 在 [同盟認證] 索引標籤底下,選取 [+ 新增認證]。
  4. 在出現的 [新增認證] 視窗中,從 [同盟認證情境] 旁邊的下拉選單中,選取 [其他簽發者]。
  5. 欄位中,輸入您要使用的宣告匹配表達式。

先決條件

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

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

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

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

GitHub Actions 範例

名稱 指定您同盟身分識別憑據的名稱。

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

主體 確定用於 GitHub Actions 工作流程的 GitHub 組織、儲存庫及環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平臺將 GitHub 令牌交換為存取令牌時,會根據提供的 GitHub 令牌檢查聯邦身分識別憑證中的值。 在 Azure 授與存取令牌之前,要求必須符合這裡定義的條件。

  • 對於關聯至環境的作業:repo:< Organization/Repository >:environment:< Name >
  • 對於與環境無關的 Jobs,請根據引發工作流程的 ref 路徑來包含分支/標籤的 ref 路徑: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 中執行的軟體工作負載作為範例:

  • name 是同盟認證的名稱,稍後無法變更。
  • id:應用程式的物件識別碼、應用程式(用戶端)標識碼或應用程式的標識碼 URI。
  • subject:必須符合外部識別提供者所簽發令牌中的 sub 宣告。 在此範例中使用 Google Cloud 時,主題 是您計劃使用的服務帳戶的唯一識別碼。
  • issuer:必須符合外部識別提供者所簽發令牌中的 iss 宣告。 符合 OIDC 探索規格的 URL。Microsoft Entra ID 會使用此簽發者 URL 來擷取驗證令牌所需的密鑰。 對於 Google Cloud,簽發者是https://accounts.google.com
  • audiences:列出外部令牌中可能出現的受眾。 此欄位為必要欄位。 建議值為 「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 識別碼中建立應用程式註冊。 讓您的應用程式獲得對外部軟體負載目標 Azure 資源的存取權。
  • 在後續步驟中需要找到應用程式的物件識別碼(而非應用程式(用戶端)識別碼)。 您可以在 Microsoft Entra 系統管理中心中找到應用程式的物件識別碼。 移至已註冊的應用程式清單,然後選取您的應用程式註冊。 在 概觀->基本資訊中,尋找 物件ID
  • 取得外部 IdP 和軟體工作負載所需的 主體資訊 以及 簽發者資訊,你在接下來的步驟中需要這些資訊。

在本機設定 Azure PowerShell

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

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

  2. 登入 Azure。

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

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    您在執行此命令後,可能需要退出目前的 PowerShell 會話,以便進行下一個步驟。

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

    Install-Module -Name Az.Resources -AllowPrerelease
    

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

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

GitHub Actions 範例

  • ApplicationObjectId:您先前在 Microsoft Entra ID 中註冊的應用程式的物件標識碼(而不是應用程式(用戶端)ID)。
  • 簽發者 將 GitHub 識別為外部令牌簽發者。
  • Subject 會識別 GitHub Actions 工作流程中的 GitHub 組織、儲存庫和環境。 當 GitHub Actions 工作流程要求 Microsoft 身分識別平臺將 GitHub 令牌交換為存取令牌時,會根據提供的 GitHub 令牌檢查聯邦身分識別憑證中的值。
    • 對於系結至環境的作業:repo:< Organization/Repository >:environment:< Name >
    • 對於不綁定到特定環境的 Jobs,請根據用於觸發工作流程的 ref 路徑,包含相應分支/標籤的 ref 路徑: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 中註冊的應用程式的物件標識碼(而不是應用程式(用戶端)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/aaaabbbb-0000-cccc-1111-dddd2222eeee/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

其他識別提供者範例

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

  • ObjectID:您先前在 Microsoft Entra ID 中註冊的應用程式的物件識別碼,而不是應用程式(客戶端)ID。
  • Name 是同盟認證的名稱,稍後無法變更。
  • Subject必須與外部身份提供者簽發的令牌中的 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-AzADAppFederatedCredential cmdlet,以 ID 從應用程式獲取聯合身份驗證憑證。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

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

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

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

先決條件

在 Microsoft Entra 識別碼中建立應用程式註冊。 讓您的應用程式獲得對外部軟體負載目標 Azure 資源的存取權。

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

取得外部 IdP 和軟體工作負載所需的 主體資訊 以及 簽發者資訊,這些在接下來的步驟中是必需的。

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

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

GitHub Actions

執行下列方法來 在您的應用程式上建立新的同盟身分識別認證(由應用程式的物件標識元指定)。 issuer 會將 GitHub 識別為外部令牌簽發者。 subject 用來識別 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"
}

在代碼段中,參數如下所示:

  • name:Azure 應用程式的名稱。
  • issuer: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-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
    • 適用於拉取請求事件所觸發的工作流程:repo:< Organization/Repository >:pull-request
  • audiences 列出了可以出現在外部令牌中的對象。 此欄位為必要欄位。 建議值為 「api://AzureADTokenExchange」。

Kubernetes 範例

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

  • issuer 是您的服務帳戶簽發者 URL(受控叢集的 OIDC 簽發者 URL,或自我管理叢集的 OIDC 簽發者 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/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 中註冊的應用程式的物件識別碼,而不是應用程式(客戶端)ID。
  • 外部身份驗證提供者簽發的令牌中的 sub 聲明必須與 subject 相符。 在此範例中使用 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'

另請參閱