Red Hat Training

A Red Hat training course is available for RHEL 8

66.5. 在使用 Ansible 泄露时更改 IdM 服务 vault secret

本节介绍当服务实例遭入侵时,身份管理(IdM)管理员可以如何重复利用 Ansible playbook 来更改服务库中存储的机密。以下示例中的情景假定 onwebserver3.idm.example.com 检索到的机密已被破坏,而不是存储该机密的非对称库的密钥。在示例中,管理员重复利用在非对称密码库中存储机密时使用的 Ansible playbook,并将 机密从非对称密码库检索到 IdM 主机。在流程开始时,IdM 管理员使用非对称密码库中的新 secret 存储一个新的 PEM 文件,调整清单文件,而不检索到被入侵的 Web 服务器 webserver3.idm.example.com,然后重新运行这两个程序。

先决条件

  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
  • 您知道 IdM 管理员密码
  • 您已创建了用于存储服务机密的非对称密码库
  • 您已为在 IdM 主机上运行的 web 服务生成了新的 httpd 密钥,以替换泄露的旧密钥。
  • 新的 httpd 密钥存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。

流程

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

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. 打开清单文件,并确保正确定义了以下主机:

    • [ipaserver] 部分中的 IdM 服务器。
    • 要检索 [webservers] 部分中的机密的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com 和webserver2.idm.example.com 的 secret,请输入:

      [ipaserver]
      server.idm.example.com
      
      [webservers]
      webserver1.idm.example.com
      webserver2.idm.example.com
    重要

    确保列表不包含当前 examplewebserver3.idm.example.com 中被入侵的 web 服务器。

  3. 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
  4. 通过在 ipavault 任务部分设置以下变量来修改该文件:

    • ipaadmin_password 变量设置为 IdM 管理员密码。
    • name 变量设置为 vault 的名称,如 secret_vault
    • service 变量设置为密码库的服务所有者,如 HTTP/webserver.idm.example.com
    • 中的变量 设置为 "{{ lookup('file', 'new-private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索 文件,而不是从 IdM 服务器检索。
    • action 变量设置为 member

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

    ---
    - name: Tests
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      - ipavault:
          ipaadmin_password: Secret123
          name: secret_vault
          service: HTTP/webserver.idm.example.com
          in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  5. 保存该文件。
  6. 运行 playbook:

    $ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  7. 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
  8. 通过在 ipavault 任务部分设置以下变量来修改该文件:

    • ipaadmin_password 变量设置为 IdM 管理员密码。
    • name 变量设置为 vault 的名称,如 secret_vault
    • service 变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com
    • private_key_file 变量设置为用于检索服务 vault secret 的私钥的位置。
    • 变量 设置为 IdM 服务器上您要检索 new-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: new-private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  9. 在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:

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

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

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

其它资源

  • 有关使用 Ansible 管理 IdM vaults 和服务 secret 以及 playbook 变量的更多信息,请参阅 /usr/share/doc/ansible-freeipa/ 目录中提供的 README- vault.md Markdown 文件和 /usr/share/doc/ansible-freeipa/playbooks/vault/ 目录中的示例 playbook。