我有一个具有集成测试任务的Azure DevOps管道。任务运行时,测试需要访问特定的Azure KeyVault。我需要给出在DevOps中运行作业的原理,以便访问KeyVault。但是,我有点困惑工作的运行原理。
我尝试了以下方法,但是没有任何区别:
在Azure DevOps网站中,我转到:项目设置->服务连接->管理服务原理。然后,这会在Azure门户中为该原理加载一个页面。我采用了这一原则,并授予他们在KeyVaut服务中的读取权限,但是测试仍然失败,并显示相同的错误。
是否还有另一项实际上正在执行任务的原则(即我在错误的位置看),或者还有其他我没想到的东西?
作为参考,这是我得到的错误(出于安全原因,我替换了GUID):
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException : Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. Received a non-retryable error. MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/<SOME_GUID>. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. Please run 'az login' to setup account.
答案 0 :(得分:1)
如果服务连接未与任务中的管道关联,则测试代码无法访问您创建的服务连接。
1,作为解决方法,您可以尝试使用Azure Cli task中的命令执行测试。如下所示:将azureSubscription
设置为您创建的服务连接。 Azure Cli任务将使用服务连接中的身份验证连接到您的Azure订阅。该测试将在当前的Azure cli环境中运行。有关更多信息,请参见Authenticating with Azure CLI。
- task: AzureCLI@2
displayName: Azure CLI
inputs:
azureSubscription: <Name of the Azure service connection>
scriptLocation: inlineScript
inlineScript: |
dotnet test
2,您也可以Use a shared secret credential to sign into Azure AD。请参考以下步骤:
提供
connectionString
到AzureServiceTokenProvider
的构造函数,如下所示:
var azureServiceTokenProvider = new AzureServiceTokenProvider("connectionString=#{keyVaultEndpoint}#;RunAs=App;AppId=#{appId}#;TenantId=#{tenantId}#;AppKey=#{clientSecret}#")
在管道中定义
keyVaultEndpoint
,appId
,tenantId
,clientSecret
变量。添加replace token task,将
connectionString
中{AppId},{TenantId}和{ClientSecret}下面的变量替换为管道中的值。
3,您还可以尝试在本地计算机上创建self-hosted agent。并针对自己托管的代理运行您的管道。由于测试可以在本地正常运行,因此在本地计算机上的自托管代理上也可以正常运行。
希望上面有帮助!