0

目标:

从 Azure 管道按标记安全地获取 Azure 资源。

细节:

我有一个azure-pipelines.yaml构建静态网站并将其保存到硬编码的存储帐户。这是一个安全漏洞。

我现在需要更新文件以处理蓝绿部署,azure-pipelines.yaml需要获取标记为当前生产存储帐户的存储帐户,即类似于(只是一个 bash 脚本)

prod_storage_acct_name=$(az resource list --is_prod=true --query [0].name)

这可行,但是,它需要一个先验az login -u $un -p $pwd,我与我的用户一起测试。显然我不会把我的个人用户放在管道中,所以问题是......

问题:

  1. 让 Azure 管道访问另一个资源的最佳方式是服务主体帐户吗?
  2. 管道是否有一些内置方式来配置其访问权限而无需指定不同的服务主体,因为它们是“内置”Azure 进程?(在 Azure DevOps Powershell 管道任务中获取自己的服务主体名称似乎暗示内置了服务主体)
  3. 有没有更好的方法来做到这一点,我完全错过了?

如果我需要使用#1,这里最好的安全实践是什么?我是否只是将服务主体密码放入密钥库并在构建脚本中引用它?


也许是一种直观的提问方式:有什么方法可以基本上说“我是一个管道,我住在 Azure 上,让我使用我自己的访问权限进行此查询”?

4

1 回答 1

2

为了让管道中的管道/任务能够访问 Azure 资源,您将需要某种类型的服务主体,该主体对您希望查询的 Azure 资源具有权限。

在 Azure DevOps 中,这通常通过在项目设置中创建服务连接来完成。服务连接将使用 Azure AD 服务主体进行配置,您的管道将引用服务连接来访问服务主体的凭据。服务连接为您保护您的 SP 凭据(取消选中授予对所有管道的访问权限以要求您获得使用服务连接的权限)。

当您选择 Azure RM 连接类型时,DevOps 中的“服务连接创建”对话框将为您提供创建新服务主体的选项 - 如果您有权限并且可以通过贡献者创建 SP,您可以执行此操作您指定的范围内的角色;或者(和更好的做法),创建一个与 Azure DevOps 分开的新 SP,只为其分配您需要的权限,然后在“服务连接创建”对话框中手动输入 SP 的详细信息。

要手动创建服务主体,一种快速的方法是使用 Azure CLI 和 command az ad sp create-for-rbac -n <yourSPName> --skip-assignment,然后使用 Portal 或 CLI 向 SP 授予必要的权限。

于 2021-02-11T20:35:02.333 回答