共用方式為


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

彈性同盟身分識別認證是Microsoft Entra 工作負載標識符的進階功能,可增強現有的同盟身分識別認證模型。 本文說明這些認證的運作方式、其優點,以及目前的限制。

靈活的同盟身份認證憑證允許使用受限制的表達式語言來匹配傳入的 subject 宣告,並使自定義宣告的包含成為可能,有助於減少工作負載身份聯盟的管理開銷並解決規模限制問題。 如果您想要使用 Microsoft Entra 簡化外部工作負載的驗證,本指南會為您提供使用此強大功能的必要見解和步驟。

為何使用彈性的同盟身分識別認證?

在工作負載身分識別同盟內 同盟身分識別認證的目前行為,在將已定義的 和 Microsoft 與傳送至 entra 之令牌中 相比較時,需要明確比對。 結合指定應用程式或使用者指派受控識別的目前 20 個同盟身分識別認證限制時,可以快速達到調整限制。

彈性同盟身分識別認證可藉由在與傳入 subject 宣告進行比對時,允許使用受限制的表達式語言,來擴充現有的同盟身分識別認證模型。 它也可以通過允許在您的聯邦身份認證中包含特定允許的自定義宣告,來將聯邦身份認證授權模式擴展到超出 subjectissueraudience 宣告的範圍。

彈性聯邦身分識別認證可用於嘗試使用 Microsoft Entra 驗證外部工作負載時,協助降低管理負擔,並解決工作負載身分識別聯邦實作中的規模限制。

彈性同盟身分識別認證如何運作?

彈性同盟身分識別認證不會變更同盟身分識別認證所提供的基準功能。 這些信任關係仍被用來表示應用程式應該信任哪個來自外部 IdP 的令牌。 相反地,它們藉由啟用先前需要多個同盟身分識別認證的案例,改為在單一彈性同盟身分識別認證下管理,來擴充同盟身分識別認證的能力。 一些範例包括:

  • 具有各種工作流程的 GitHub 存放庫,每個工作流程都在不同的分支上執行(或跨分支使用)。 先前,工作流程可以跨執行的每個分支都需要唯一的同盟身分識別認證。 使用彈性的同盟身分識別認證,此案例可以在單一同盟身分識別認證下管理。
  • Terraform 雲端 run_phases 方案,每個方案都需要唯一的同盟身分識別認證。 使用彈性的同盟身分識別認證,這可以在單一彈性同盟身分識別認證下管理。
  • 可重複使用的 GitHub Actions 工作流程,其中通配符可用於 GitHub 的自訂 job_workflow_ref 宣告。

注意

目前提供彈性的同盟身分識別認證支援,以比對 GitHub、GitLab 和 Terraform Cloud 發行的令牌。 此支援僅適用於目前在應用程式對象上設定的同盟身分識別認證。 您只能透過 Microsoft Graph 或 Azure 入口網站來建立和管理彈性的同盟身分識別認證。

彈性同盟身分識別認證語言結構

彈性聯邦化身份憑證表達式由三個部分組成:宣告查閱、運算符和比較元。 如需每個元件的明細,請參閱下表:

名字 描述
索賠查詢 聲明查詢必須遵循 claims['<claimName>'] 範例 claims['sub']
操作員 運算子部分必須只是運算子名稱,並與查詢條件和比較項由一個空格分隔。 matches
比較對象 比較項包含您想要在查閱中比較的主張,即必須包含在單引號內。 'repo:contoso/contoso-repo:ref:refs/heads/*'

結合在一起,彈性同盟身分識別認證表達式範例看起來會像下列 JSON 物件:

"claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*'."

透過 Microsoft Graph 設定同盟身分識別認證

