針對 Azure Resource Manager 的工作負載身份識別服務連接進行故障排除
取得協助偵錯工作負載身分識別服務連線的常見問題。 您也可以瞭解如何視需要手動建立服務連線。
疑難排解檢查清單
使用以下檢查清單來解決工作負載身分識別服務連線問題的疑難:
- 檢閱管線工作,以確保它們支援工作負載身分識別。
- 確認租戶的工作負載身分識別聯盟已啟用。
- 請檢查簽發者 URL 和同盟主體以確保其正確性。
下列各節說明問題以及如何解決這些問題。
檢閱管線工作
並非所有管線工作都支援工作負載身份識別。 具體而言,只有任務上的 Azure Resource Manager 服務連線屬性會使用工作負載身分識別同盟。 下表列出 Azure DevOps 包含的任務的工作負載身分識別同盟支援。 若為從市集安裝的任務,請聯絡延伸項目發行者以獲得支援。
任務 | 工作負載身份驗證聯盟支援 |
---|---|
AutomatedAnalysis@0 | Y |
AzureAppServiceManage@0 | Y |
AzureAppServiceSettings@1 | Y |
AzureCLI@1 | Y |
AzureCLI@2 | Y |
AzureCloudPowerShellDeployment@1 | 使用AzureCloudPowerShellDeployment@2 |
AzureCloudPowerShellDeployment@2 | Y |
AzureContainerApps@0 | Y |
AzureContainerApps@1 | Y |
AzureFileCopy@1 | 使用AzureFileCopy@6 |
AzureFileCopy@2 | 使用AzureFileCopy@6 |
AzureFileCopy@3 | 使用AzureFileCopy@6 |
AzureFileCopy@4 | 使用AzureFileCopy@6 |
AzureFileCopy@5 | 使用AzureFileCopy@6 |
AzureFileCopy@6 | Y |
AzureFunctionApp@1 | Y |
AzureFunctionApp@2 | Y |
AzureFunctionAppContainer@1 | Y |
AzureFunctionOnKubernetes@0 | 使用AzureFunctionOnKubernetes@1 |
AzureFunctionOnKubernetes@1 | Y |
AzureIoTEdge@2 | Y |
AzureKeyVault@1 | Y |
AzureKeyVault@2 | Y |
AzureMonitor@0 | 使用AzureMonitor@1 |
AzureMonitor@1 | Y |
AzureMysqlDeployment@1 | Y |
AzureNLBManagement@1 | 否 |
AzurePolicyCheckGate@0 | Y |
AzurePowerShell@2 | Y |
AzurePowerShell@3 | Y |
AzurePowerShell@4 | Y |
AzurePowerShell@5 | Y |
AzureResourceGroupDeployment@2 | Y |
AzureResourceManagerTemplateDeployment@3 | Y |
AzureRmWebAppDeployment@3 | Y |
AzureRmWebAppDeployment@4 | Y |
AzureSpringCloud@0 | Y |
AzureVmssDeployment@0 | Y |
AzureWebApp@1 | Y |
AzureWebAppContainer@1 | Y |
ContainerBuild@0 | Y |
ContainerStructureTest@0 | Y |
Docker@0 | Y |
Docker@1 | Azure 服務連線:Y Docker 登錄服務連線:N |
Docker@2 | Y |
DockerCompose@0 | Y |
DockerCompose@1 | Y |
DotNetCoreCLI@2 | Y |
HelmDeploy@0 | Azure 服務連線:Y |
HelmDeploy@1 | Azure 服務連線:Y |
InvokeRESTAPI@1 | Y |
JavaToolInstaller@0 | Y |
JenkinsDownloadArtifacts@1 | Y |
Kubernetes@0 | 使用Kubernetes@1 |
Kubernetes@1 | Y |
KubernetesManifest@0 | 使用KubernetesManifest@1 |
KubernetesManifest@1 | Y |
Maven@4 | Y |
Notation@0 | Y |
PackerBuild@0 | 使用PackerBuild@1 |
PackerBuild@1 | Y |
PublishToAzureServiceBus@1 | 使用 PublishToAzureServiceBus@2 並透過 Azure 服務連線 |
PublishToAzureServiceBus@2 | Y |
ServiceFabricComposeDeploy@0 | 否 |
ServiceFabricDeploy@1 | 否 |
SqlAzureDacpacDeployment@1 | Y |
VSTest@3 | Y |
確認工作負載身分識別聯盟處於啟用狀態
如果您看到錯誤訊息 AADSTS700223 或 AADSTS700238,則在您的 Microsoft Entra 租使用者中已停用工作負載身分識別聯盟。
驗證是否沒有會封鎖同盟認證的任何 Microsoft Entra 原則。
檢查簽發者 URL 是否正確
如果您看到訊息指出 找不到相符的同盟身分識別記錄,則簽發者 URL 或同盟主體不相符。 正確的簽發者 URL 開頭為 https://vstoken.dev.azure.com
。
您可以透過編輯並儲存服務連線來更新簽發者 URL。 如果 Azure DevOps 並未建立身分識別,則必須手動更新簽發者 URL。 在 Azure 身分識別中,簽發者 URL 會自動更新。
常見問題
下一節會識別常見問題,並描述原因和解決方式。
我不具備在 Microsoft Entra 租用戶中建立服務主體的權限
如果不具備正確的權限,就無法使用 Azure DevOps 服務連線組態工具。 如果您不具備可以建立服務主體的權限,或者使用了不同於 Azure DevOps 使用者的 Microsoft Entra 租用戶,則您的權限等級不足以使用此工具。
必須具備在 Microsoft Entra ID 中建立應用程式註冊的權限,或具備適當的角色 (例如應用程式開發人員)。
若要解決問題,您有兩個選項:
錯誤訊息
下表列出了可能產生這些錯誤訊息的常見問題:
訊息 | 可能的問題 |
---|---|
無法要求憑證:取得 ?audience=api://AzureADTokenExchange: unsupported protocol scheme |
此任務不支援工作負載身份聯邦身份認證。 |
找不到身分識別 | 任務不支援工作負載身分識別聯邦。 |
無法擷取 Azure 的存取令牌 | 該任務不支援工作負載身分識別聯盟。 |
AADSTS700016:找不到標識符為 '****' 的應用程式 | 用於服務連線的身分識別已不存在、可能已從服務連線中移除或設定不正確。 如果您使用預先建立的身分識別手動設定服務連線,請確定 appID /clientId 已正確設定 。 |
AADSTS7000215:提供的客戶端密碼無效。 | 您使用的服務連線其憑證已經過期。 將服務連線轉換為工作負載身分識別同盟 ,並以同盟認證取代過期的秘密。 |
AADSTS700024:用戶端宣告不在有效的時間範圍內 | 如果錯誤發生在大約 1 小時後,請改為使用 工作負載身分識別聯盟和受控識別 的服務連線。 受控識別令牌的 存留期約為24小時。 如果錯誤發生在 1 小時前,但在 10 分鐘之後,請移動命令,以隱含方式要求存取令牌,例如將 Azure 記憶體存取至腳本的開頭。 存取令牌將會被快取以供後續命令使用。 |
AADSTS70021:找不到與提供的聲明相符的聯邦身分識別記錄。 聲明發行者:https://app.vstoken.visualstudio.com 。 |
未建立同盟認證,或簽發者 URL 不正確。 正確的簽發者 URL 格式 https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 為 。 您可以透過編輯並儲存服務連線來修正簽發者 URL。 如果 Azure DevOps 未建立您的身分識別,您必須手動更新簽發者。 如果您使用 REST API,您可以在服務連線的編輯對話框中,或在回應中(在授權參數下)找到正確的簽發者。 |
AADSTS70021:找不到與提供的宣告相符的同盟身分識別記錄。 斷言發行者:https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 。 斷言主題: sc://<org>/<project>/<service-connection>. |
簽發者 URL 或聯盟主體不一致。 Azure DevOps 組織或專案已重新命名,或手動建立的服務連線已重新命名,而不會更新身分識別上的同盟主旨。 |
AADSTS700211:找不到提供的聲明簽發者的相符同盟身份記錄 | 未建立同盟認證,或簽發者 URL 不正確。 |
AADSTS700213:找不到與提供的宣告主體相符的聯邦身分識別記錄 | 未建立聯邦憑證,或主體不正確。 |
AADSTS700223 | 工作負載身分識別同盟在 Microsoft Entra 租使用者上受到限制或停用。 在此案例中,可能會改用同盟的受控識別。 如需更多訊息,請參閱使用受控識別的工作負載身分識別。 |
AADSTS70025:用戶端應用程式未設定同盟身分識別認證 | 請確定已在應用程式註冊或受控識別上設定同盟認證。 |
Microsoft Entra 拒絕 Azure DevOps 所發出的令牌,錯誤碼 AADSTS700238 | 工作負載身分識別聯邦在 Microsoft Entra 租使用者中已被限制。 貴組織的簽發者 (https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ) 不允許使用工作負載身分識別同盟。 請求您的 Microsoft Entra 租戶系統管理員或管理團隊允許您的 Azure DevOps 組織使用工作負載身份聯邦。 |
AADSTS900382:跨雲端不支援機密用戶端 | 某些主權雲端會封鎖工作負載身分識別同盟。 |
無法使用服務主體用戶端識別碼取得 JSON Web 令牌 (JWT) | 您的同盟身份認證憑證設定不正確,或 Microsoft Entra 租用戶封鎖 OpenID Connect (OIDC)。 |
執行腳本失敗,出現錯誤:UnrecognizedArgumentError:無法辨識的參數: --federated-token | 您在已安裝舊版 Azure CLI 的代理程式上使用 AzureCLI 工作。 工作負載身分識別同盟需要 Azure CLI 2.30 或更新版本。 |
無法在 Microsoft Entra ID 中建立應用程式。 錯誤:許可權不足,無法完成 Microsoft Graph 中的作業。 確定使用者具有建立Microsoft Entra 應用程式的許可權。 | Microsoft Entra 租使用者中已停用建立應用程式註冊的功能。 將正在建立服務連線的使用者指派為 應用程式開發人員 Microsoft Entra 角色。 或者,使用受控識別手動建立服務連線。 如需更多資訊,請參閱受管理身分識別的工作負載身分識別。 |
您所看到的 AADSTS 錯誤是否沒有列在上面? 檢查 Microsoft Entra 驗證和授權錯誤碼。