目标:
通过标记从 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 上,让我使用我自己的访问权限来进行这个查询”?
答案 0 :(得分:2)
为了让管道中的管道/任务访问 Azure 资源,您需要某种类型的服务主体,该服务主体对您希望查询的 Azure 资源具有权限。
在 Azure DevOps 中,这通常通过在项目设置中创建服务连接来完成。服务连接将使用 Azure AD 服务主体进行配置,您的管道将引用服务连接来访问服务主体的凭据。服务连接为您保护 SP 的凭据(取消选中授予所有管道的访问权限以要求您获得使用服务连接的许可)。
当您选择 Azure RM 连接类型时,DevOps 中的服务连接创建对话框将为您提供创建新服务主体的选项——您可以执行此操作,前提是您有权限并且对正在创建的 SP 没有问题在您指定的范围内具有贡献者角色;或者(更好的做法),创建一个独立于 Azure DevOps 的新 SP,仅为其分配所需的权限,然后手动将 SP 的详细信息输入到服务连接创建对话框中。
要手动创建服务主体,一种快速的方法是使用 Azure CLI 和命令 az ad sp create-for-rbac -n <yourSPName> --skip-assignment
,然后使用门户或 CLI 向 SP 授予必要的权限。