【问题标题】:Unable to obtain azure key vault secret in ansible无法在 ansible 中获取 azure key vault secret
【发布时间】:2021-09-08 05:21:02
【问题描述】:

我尝试使用 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 ReaderKey Vault Secrets User

【问题讨论】:

    标签: azure ansible azure-keyvault ansible-collections


    【解决方案1】:

    我在我的环境中对其进行了测试,我的服务主体使用以下 yml 代码拥有 Key vault reader 和 Key vault secrets 用户。

    ---
    - 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

    【讨论】:

      【解决方案2】:

      原来这是身份验证的问题。 Ansible 正在通过 ssh 连接到我的远程机器,因此我需要为 azure 设置身份验证。我在我的 ansible playbook 中使用环境变量执行此操作,但事实证明,当 playbook 运行它的任务时它们没有设置。将它们显式传递给命令就可以了。

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        相关资源
        最近更新 更多