如何为Azure DevOps ARM服务连接授予Key Vault访问权限
解决Azure DevOps服务连接无法访问Key Vault的问题
不管你用的是服务主体还是工作负载身份联合类型的ARM服务连接,核心都是把服务连接对应的身份添加到Key Vault的权限控制体系中,以下是具体操作步骤:
一、先获取服务连接对应的身份ID
不管哪种认证方式,都需要先拿到服务连接关联的Azure AD身份的对象ID:
- 打开Azure DevOps项目,进入「项目设置」→「服务连接」,找到目标ARM服务连接,点击「编辑」。
- 服务主体类型:直接复制页面上的「服务主体ID」;
- 工作负载身份联合类型:复制「应用程序ID」,然后到Azure Portal的「Azure AD」→「应用注册」,搜索这个应用程序ID,进入后复制该应用的「对象ID」。
二、给Key Vault添加访问策略(默认权限模型)
- 打开Azure Portal,找到目标Key Vault,进入「访问策略」→「创建」;
- 在「主体」步骤,点击「无选择」,在搜索框粘贴刚才复制的对象ID,选中对应的身份;
- 根据预填充密钥的需求,勾选对应的权限:比如密钥的「获取」「列出」「设置」,机密的「获取」「列出」「设置」等;
- 完成后续步骤,保存访问策略。
三、若Key Vault启用了RBAC权限模型
如果你的Key Vault用的是Azure RBAC权限模型(而非默认的访问策略),则需要给服务连接对应的身份分配Key Vault相关角色:
- 进入Key Vault的「访问控制(IAM)」→「添加」→「添加角色分配」;
- 选择合适的角色:比如「Key Vault Secrets Officer」(可管理密钥/机密)、「Key Vault Contributor」(全权限)等;
- 在「成员」步骤,粘贴身份的对象ID搜索并选中,完成角色分配。
四、ARM模板中直接配置(推荐自动化部署)
如果是通过ARM模板创建Key Vault,可直接在模板中嵌入访问策略配置,避免手动操作:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "keyVaultName": { "type": "string" }, "location": { "type": "string" }, "servicePrincipalObjectId": { "type": "string" } }, "resources": [ { "type": "Microsoft.KeyVault/vaults", "apiVersion": "2023-02-01", "name": "[parameters('keyVaultName')]", "location": "[parameters('location')]", "properties": { "sku": { "family": "A", "name": "standard" }, "tenantId": "[subscription().tenantId]", "accessPolicies": [ { "objectId": "[parameters('servicePrincipalObjectId')]", "tenantId": "[subscription().tenantId]", "permissions": { "keys": ["get", "list", "set"], "secrets": ["get", "list", "set"], "certificates": [] } } ], "enabledForTemplateDeployment": true } } ] }
部署时传入服务主体的对象ID参数,即可在创建Key Vault的同时配置好访问权限。
内容的提问来源于stack exchange,提问作者Jeppe
相关产品推荐
相关产品推荐

