共用方式為


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

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

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

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

重要考慮和限制

若要建立、更新或刪除同盟身分識別認證,執行動作的帳戶必須具有 應用程式管理員應用程式開發人員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 動作部署 Azure 資源。

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

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

  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 ]

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

環境範例

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

on:
  push:
    branches:
      - main

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

指定 Environment 的實體類型,以及 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 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 選取左側導覽窗格中 憑證 & 秘密,選取 [同盟認證] 索引卷標,然後選取 [[新增認證]。

從下拉功能表中選取存取 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 系統管理中心的應用程式註冊體驗中尋找您的應用程式註冊。 在左側導覽窗格中選取 憑證 和 & 秘密,然後選取 [同盟認證] 索引標籤。系統列出設定在您的應用程式上的同盟認證。

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

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

  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 時,主體 是您計劃使用之服務帳戶的唯一 ID。
  • 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 ID 中建立應用程式註冊。 將您的應用程式的存取權授予由外部軟體工作負載所針對的 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
    

    執行此命令以進行下一個步驟之後,您可能需要 Exit 目前的 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 >
    • 對於不綁定至環境的任務,請根據用於觸發工作流程的 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 中註冊的應用程式物件標識碼(而非應用程式(用戶端)標識符。
  • 簽發者 是您的服務帳戶簽發者 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 時,主體 是您計劃使用的服務帳戶的唯一 ID。
  • 簽發者:必須符合外部識別提供者所簽發令牌中的 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,以 ID 從應用程式獲取聯合身份驗證憑證。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

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

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

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

先決條件

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

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

請取得您外部 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 中註冊的應用程式物件識別碼(而非應用程式(用戶端)識別碼)。
  • 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('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'

另請參閱