无法使用服务主体从发布管道访问 Azure Devops Git 存储库

Posted

技术标签:

【中文标题】无法使用服务主体从发布管道访问 Azure Devops Git 存储库【英文标题】:Cannot access Azure Devops Git repo from release pipeline using Service Principal 【发布时间】:2019-11-21 10:21:21 【问题描述】:

我们正在为 Azure 资源创建 Terraform 模块;我们在项目中为每个模块提供了自己的 repo,但是当尝试在发布管道中调用模块时,我们会遇到超时或错误 128。

这作为具有部署权限的用户在管道之外工作,但是我们使用服务主体在发布管道中进行部署,它也具有正确的权限;看起来问题在于服务主体在 Azure DevOps 中没有任何权利。

我们最初尝试使用托管构建代理,但如果我们需要存储任何永久信息,我们刚刚部署了我们自己的私有代理。

模块“rg” source = "git::https://dev.azure.com/*****/Terraform/_git/azmodresourcegroup//module?ref=v1.0"

这看起来像是一个权利问题,但谁能指出我的解决方法?

错误是: C:\Program Files\Git\bin\git.exe exited with 128: Cloning into '.terraform\modules\

或长时间(30 分钟)超时。

【问题讨论】:

【参考方案1】:

再详细说明一下,引用托管在私有 AzureDevOps 存储库中的 terraform 模块/使用个人访问令牌进行身份验证。

module "example_module" 
    source = "git::https://INSERT_ORG_NAME:INSERT_TOKEN@dev.azure.com/INSERT_ORG_NAME/terraform_module/_git/terraform_module?ref=INSERT_TAG"

【讨论】:

为什么投反对票?这个答案比说我们在选择的“正确”答案中添加了“PAT”更有价值。【参考方案2】:

对于其他面临此问题的人,我们解决此问题的唯一方法是使用用户帐户中的 PAT;服务主体仍用于构建,但从具有项目权限的用户帐户添加 PAT 解决了这个问题,然后我们只是使用令牌替换来确保 PAT 没有最终出现在代码中。

【讨论】:

感谢您在这里分享您的解决方案,它可以帮助遇到同样问题的其他社区成员。【参考方案3】:

您可以考虑使用System.AccessToken。此预定义变量包含构建管道的访问令牌,并且未链接到用户。

您可以在构建期间读取令牌。

【讨论】:

以上是关于无法使用服务主体从发布管道访问 Azure Devops Git 存储库的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps 项目管道无法从不同项目中的工件源访问 NuGet 包

Azure Databricks 通过服务主体访问 Azure Data Lake Storage Gen2

如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户

源链接无法从私有 azure 符号服务器下载 nuget 的源文件,使用了错误的域 dev.azure.com/raw/

Azure - 使用服务主体对 Key Vault 进行身份验证返回未经授权的异常

Azure API 无法识别来自 Terraform 的服务主体