Capítulo 56. Uso de Ansible para gestionar las bóvedas de servicio de IdM: almacenamiento y recuperación de secretos
Esta sección muestra cómo un administrador puede utilizar el módulo ansible-freeipa vault para almacenar de forma segura un secreto de servicio en una ubicación centralizada. La bóveda utilizada en el ejemplo es asimétrica, lo que significa que para utilizarla, el administrador necesita realizar los siguientes pasos:
-
Genere una clave privada utilizando, por ejemplo, la utilidad
openssl. - Generar una clave pública basada en la clave privada.
El secreto del servicio se encripta con la clave pública cuando un administrador lo archiva en la bóveda. Después, una instancia de servicio alojada en una máquina específica del dominio recupera el secreto utilizando la clave privada. Sólo el servicio y el administrador pueden acceder al secreto.
Si el secreto está comprometido, el administrador puede reemplazarlo en la bóveda de servicios y luego redistribuirlo a aquellas instancias de servicio individuales que no han sido comprometidas.
Requisitos previos
- El componente del sistema de certificados de la Autoridad de recuperación de claves (KRA) se ha instalado en uno o varios servidores de su dominio de IdM. Para obtener más información, consulte Instalación de la Autoridad de recuperación de claves en IdM.
Esta sección incluye estos procedimientos:
- Garantizar la presencia de una bóveda de servicio asimétrica en IdM utilizando Ansible
- Almacenamiento de un secreto de servicio IdM en una bóveda asimétrica mediante Ansible
- Recuperación de un secreto de servicio para un servicio IdM mediante Ansible
- Cambiar el secreto de la bóveda de un servicio IdM cuando está comprometido usando Ansible
En los procedimientos:
- admin es el administrador que gestiona la contraseña del servicio.
- private-key-to-an-externally-signed-certificate.pem es el archivo que contiene el secreto del servicio, en este caso una clave privada de un certificado firmado externamente. No confundas esta clave privada con la clave privada utilizada para recuperar el secreto de la bóveda.
- secret_vault es la bóveda creada para almacenar el secreto del servicio.
- HTTP/webserver1.idm.example.com es el servicio propietario de la bóveda.
- HTTP/webserver2.idm.example.com y HTTP/webserver3.idm.example.com son los servicios de los miembros de la bóveda.
- service-public.pem es la clave pública del servicio utilizada para cifrar la contraseña almacenada en password_vault.
- service-private.pem es la clave privada del servicio utilizada para descifrar la contraseña almacenada en secret_vault.
56.1. Garantizar la presencia de una bóveda de servicio asimétrica en IdM utilizando Ansible Copiar enlaceEnlace copiado en el portapapeles!
Esta sección muestra cómo un administrador de Gestión de Identidades (IdM) puede utilizar un libro de jugadas de Ansible para crear un contenedor de bóveda de servicio con una o más bóvedas privadas para almacenar de forma segura la información sensible. En el ejemplo utilizado en el procedimiento siguiente, el administrador crea una bóveda asimétrica denominada secret_vault. Esto asegura que los miembros de la bóveda tienen que autenticarse usando una clave privada para poder recuperar el secreto en la bóveda. Los miembros de la bóveda podrán recuperar el archivo desde cualquier cliente IdM.
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.
Procedimiento
Navegue hasta el directorio
/usr/share/doc/ansible-freeipa/playbooks/vault:cd /usr/share/doc/ansible-freeipa/playbooks/vault
$ cd /usr/share/doc/ansible-freeipa/playbooks/vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Obtener la clave pública de la instancia de servicio. Por ejemplo, utilizando la utilidad
openssl:Generar la clave privada
service-private.pem.openssl genrsa -out service-private.pem 2048
$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Generar la clave pública
service-public.pema partir de la clave privada.openssl rsa -in service-private.pem -out service-public.pem -pubout
$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Opcional: Crear un archivo de inventario si no existe, por ejemplo inventory.file:
touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow Abra su archivo de inventario y defina el servidor IdM que desea configurar en la sección
[ipaserver]. Por ejemplo, para indicar a Ansible que configure server.idm.example.com, introduzca:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow Haga una copia del archivo de playbook de Ansible ensure-asymmetric-vault-is-present.yml. Por ejemplo:
cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
$ cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Abra el archivo ensure-asymmetric-vault-is-present-copy.yml para editarlo.
- Añade una tarea que copie la clave pública service-public.pem desde el controlador de Ansible al servidor server.idm.example.com.
Modifique el resto del archivo estableciendo las siguientes variables en la sección de tareas
ipavault:-
Establezca la variable
ipaadmin_passwordcon la contraseña del administrador de IdM. -
Defina el nombre de la bóveda utilizando la variable
name, por ejemplo secret_vault. -
Establezca la variable
vault_typeen asymmetric. -
Establezca la variable
servicecon el director del servicio propietario de la bóveda, por ejemplo HTTP/webserver1.idm.example.com. Establezca en
public_key_filela ubicación de su clave pública.Este es el archivo de Ansible playbook modificado para el ejemplo actual:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Establezca la variable
- Guarda el archivo.
Ejecuta el libro de jugadas:
ansible-playbook -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml
$ ansible-playbook -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow