工作負載身分識別同盟

本文提供軟體工作負載的工作負載身分識別同盟概觀。 使用工作負載身分識別同盟可讓您存取受 Microsoft Entra 保護的資源,而不需要管理秘密(針對支援的案例)。

您可以在 GitHub Actions、在 Kubernetes 上執行的工作負載,或 Azure 外部計算平臺中執行的工作負載,使用工作負載身分識別同盟。

為什麼要使用工作負載身分識別同盟?

觀看這段影片以了解為何要使用工作負載身分識別同盟。

一般而言,軟體工作負載(例如應用程式、服務、腳本或容器型應用程式)需要身分識別,才能驗證和存取資源或與其他服務通訊。 當這些工作負載在 Azure 上執行時,您可以使用 受控識別 ,而 Azure 平臺會為您管理認證。 不過,您只能針對在 Azure 中執行的軟體工作負載使用受控識別。 針對在 Azure 外部執行的軟體工作負載,您必須使用應用程式認證(秘密或憑證)來存取受 Microsoft Entra 保護的資源(例如 Azure、Microsoft Graph、Microsoft 365 或第三方資源)。 這些認證會造成安全性風險,必須安全地儲存並定期輪替。 如果認證過期,您也會執行服務停機的風險。

您可以使用工作負載身分識別同盟, 在 Microsoft Entra ID 中設定使用者指派的受控 識別或 應用程式註冊 ,以信任來自外部識別提供者 (IdP) 的令牌,例如 GitHub 或 Google。 Microsoft Entra ID 中使用者指派的受控識別或應用程式註冊會變成軟體工作負載的身分識別,例如,在內部部署 Kubernetes 或 GitHub Actions 工作流程中執行。 建立信任關係之後,您的外部軟體工作負載會從外部 IdP 交換信任的令牌,以取得來自 Microsoft 身分識別平台 的存取令牌。 您的軟體工作負載會使用該存取令牌來存取已授與工作負載存取權的 Microsoft Entra 受保護資源。 您可以消除手動管理認證的維護負擔,並消除洩漏秘密或憑證過期的風險。

支援的案例

