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
Navegue hasta el directorio
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
-
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: 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
ImportanteAsegúrese de que la lista no contiene el servidor web comprometido, en el ejemplo actual webserver3.idm.example.com.
-
El servidor IdM en la sección
- Abra el archivo data-archive-in-asymmetric-vault-copy.yml para editarlo.
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
enmember
.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
-
Establezca la variable
- Guarda el archivo.
Ejecuta el libro de jugadas:
$ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
- Abra el archivo retrieve-data-asymmetric-vault-copy.yml para editarlo.
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
enmember
.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
-
Establece la variable
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
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
- Guarda el archivo.
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/
.