无法在 ansible 中获取 azure key vault secret
Unable to obtain azure key vault secret in ansible
我尝试使用 azcollection 1.9.0.
从我的 ansible 4 剧本中的 azure key vault 获取秘密
- name: Get secret value
azure_rm_keyvaultsecret_info:
vault_uri: https://my-vault.vault.azure.net/
register: kvSecret
根据 docs,结果应包含机密列表,其中 属性 称为 secret
,其中包含机密值。
但是,结果集中不存在此 属性。这是我得到的结果:
{
"changed": False,
"secrets": [
{
"sid": "https: //my-vault.vault.azure.net/secrets/ssh-user-username",
"version": "",
"tags": {},
"attributes": {
"enabled": True,
"not_before": None,
"expires": None,
"created": "2021-09-05T14:32:10+00:00",
"updated": "2021-09-05T14:32:10+00:00",
"recovery_level": "Recoverable+Purgeable"
}
}
],
"failed": False
}
如果我尝试使用 name
选项获取这个确切的秘密,我会得到一个空的结果集。
我的保管库包含这个秘密,它有一个值,服务主体可以通过 IAM 使用角色 Key Vault Reader
和 Key Vault Secrets User
.
访问我的密钥保管库
我在我的环境中对其进行了测试,我的服务主体拥有 Key vault reader 并且 Key vault 使用以下 yml 代码对用户进行保密。
---
- hosts: localhost
connection: local
collections:
- azure.azcollection
vars:
vault_name: Testansumankeyvault01
secret_name: adminPassword
tasks:
- name: Get Key Vault by name
azure_rm_keyvault_info:
resource_group: test-rg
name: "{{ vault_name }}"
register: keyvault
- name: Set key vault URI fact
set_fact: keyvaulturi="{{ keyvault['keyvaults'][0]['vault_uri'] }}"
- name: Get secret value
azure_rm_keyvaultsecret_info:
vault_uri: "{{ keyvaulturi }}"
name: "{{ secret_name }}"
register: kvSecret
- name: set secret fact
set_fact: secretValue="{{ kvSecret['secrets'][0]['secret'] }}"
- name: Output key vault secret
debug:
msg="{{ secretValue }}"
参考:
Azure built-in roles - Azure RBAC | Microsoft Docs
Use Azure Key Vault to store VM secrets with Ansible | Microsoft Docs
原来这是身份验证的问题。 Ansible 正在通过 ssh 连接到我的远程机器,因此我需要为 azure 设置身份验证。我在我的 ansible 剧本中使用环境变量来执行此操作,但事实证明当剧本运行它的任务时它们没有设置。将它们显式传递给命令就可以了。
我尝试使用 azcollection 1.9.0.
从我的 ansible 4 剧本中的 azure key vault 获取秘密- name: Get secret value
azure_rm_keyvaultsecret_info:
vault_uri: https://my-vault.vault.azure.net/
register: kvSecret
根据 docs,结果应包含机密列表,其中 属性 称为 secret
,其中包含机密值。
但是,结果集中不存在此 属性。这是我得到的结果:
{
"changed": False,
"secrets": [
{
"sid": "https: //my-vault.vault.azure.net/secrets/ssh-user-username",
"version": "",
"tags": {},
"attributes": {
"enabled": True,
"not_before": None,
"expires": None,
"created": "2021-09-05T14:32:10+00:00",
"updated": "2021-09-05T14:32:10+00:00",
"recovery_level": "Recoverable+Purgeable"
}
}
],
"failed": False
}
如果我尝试使用 name
选项获取这个确切的秘密,我会得到一个空的结果集。
我的保管库包含这个秘密,它有一个值,服务主体可以通过 IAM 使用角色 Key Vault Reader
和 Key Vault Secrets User
.
我在我的环境中对其进行了测试,我的服务主体拥有 Key vault reader 并且 Key vault 使用以下 yml 代码对用户进行保密。
---
- hosts: localhost
connection: local
collections:
- azure.azcollection
vars:
vault_name: Testansumankeyvault01
secret_name: adminPassword
tasks:
- name: Get Key Vault by name
azure_rm_keyvault_info:
resource_group: test-rg
name: "{{ vault_name }}"
register: keyvault
- name: Set key vault URI fact
set_fact: keyvaulturi="{{ keyvault['keyvaults'][0]['vault_uri'] }}"
- name: Get secret value
azure_rm_keyvaultsecret_info:
vault_uri: "{{ keyvaulturi }}"
name: "{{ secret_name }}"
register: kvSecret
- name: set secret fact
set_fact: secretValue="{{ kvSecret['secrets'][0]['secret'] }}"
- name: Output key vault secret
debug:
msg="{{ secretValue }}"
参考:
Azure built-in roles - Azure RBAC | Microsoft Docs
Use Azure Key Vault to store VM secrets with Ansible | Microsoft Docs
原来这是身份验证的问题。 Ansible 正在通过 ssh 连接到我的远程机器,因此我需要为 azure 设置身份验证。我在我的 ansible 剧本中使用环境变量来执行此操作,但事实证明当剧本运行它的任务时它们没有设置。将它们显式传递给命令就可以了。