瞭解工作負載身分識別同盟如何安全地存取 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 系統管理中心中或使用 Microsoft Graph 的 GitHub 存放庫之間設定信任關係。 接著設定 GitHub Actions 工作流程,從 Microsoft 識別提供者取得存取權杖,以存取 Azure 資源。
- 使用應用程式身分識別在 Azure 計算平台上執行的工作負載。 首先,將使用者指派的受控識別指派給您的 Azure VM 或 App Service。 然後, 設定應用程式與使用者指派身分識別之間的信任關係。
- 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 CLI、Azure PowerShell、Azure SDK 及 Azure Resource Manager (ARM) 範本,在使用者指派的受控識別上。 外部工作負載使用存取權杖來存取 Microsoft Entra 保護的資源,而不需管理祕密 (在支援的案例中)。 設定信任關係的步驟將根據案例和外部 IdP 而有所不同。
- 對於 Microsoft Entra 系統管理中心中或透過 Microsoft Graph 的應用程式註冊。 此設定可讓您取得應用程式的存取權杖,而不需管理 Azure 外部的祕密。 如需詳細資訊,請瞭解如何設定 應用程式以信任外部識別提供者 ,以及如何設定應用程式與 使用者指派的受控識別之間的信任。
注意
同盟身分識別認證issuer、 subject和 audience 值必須區分大小寫地符合要由外部 IdP 傳送至Microsoft Entra 識別符的令牌中包含的對應issuer值subject,audience才能授權案例。 如需此變更的詳細資訊,請瀏覽 驗證的新功能。
所有案例交換外部權杖與存取權杖的工作流程皆相同。 下列圖表顯示交換外部權杖與存取權杖,然後存取受 Microsoft Entra 保護的資源所用的一般工作流程。
- 外部工作負載 (例如 GitHub Actions 工作流程) 向外部 IdP (例如 GitHub) 要求權杖。
- 外部 IdP 核發權杖給外部工作負載。
- 外部工作負載 (例如 GitHub 工作流程中的登入動作) 將權杖傳送給 Microsoft 身分識別平台,並要求存取權杖。
- Microsoft 身分識別平台會檢查使用者指派受控識別或應用程式註冊上的信任關係,並根據外部 IdP 上的 Open ID Connect (OIDC) 簽發者 URL 驗證外部權杖。
- 確認完成後,Microsoft 身分識別平台會核發存取權杖給外部工作負載。
- 外部工作負載使用 Microsoft 身分識別平台提供的存取權杖,存取受 Microsoft Entra 保護的資源。 例如 GitHub Actions 工作流程可使用存取權杖,將 Web 應用程式發佈到 Azure App Service。
簽署金鑰是從外部 IdP 的 OIDC 端點下載時,Microsoft 身分識別平台只會儲存前 100 個簽署金鑰。 如果外部 IdP 公開超過 100 個簽署金鑰,您在使用工作負載身分識別同盟時可能會遇到錯誤。
另請參閱
- 如何在使用者指派的受控識別上建立、刪除、取得或更新同盟身分識別認證,或在應用程式註冊上建立、刪除、取得或更新同盟身分識別認證。
- 在 應用程式註冊中,將使用者指派的受控身份設為同盟身份憑證。
- 請參閱工作負載身分識別概觀,瞭解如何設定 Kubernetes 工作負載,以便從 Microsoft 識別提供者取得存取權杖,以存取受 Microsoft Entra 保護的資源。
- 若要深入瞭解如何設定 GitHub Actions 工作流程,以從 Microsoft 識別提供者取得存取權杖,進而存取受 Microsoft Entra 保護的資源,請參閱 GitHub Actions 文件 (英文)。
- Microsoft Entra ID 如何使用授與的 OAuth 2.0 用戶端認證及其他 IdP 核發的用戶端判斷提示取得權杖。
- 如需外部識別提供者建立之 JWT 格式所需的資訊,請參閱判斷提示格式。