針對 Azure Resource Manager 工作負載身分識別服務連線進行疑難解答
取得協助偵錯工作負載身分識別服務連線的常見問題。 您也可以瞭解如何視需要手動建立服務連線。
疑難排解檢查清單
使用下列檢查清單針對工作負載身分識別服務連線的問題進行疑難解答:
- 檢閱管線工作,以確保它們支援工作負載身分識別。
- 確認租使用者的工作負載身分識別同盟為作用中。
- 請檢查簽發者 URL 和同盟主體,以取得正確性。
下列各節說明問題以及如何解決這些問題。
檢閱管線工作
並非所有管線工作都支援工作負載身分識別。 具體而言,只有工作上的 Azure Resource Manager 服務連線屬性會使用工作負載身分識別同盟。 下表列出 Azure DevOps 隨附工作的工作負載身分識別同盟支援。 若為從市集安裝的工作,請連絡延伸項目發行者取得支援。
Task | 工作負載身分識別同盟支援 |
---|---|
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 | 搭配 Azure 服務連線使用PublishToAzureServiceBus@2 |
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,從而修正簽發者 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)。 |
腳本失敗,發生錯誤:無法辨識的ArgumentError:無法辨識的自變數: --federated-token | 您在已安裝舊版 Azure CLI 的代理程式上使用 AzureCLI 工作。 工作負載身分識別同盟需要 Azure CLI 2.30 或更新版本。 |
無法在 entra 識別碼Microsoft中建立應用程式。 錯誤:許可權不足,無法完成 Microsoft Graph 中的作業。 確定使用者具有建立Microsoft Entra 應用程式的許可權。 | Microsoft Entra 租使用者中已停用建立應用程式註冊的功能。 指派正在建立服務連線的使用者應用程式 開發人員 Microsoft Entra 角色。 或者,使用受控識別手動建立服務連線。 如需詳細資訊,請參閱<使用受控識別的工作負載身分識別> (機器翻譯)。 |
您是否看到上述未列出的 AADSTS 錯誤? 檢查 Microsoft Entra 驗證和授權錯誤碼。