同盟身分識別認證的重要考量和限制
此文章說明 Microsoft Entra 應用程式和使用者指派受控識別上同盟身分識別認證的重要考量、限制和限制。
如需同盟身分識別認證所啟用案例的詳細資訊,請參閱工作負載身分識別同盟概觀。
一般同盟身分識別認證考量
適用於:應用程式和使用者指派的受控識別
任何有權建立應用程式註冊和新增祕密或憑證的人,都可以將同盟身分識別認證新增至應用程式。 在 Microsoft Entra 系統管理中心的 [使用者] - [使用者設定]> 中,如果 [使用者可以註冊應用程式] 開關設定為 [否],您將無法建立應用程式註冊或設定同盟身分識別認證。 尋找系統管理員,代表您設定同盟身分識別認證,也就是應用程式管理員或應用程式擁有者角色中的某人。
同盟身分識別認證不會取用 Microsoft Entra 租用戶服務主體物件配額。
最多可以將 20 個同盟身分識別認證新增至一個應用程式或使用者指派的受控識別。
設定同盟身分識別認證時,可以提供幾項重要的資訊:
簽發者和主體是設定信任關係所需的重要資訊片段。
issuer
和subject
的組合在應用程式上必須是唯一的。 當外部軟體工作負載要求 Microsoft 身分識別平台交換存取權杖的外部權杖時,會根據外部權杖中提供的 和 宣告來檢查同盟身分識別認證的issuer
和subject
值。 如果驗證檢查通過,Microsoft 身分識別平台會將存取權杖簽發給外部軟體工作負載。簽發者是外部識別提供者的 URL。此值必須與要交換之外部權杖的
issuer
宣告相符。 必要。 如果issuer
宣告在值中有前置或尾端空白字元,則系統會封鎖權杖交換。 此欄位的字元數限制為 600 個。主體是外部軟體工作負載的識別碼。此值必須與要交換之外部權杖的
sub
(subject
) 宣告相符。 主體沒有固定的格式,因為每個 IdP 都使用自己的格式 - 有時是 GUID,有時是以冒號分隔的識別碼,有時是任意字串。 此欄位的字元數限制為 600 個。重要
主體設定值必須完全符合 GitHub 工作流程設定上的設定。 否則,Microsoft 身分識別平台將會查看傳入的外部權杖,並拒絕存取權杖的交換。 您將不會收到錯誤,交換會失敗且不會發生錯誤。
重要
如果您不小心在主體設定中新增不正確的外部工作負載資訊,則會成功建立同盟身分識別認證,而不會發生錯誤。 在權杖交換失敗之前,錯誤並不明顯。
對象會列出可出現在外部權杖中的對象。 必要。 您必須新增單一受眾值,其限制為 600 個字元。 建議值為 "api://AzureADTokenExchange"。 其指出 Microsoft 身分識別平台在傳入權杖的
aud
宣告中必須接受哪些內容。名稱是同盟身分識別認證的唯一識別碼。 必要。 此欄位的限制為 3-120 個字元,而且必須是易記的 URL。 支援英數字元、破折號或底線字元,第一個字元必須是英數字元。 名稱一旦建立,就是不可改變。
描述是使用者提供的同盟身分識別認證描述。 選擇性。 Microsoft Entra ID 不會驗證或檢查描述。 此欄位的字元數限制為 600 個。
任何同盟身分識別認證屬性值皆不支援萬用字元。
不支援的區域 (使用者指派的受控識別)
適用於:建立使用者指派的受控識別
下欄區域中建立的使用者指派受控識別目前不支援建立同盟身分識別認證:
- 馬來西亞南部
- 西班牙中部
- 臺灣北部
- 臺灣西北
未來將逐步推出在這些區域中針對使用者指派的身分識別建立同盟身分識別認證的支援。在此區域中使用同盟身分識別認證所需的資源,可以藉由利用在支援的區域中建立的使用者指派受控識別來執行此動作。
支援的簽署演算法和簽發者
適用於:應用程式和使用者指派的受控識別
只有提供使用 RS256 演算法簽署之權杖的簽發者,才支援使用工作負載身分識別同盟進行權杖交換。 交換與其他演算法簽署的權杖可能會運作,但尚未經過測試。
同盟認證變更傳播的時間
適用於:應用程式和使用者指派的受控識別
一開始設定之後,同盟身分識別認證需要一段時間才會傳播到整個區域。 在設定同盟身分識別認證之後,權杖要求可能會失敗,因為快取會在目錄中填入舊資料。 在此時段內,授權要求可能會失敗,並出現錯誤訊息:AADSTS70021: No matching federated identity record found for presented assertion.
若要避免這個問題,請在新增同盟身分識別認證之後稍候一段時間,再要求權杖,以確保在授權服務的所有節點之間完成複寫。 我們也建議您新增權杖要求的重試邏輯。 即使成功取得權杖之後,還是應該針對每個要求進行重試。 最後,在完全複寫資料之後,失敗的百分比將會下降。
不支援並行更新 (使用者指派的受控識別)
適用於:建立使用者指派的受控識別
在同一個使用者指派的受控識別下建立多個同盟身分識別認證會同時觸發並行偵測邏輯,這會導致要求失敗並出現 409 衝突的 HTTP 狀態碼。
Azure 的 Terraform 提供者 (資源管理員) version 3.40.0 引進的更新會循序建立多個同盟身分識別認證,而不是同時建立。 建立多重同盟身分識別時,早於 3.40.0 的版本可能會導致管線失敗。 建議您使用 Azure 的 Terraform 提供者 (資源管理員) v3.40.0 或更新版本,以便循序建立多個同盟身分識別認證。
當您使用自動化或 Azure Resource Manager範本 (ARM 範本) 在相同的父身分識別下建立同盟身分識別認證時,請依序建立同盟認證。 您可以在不同的受控識別下,平行建立同盟身分識別認證,而沒有任何限制。
如果在迴圈中佈建同盟身分識別認證,您可以設定 "mode": "serial" 依序佈建認證。
您也可以使用 dependsOn 屬性,循序佈建多個新的同盟身分識別認證。 下列 Azure Resource Manager範本 (ARM 範本) 範例會使用 dependsOn 屬性,依序在使用者指派的受控識別上建立三個新的同盟身分識別認證:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"userAssignedIdentities_parent_uami_name": {
"defaultValue": "parent_uami",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2022-01-31-preview",
"name": "[parameters('userAssignedIdentities_parent_uami_name')]",
"location": "eastus"
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials",
"apiVersion": "2022-01-31-preview",
"name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic01')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]"
],
"properties": {
"issuer": "https://kubernetes-oauth.azure.com",
"subject": "fic01",
"audiences": [
"api://AzureADTokenExchange"
]
}
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials",
"apiVersion": "2022-01-31-preview",
"name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic02')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials', parameters('userAssignedIdentities_parent_uami_name'), 'fic01')]"
],
"properties": {
"issuer": "https://kubernetes-oauth.azure.com",
"subject": "fic02",
"audiences": [
"api://AzureADTokenExchange"
]
}
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials",
"apiVersion": "2022-01-31-preview",
"name": "[concat(parameters('userAssignedIdentities_parent_uami_name'), '/fic03')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentities_parent_uami_name'))]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials', parameters('userAssignedIdentities_parent_uami_name'), 'fic02')]"
],
"properties": {
"issuer": "https://kubernetes-oauth.azure.com",
"subject": "fic03",
"audiences": [
"api://AzureADTokenExchange"
]
}
}
]
}
Azure 原則
適用於:應用程式和使用者指派的受控識別
您可以使用拒絕 Azure 原則,如下列 ARM 範本範例所示:
{
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials"
},
"then": {
"effect": "deny"
}
}
}
節流限制
適用於:建立使用者指派的受控識別
下表描述對使用者指派受控識別 REST API 的要求限制。 如果您超過節流限制,您會收到 HTTP 429 錯誤。
作業 | 每個 Microsoft Entra 租用戶的每秒要求數 | 每個訂用帳戶每秒的要求數 | 每個資源每秒的要求數 |
---|---|---|---|
建立或更新要求 | 10 | 2 | 0.25 |
取得要求 | 30 | 10 | 0.5 |
依資源群組列出或依訂用帳戶列出要求 | 15 | 5 | 0.25 |
刪除要求 | 10 | 2 | 0.25 |
錯誤
適用於:應用程式和使用者指派的受控識別
建立、更新、取得、列出或刪除同盟身分識別認證時,可能會傳回下列錯誤碼。
HTTP 代碼 | 錯誤訊息 | 註解 |
---|---|---|
405 | 要求格式未預期:未啟用同盟身分識別認證的支援。 | 此區域中未啟用同盟身分識別認證。 請參閱「目前支援的區域」。 |
400 | 同盟身分識別認證必須只有 1 個對象。 | 目前,同盟身分識別認證支援單一物件「api://AzureADTokenExchange」。 |
400 | 來自 http 內容的同盟身分識別認證具有空白屬性 | 所有同盟身分識別認證屬性都是必要的。 |
400 | 同盟身分識別認證名稱 '{ficName}' 無效。 | 英數位元、虛線、底線,不超過 3-120 符號。 第一個符號是英數字元。 |
404 | 父使用者指派的身分識別不存在。 | 在同盟身分識別認證資源路徑中檢查使用者指派的身分識別名稱。 |
400 | 此受控識別的簽發者和主體組合已經存在。 | 這是條件約束。 列出與使用者指派身分識別相關聯的所有同盟身分識別認證,以尋找現有的同盟身分識別認證。 |
409 | 衝突 | 在相同使用者指派的身分識別下,對同盟身分識別認證資源的並行寫入要求遭到拒絕。 |