使用工作負載身分識別同盟存取 Microsoft Entra 受保護的資源時,支援下列案例:

  • 在任何 Kubernetes 叢集上執行的工作負載(Azure Kubernetes Service (AKS)、Amazon Web Services EKS、Google Kubernetes Engine (GKE)或內部部署。 在 Microsoft Entra ID 中建立使用者指派的受控識別或應用程式與 Kubernetes 工作負載之間的信任關係(如工作負載身分識別概觀中所述)。
  • GitHub Actions。 首先,在 Microsoft Entra ID 中設定使用者指派的受控識別或應用程式與 Microsoft Entra 系統管理中心的 GitHub 存放庫或使用 Microsoft Graph 之間的信任關係。 然後 設定 GitHub Actions 工作流程 ,以從 Microsoft 身分識別提供者取得存取令牌並存取 Azure 資源。
  • Google 雲端。 首先,在 Microsoft Entra ID 中設定使用者指派的受控識別或應用程式與 Google Cloud 中的身分識別之間的信任關係。 然後設定在Google Cloud中執行的軟體工作負載,以從 Microsoft 身分識別提供者取得存取令牌,並存取受 Microsoft Entra 保護的資源。 請參閱 從Google Cloud中的應用程式存取 Microsoft Entra 受保護的資源。
  • 在 Amazon Web Services 中執行的工作負載(AWS)。 首先,在 Microsoft Entra ID 中設定使用者指派的受控識別或應用程式與 Amazon Cognito 中的身分識別之間的信任關係。 然後設定在 AWS 中執行的軟體工作負載,以從 Microsoft 身分識別提供者取得存取令牌,並存取受 Microsoft Entra 保護的資源。 請參閱 工作負載身分識別與 AWS 的同盟。
  • 在 Azure 外部計算平台中執行的其他工作負載。 在 Microsoft Entra ID 中設定使用者指派的受控識別應用程式與計算平臺的外部 IdP 之間的信任關係。 您可以使用該平臺所發出的令牌,向 Microsoft 生態系統中的 Microsoft 身分識別平台 進行驗證,並呼叫 API。 使用客戶端認證流程從 Microsoft 身分識別平台 取得存取令牌,傳入身分識別提供者的 JWT,而不是使用預存憑證自行建立令牌。
  • SPIFFE 和 SPIRE 是一組與平臺無關的開放原始碼標準,可針對跨平臺和雲端廠商部署的軟體工作負載提供身分識別。 首先,在 Microsoft Entra ID 中設定使用者指派的受控識別或應用程式與外部工作負載的 SPIFFE 標識符之間的信任關係。 然後設定您的外部軟體工作負載,以從 Microsoft 身分識別提供者取得存取令牌,並存取受 Microsoft Entra 保護的資源。 請參閱 工作負載身分識別與 SPIFFE 和 SPIRE 的同盟。
  • 在 Azure Pipelines 中建立新的服務連線(預覽)。 使用工作負載身分識別同盟建立 Azure Resource Manager 服務連線

注意

Microsoft Entra ID 發行的令牌可能無法用於同盟身分識別流程。 同盟身分識別認證流程不支援由 Microsoft Entra ID 簽發的令牌。

運作方式

在 Microsoft Entra ID 中建立外部 IdP 與 使用者指派的受控識別應用程式 之間的信任關係。 同盟身分識別認證可用來指出應用程式或受控識別應該信任來自外部IdP的令牌。 您可以設定同盟身分識別:

不過,針對所有案例,交換存取令牌外部令牌的工作流程都相同。 下圖顯示工作負載交換存取令牌外部令牌的一般工作流程,然後存取受 Microsoft Entra 保護的資源。

此圖顯示交換存取令牌和存取 Azure 的外部令牌

  1. 外部工作負載(例如 GitHub Actions 工作流程)會向外部 IdP 要求令牌(例如 GitHub)。
  2. 外部IdP會向外部工作負載發出令牌。
  3. 外部工作負載(例如 GitHub 工作流程中的登入動作)會將令牌傳送至 Microsoft 身分識別平台 並要求存取令牌。
  4. Microsoft 身分識別平台 會檢查使用者指派的受控識別應用程式註冊上的信任關係,並根據外部 IdP 上的 OpenID 連線 (OIDC) 簽發者 URL 驗證外部令牌。
  5. 當符合檢查時,Microsoft 身分識別平台 對外部工作負載發出存取令牌。
  6. 外部工作負載會使用來自 Microsoft 身分識別平台 的存取令牌,存取 Microsoft Entra 受保護的資源。 例如,GitHub Actions 工作流程會使用存取令牌將 Web 應用程式發佈至 Azure App 服務。

Microsoft 身分識別平台 只會在從外部 IdP 的 OIDC 端點下載簽署金鑰時儲存前 100 個簽署金鑰。 如果外部 IdP 公開超過 100 個簽署金鑰,您在使用工作負載身分識別同盟時可能會遇到錯誤。

下一步

深入瞭解工作負載身分識別同盟的運作方式:

  • 如何在使用者指派的受控識別上建立、刪除、取得或更新 同盟 身分識別認證。
  • 如何在應用程式註冊上建立、刪除、取得或更新 同盟身分識別認證
  • 請閱讀工作負載身分識別概觀,瞭解如何設定 Kubernetes 工作負載,以從 Microsoft 身分識別提供者取得存取令牌,以及存取受 Microsoft Entra 保護的資源。
  • 請閱讀 GitHub Actions 檔,以深入瞭解如何設定 GitHub Actions 工作流程,以從 Microsoft 身分識別提供者取得存取令牌,以及存取受 Microsoft Entra 保護的資源。
  • Microsoft Entra ID 如何使用 OAuth 2.0 用戶端認證授 與,以及由另一個 IdP 發出的用戶端判斷提示來取得令牌。
  • 如需外部識別提供者所建立之 JWT 所需格式的相關信息,請閱讀判斷 提示格式