首页 文章

无法通过VSTS版本中的服务 endpoints 访问keyvault机密

提问于
浏览
5

我们正在尝试使用VSTS中的 download key vault secrets 发布任务下载机密 .

服务主体是添加密钥保险库的访问策略,检查所有权限,包括获取,列出机密 .

我使用此服务主体创建了一个服务 endpoints ,并使用它来部署到Azure,但在尝试检索keyvault秘密时,我得到了 error

2018-05-21T12:18:53.9240364Z ## [错误]获取机密失败 . 错误:访问被拒绝 . 指定的Azure endpoints 需要在所选密钥保管库上具有Get,List秘密管理权限 . 要设置这些权限,请从构建/发布日志下载ProvisionKeyVaultPermissions.ps1脚本并执行它,或者从Azure门户设置它们 .

3 回答

  • 2

    0)转到变量库

    1)勾选 Link secrets from an Azure key vault as variables

    2)选择订阅

    3)选择密钥保险库

    4)点击 Authorize

    ACL将由MS完成,您将能够使用密钥保险库任务 .

    我确定在任务中选择密钥保险库时,曾经有一个 Authorize 按钮,但我可能会错过记忆 . 刚下沉2小时就搞清楚了......

    enter image description here

    跟踪问题here

  • 1

    您需要为 correct principal selected 设置预先设置 . 并且主要格式为:

    account-<VSTS project name you are build/deploy>-ID
    

    Deatil设置权限的步骤如下:

    在Azure protal中 - >转到Azure密钥保管库 - >访问策略 - >添加新 - >选择tem plate并选择预设(必须设置Get和Listpermission) - >选择主体 - >使用 account-VSTSProjectName 搜索主体开头(例如我的VSTS项目名称是 MyTest ,如下例所示) - >选择 - >确定 .

    enter image description here

    然后再次在VSTS版本中部署,它可以成功下载Azure密钥库 .

  • 1

    如果打开防火墙(防火墙和虚拟网络页面上的“允许访问...”),Dev Ops服务器还需要能够通过防火墙访问密钥保险库 .

    对变量的keyvault的网络访问是通过AzDevOps的非代理部分完成的,我相信但是我还没想出如何将这些服务器列入白名单 .

    打开"Allow trusted Microsoft services to byass this firewall" did not work .

    我现在必须允许“所有网络”的访问才能解决这个问题,这是最简单的解决方案 .

    使用代理任务而不是变量组的另一个 safer 选项是..

    • 在Azure VM中拥有自己的代理池

    • 要么......

    • 将此连接到专用vnet,该vnet也连接到KeyVault或...

    • 将代理程序的公共 endpoints 列入密钥保险库中

    • 使用KayVault任务在代理程序进程中读取keyvault秘密中的变量(即将秘密作为管道的一部分读取) .

    希望这可以帮助 . 标记 .

相关问题