Red Hat Training

A Red Hat training course is available for RHEL 8

56.5. Cambiar el secreto de la bóveda de un servicio IdM cuando está comprometido usando Ansible

Esta sección muestra cómo un administrador de Gestión de Identidades (IdM) puede reutilizar un libro de jugadas de Ansible para cambiar el secreto almacenado en una bóveda de servicio cuando una instancia de servicio ha sido comprometida. El escenario en el siguiente ejemplo asume que en webserver3.idm.example.com, el secreto recuperado ha sido comprometido, pero no la clave de la bóveda asimétrica que almacena el secreto. En el ejemplo, el administrador reutiliza los playbooks de Ansible utilizados cuando se almacena un secreto en una bóveda asimétrica y se recupera un secreto de la bóveda asimétrica en los hosts de IdM. Al comienzo del procedimiento, el administrador de IdM almacena un nuevo archivo PEM con un nuevo secreto en la bóveda asimétrica, adapta el archivo de inventario para no recuperar el nuevo secreto en el servidor web comprometido, webserver3.idm.example.com, y luego vuelve a ejecutar los dos procedimientos.

Requisitos previos

  • Ha instalado el paquete ansible-freeipa en el controlador de Ansible. Este es el host en el que se ejecutan los pasos del procedimiento.
  • Ya conoces la contraseña de IdM administrator.
  • Ha creado una bóveda asimétrica para almacenar el secreto de servicio.
  • Ha generado una nueva clave httpd para los servicios web que se ejecutan en los hosts de IdM para sustituir la antigua clave comprometida.
  • La nueva clave httpd se almacena localmente en el controlador Ansible, por ejemplo en el archivo /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-signed-certificate.pem.

Procedimiento

  1. Navegue hasta el directorio /usr/share/doc/ansible-freeipa/playbooks/vault:

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Abra su archivo de inventario y compruebe que el servidor IdM que desea configurar está definido correctamente en la sección [ipaserver]. Por ejemplo, para indicar a Ansible que configure server.idm.example.com, introduzca:
  3. Abra su archivo de inventario y asegúrese de que los siguientes hosts están definidos correctamente:

    • El servidor IdM en la sección [ipaserver].
    • Los hosts en los que desea recuperar el secreto en la sección [webservers]. Por ejemplo, para ordenar a Ansible que recupere el secreto en webserver1.idm.example.com y webserver2.idm.example.com, introduzca:

      [ipaserver]
      server.idm.example.com
      
      [webservers]
      webserver1.idm.example.com
      webserver2.idm.example.com
    Importante

    Asegúrese de que la lista no contiene el servidor web comprometido, en el ejemplo actual webserver3.idm.example.com.

  4. Abra el archivo data-archive-in-asymmetric-vault-copy.yml para editarlo.
  5. Modifique el archivo estableciendo las siguientes variables en la sección de tareas ipavault:

    • Establezca la variable ipaadmin_password con la contraseña del administrador de IdM.
    • Establezca la variable name con el nombre de la bóveda, por ejemplo secret_vault.
    • Establezca la variable service con el propietario del servicio de la bóveda, por ejemplo HTTP/webserver.idm.example.com.
    • Establezca la variable in en "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}". Esto garantiza que Ansible recupere el archivo con la clave privada del directorio de trabajo en el controlador de Ansible y no del servidor de IdM.
    • Establezca la variable action en member.

      Este es el archivo de Ansible playbook modificado para el ejemplo actual:

    ---
    - 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
  6. Guarda el archivo.
  7. Ejecuta el libro de jugadas:

    $ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  8. Abra el archivo retrieve-data-asymmetric-vault-copy.yml para editarlo.
  9. Modifique el archivo estableciendo las siguientes variables en la sección de tareas ipavault:

    • Establece la variable ipaadmin_password con tu contraseña de administrador de IdM.
    • Establezca la variable name con el nombre de la bóveda, por ejemplo secret_vault.
    • Establezca la variable service con el propietario del servicio de la bóveda, por ejemplo HTTP/webserver1.idm.example.com.
    • Establezca la variable private_key_file en la ubicación de la clave privada utilizada para recuperar el secreto de la bóveda de servicio.
    • Establezca la variable out en la ubicación del servidor IdM donde desea recuperar el secreto de new-private-key-to-an-externally-signed-certificate.pem, por ejemplo, el directorio de trabajo actual.
    • Establezca la variable action en member.

      Este es el archivo de Ansible playbook modificado para el ejemplo actual:

    ---
    - 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
  10. Añade una sección al libro de jugadas que recupere el archivo de datos del servidor de IdM al controlador de 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
  11. Añada una sección al libro de jugadas que transfiera el archivo new-private-key-to-an-externally-signed-certificate.pem recuperado del controlador de Ansible a los servidores web enumerados en la sección webservers del archivo de inventario:

    ---
    - 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
  12. Guarda el archivo.
  13. Ejecuta el libro de jugadas:

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

Recursos adicionales

  • Para obtener más información sobre el uso de Ansible para gestionar los almacenes de IdM y los secretos de servicio y sobre las variables del libro de jugadas, consulte el archivo Markdown README-vault.md disponible en el directorio /usr/share/doc/ansible-freeipa/ y los libros de jugadas de ejemplo disponibles en el directorio /usr/share/doc/ansible-freeipa/playbooks/vault/.