Red Hat Training

A Red Hat training course is available for RHEL 8

66.4. 使用 Ansible 为 IdM 服务检索服务 secret

本节演示身份管理(IdM)用户如何使用 Ansible playbook 代表服务从服务库检索机密。在以下流程中使用的示例中,运行 playbook 从名为 secret _vault 的非对称库检索带有 secretPEM 文件,并将它存储在 Ansible 清单文件中列出的所有主机上的指定位置,存为 ipaservers

服务使用 keytabs 验证 IdM,并使用私钥与密码库进行身份验证。您可以代表 服务从安装 ansible-freeipa 的任何 IdM 客户端检索 文件。

先决条件

流程

  1. 导航到 /usr/share/doc/ansible-freeipa/playbooks/vault 目录:

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. 可选:创建一个清单文件(如果 inventory.file )不存在。

    $ touch inventory.file
  3. 打开清单文件并定义以下主机:

    • [ipaserver] 部分中定义您的 IdM 服务器。
    • [webservers] 部分中定义要检索机密的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com、webserver2.idm.example.com 和webserver3.idm.example.com 的 secret,请输入:
    [ipaserver]
    server.idm.example.com
    
    [webservers]
    webserver1.idm.example.com
    webserver2.idm.example.com
    webserver3.idm.example.com
  4. 生成 retrieve-data-asymmetric-vault.yml Ansible playbook 文件的副本。例如:

    $ cp retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
  5. 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
  6. 通过在 ipavault 任务部分设置以下变量来修改该文件:

    • ipaadmin_password 变量设置为 IdM 管理员密码。
    • name 变量设置为 vault 的名称,如 secret_vault
    • service 变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com
    • private_key_file 变量设置为用于检索服务 vault secret 的私钥的位置。
    • 变量 设置为 IdM 服务器上您要检索 private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。
    • action 变量设置为 member

      对于当前示例,此修改过的 Ansible playbook 文件:

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      tasks:
      - name: Retrieve data from the service vault
        ipavault:
          ipaadmin_password: Secret123
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  7. 在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: yes
          mode: 0600
  8. 在 playbook 中添加一个部分,它将检索到的 private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的 webservers 部分:

    ---
    - name: Send data file to webservers
      become: no
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  9. 保存该文件。
  10. 运行 playbook:

    $ ansible-playbook -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml