You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否让Azure Pipeline Agent访问采用RBAC授权的Azure KeyVault?

问题描述

我给开发环境配置了采用RBAC(而非访问策略)授权的Azure KeyVault,本地代理的流水线能通过服务主体正常访问该KeyVault,但使用Azure代理访问时出现以下错误:

{"error":{"code":"Forbidden","message":"Client address is not authorized and caller is not a trusted service.\r\nClient address: XXX.XXX.XXX.XXX\r\nCaller: appid=REDACTED;oid=REDACTED;iss=https://sts.windows.net/REDACTED/\r\nVault: MY-KEYVAULT;location=REDACTED","innererror":{"code":"ForbiddenByFirewall"}}}

查阅官方入门指南时看到明确标注:

Note:
Azure Key Vaults that use Azure role-based access control (Azure RBAC) are not supported.

请问是否存在配置方法,能让Azure Pipeline Agent访问采用RBAC设置的KeyVault?

解决方案

可以通过以下两种可行方案实现:

方案一:配置KeyVault防火墙允许Azure DevOps服务IP

  1. 进入Azure门户的KeyVault「网络」设置页,选择「允许从特定虚拟网络和IP地址访问」。
  2. 添加Azure DevOps服务所在区域的IP地址段(可从Azure官方IP范围列表中获取对应区域的DevOps服务IP)。
  3. 确认Azure Pipeline使用的服务主体已被分配KeyVault的RBAC权限,比如Key Vault Secrets User或Key Vault Reader角色。

方案二:使用Azure CLI/PowerShell结合托管标识(推荐)

官方文档提到的「不支持」仅针对内置的Azure Key Vault任务,通过CLI或PowerShell任务可以绕开这个限制:

  1. 为Azure DevOps组织启用系统托管标识,或为目标流水线创建用户托管标识。
  2. 给该托管标识分配KeyVault的RBAC权限(如Key Vault Secrets User)。
  3. 在流水线中使用Azure CLI任务直接读取密钥,示例YAML:
- task: AzureCLI@2
  inputs:
    azureSubscription: '你的Azure服务连接'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      $secretValue = az keyvault secret show --name "目标密钥名称" --vault-name "MY-KEYVAULT" --query "value" -o tsv
      echo "##vso[task.setvariable variable=SecretValue;issecret=true]$secretValue"

这种方式既符合RBAC的权限模型,又能避免防火墙限制(托管标识访问时可通过信任服务规则放行)。

内容的提问来源于stack exchange,提问作者jarodsmk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:13:33