為了配合彈性的同盟身分識別認證功能,federatedIdentityCredentials 資源會使用新的 claimsMatchingExpression 屬性來擴充。 除此之外,subject 屬性現在可為空值。 claimsMatchingExpressionsubject 屬性互斥,因此您無法在同盟身分識別認證中定義兩者。

  • audiences:可以在外部令牌中出現的觀眾。 此欄位為必要欄位,且應該設定為 Microsoft Entra 識別碼的 api://AzureADTokenExchange。 它表示,Microsoft 身分驗證平台應該接受傳入令牌中 aud 宣告中的內容。 此值在您的外部身份提供者中代表 Microsoft Entra ID,並且在不同的身份提供者間沒有固定值 - 您可能需要在您的身份提供者中創建新的應用程式註冊,以用作此權杖的受眾。
  • issuer:外部識別提供者的URL。 必須符合正在交換的外部令牌的簽發者聲明。
  • subject:外部身份提供者內的外部軟體工作負載的識別碼。 就像受眾值一樣,它沒有固定格式,因為每個 IdP 都會使用自己的格式,有時是 GUID,有時是冒號分隔的識別符,有時是任意字符串。 此處的值必須符合提交給 Microsoft Entra ID 令牌中的 sub 宣告。 如果定義 subjectclaimsMatchingExpression 必須設定為 null。
  • name:用來識別認證的唯一字串。 此屬性是替代鍵,可透過 GETUPSERT 作業來參考聯邦身分識別憑證的值。
  • claimsMatchingExpression:新的複雜型別,包含兩個屬性,valuelanguageVersion。 值可用來定義表達式,而 languageVersion 用來定義所使用的彈性同盟身分識別認證語言 (FFL) 版本。 languageVersion 應一律設定為 1。 如果定義 claimsMatchingExpressionsubject 必須設定為 null。

彈性聯邦身份憑證表達式語言功能

彈性同盟身分識別認證目前支援在啟用的簽發者之間使用一些運算符。 單引號在彈性聯邦身份認證表達式語言中會被解釋為轉義字元。

操作員 描述
matches 針對指定的宣告啟用單一字元 (以 ?表示) 和多字元 (以 *表示) 通配符比對 "claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*'"
"claims['sub'] matches 'repo:contoso/contoso-repo-*:ref:refs/heads/????'"
eq 用於明確比對指定的聲明 "claims['sub'] eq 'repo:contoso/contoso-repo:ref:refs/heads/main'"
and 將表達式與多個宣告結合的布爾運算元 "claims['sub'] eq 'repo:contoso/contoso-repo:ref:refs/heads/main' and claims['job_workflow_ref'] matches 'foo-org/bar-repo /.github/workflows/*@refs/heads/main'"

平台中的簽發者網址、支援的宣告和運算符

視您使用的平台而定,您需要實作各自不同的發行者 URL、聲明和運算符。 使用下列索引標籤來選取您選擇的平臺。

支持的簽發者 URL:https://token.actions.githubusercontent.com

每個宣告支援的宣告和運算子:

  • 宣告 sub 支援運算符 eqmatches
  • 宣告 job_workflow_ref 支援運算符 eqmatches

Azure CLI、Azure PowerShell 和 Terraform 提供者

Azure CLI、Azure PowerShell 或 Terraform 提供者中尚未提供明確的彈性同盟身分識別認證支援。 如果您嘗試使用任何這些工具來設定彈性的同盟身分識別認證,您會看到錯誤。 此外,如果您透過 Microsoft Graph 或 Azure 入口網站設定彈性同盟身分識別認證,並嘗試使用任何這些工具讀取該彈性同盟身分識別認證,您會看到錯誤。

您可以使用 Azure CLI 的 az rest 方法來提出 REST API 要求,以建立和管理彈性的同盟身分識別認證。

az rest --method post \
    --url https://graph.microsoft.com/beta/applications/{objectId}/federatedIdentityCredentials
    --body "{'name': 'FlexFic1', 'issuer': 'https://token.actions.githubusercontent.com', 'audiences': ['api://AzureADTokenExchange'], 'claimsMatchingExpression': {'value': 'claims[\'sub\'] matches \'repo:contoso/contoso-org:ref:refs/heads/*\'', 'languageVersion': 1}}"