我们正在尝试使用VSTS中的 download key vault secrets 发布任务下载机密 .
服务主体是添加密钥保险库的访问策略,检查所有权限,包括获取,列出机密 .
我使用此服务主体创建了一个服务 endpoints ,并使用它来部署到Azure,但在尝试检索keyvault秘密时,我得到了 error :
2018-05-21T12:18:53.9240364Z ## [错误]获取机密失败 . 错误:访问被拒绝 . 指定的Azure endpoints 需要在所选密钥保管库上具有Get,List秘密管理权限 . 要设置这些权限,请从构建/发布日志下载ProvisionKeyVaultPermissions.ps1脚本并执行它,或者从Azure门户设置它们 .
3 回答
0)转到变量库
1)勾选
Link secrets from an Azure key vault as variables
2)选择订阅
3)选择密钥保险库
4)点击
Authorize
ACL将由MS完成,您将能够使用密钥保险库任务 .
我确定在任务中选择密钥保险库时,曾经有一个
Authorize
按钮,但我可能会错过记忆 . 刚下沉2小时就搞清楚了......跟踪问题here
您需要为 correct principal selected 设置预先设置 . 并且主要格式为:
Deatil设置权限的步骤如下:
在Azure protal中 - >转到Azure密钥保管库 - >访问策略 - >添加新 - >选择tem plate并选择预设(必须设置Get和Listpermission) - >选择主体 - >使用
account-VSTSProjectName
搜索主体开头(例如我的VSTS项目名称是MyTest
,如下例所示) - >选择 - >确定 .然后再次在VSTS版本中部署,它可以成功下载Azure密钥库 .
如果打开防火墙(防火墙和虚拟网络页面上的“允许访问...”),Dev Ops服务器还需要能够通过防火墙访问密钥保险库 .
对变量的keyvault的网络访问是通过AzDevOps的非代理部分完成的,我相信但是我还没想出如何将这些服务器列入白名单 .
打开"Allow trusted Microsoft services to byass this firewall" did not work .
我现在必须允许“所有网络”的访问才能解决这个问题,这是最简单的解决方案 .
使用代理任务而不是变量组的另一个 safer 选项是..
在Azure VM中拥有自己的代理池
要么......
将此连接到专用vnet,该vnet也连接到KeyVault或...
将代理程序的公共 endpoints 列入密钥保险库中
使用KayVault任务在代理程序进程中读取keyvault秘密中的变量(即将秘密作为管道的一部分读取) .
希望这可以帮助 . 标记 .