Ansible使用azcollection获取Azure Key Vault密钥失败如何解决?
问题根因
- 不加
name参数调用azure_rm_keyvaultsecret_info模块时,接口仅返回密钥库所有密钥的元数据,不会拉取每个密钥的明文值,所以返回结果中不存在secret字段,属于模块设计逻辑 - 指定
name后返回空结果通常和权限模型适配、参数匹配度、版本bug有关
解决步骤
- 调整模块调用参数
要获取单个密钥的明文值,必须明确指定密钥名称,正确调用示例如下:
- name: 获取指定密钥值 azure_rm_keyvaultsecret_info: vault_uri: https://my-vault.vault.azure.net/ name: ssh-user-username register: kvSecret
调用成功后即可通过kvSecret.secrets[0].secret拿到密钥明文。
- 适配Key Vault权限模型
- 如果你的密钥库使用的是RBAC权限模型,已授予的
Key Vault Secrets User角色已满足要求 - 如果你的密钥库使用的是经典Vault访问策略模型,IAM角色不会生效,需要在密钥库的「访问策略」配置页,单独为所用服务主体授予「密钥权限-获取」的权限
- 排查其他异常场景
- 检查指定的
name值和密钥库中存储的密钥名称完全一致,大小写、特殊字符不要有偏差 - 1.9.0版本的azcollection存在多个密钥获取相关的bug,如果升级无兼容问题,建议升级到1.10.0及以上版本
- 确认Ansible执行节点的IP已加入密钥库的防火墙白名单(如果开启了网络访问限制)
- 批量获取密钥值方案
如果需要批量拉取所有密钥的明文值,不能直接调用无name参数的接口,需要先通过无参数调用拿到所有密钥的名称列表,再循环调用带name参数的模块逐个拉取明文。
内容的提问来源于stack exchange,提问作者Christian Klemm
相关产品推荐
相关产品推荐

