Chapitre 24. Utiliser Ansible pour gérer les coffres-forts des services IdM : stocker et récupérer les secrets
Cette section montre comment un administrateur peut utiliser le module ansible-freeipa
vault
pour stocker en toute sécurité un secret de service dans un emplacement centralisé. Le coffre-fort utilisé dans l'exemple est asymétrique, ce qui signifie que pour l'utiliser, l'administrateur doit effectuer les étapes suivantes :
-
Générez une clé privée en utilisant, par exemple, l'utilitaire
openssl
. - Générer une clé publique à partir de la clé privée.
Le secret de service est crypté avec la clé publique lorsqu'un administrateur l'archive dans le coffre-fort. Ensuite, une instance de service hébergée sur une machine spécifique du domaine récupère le secret à l'aide de la clé privée. Seuls le service et l'administrateur sont autorisés à accéder au secret.
Si le secret est compromis, l'administrateur peut le remplacer dans le coffre-fort du service, puis le redistribuer aux instances de service individuelles qui n'ont pas été compromises.
Conditions préalables
- Le composant du système de certificats de l'autorité de récupération des clés (KRA) a été installé sur un ou plusieurs serveurs de votre domaine IdM. Pour plus de détails, voir Installation de l'autorité de recouvrement des clés dans IdM.
Cette section comprend ces procédures :
- Assurer la présence d'un coffre-fort de service asymétrique dans IdM à l'aide d'Ansible
- Stocker un secret de service IdM dans un coffre-fort asymétrique à l'aide d'Ansible
- Récupérer un secret de service pour un service IdM en utilisant Ansible
- Changer le secret du coffre d'un service IdM en cas de compromission en utilisant Ansible
Dans les procédures :
- admin est l'administrateur qui gère le mot de passe du service.
- private-key-to-an-externally-signed-certificate.pem est le fichier contenant le secret du service, dans ce cas une clé privée d'un certificat signé en externe. Ne confondez pas cette clé privée avec la clé privée utilisée pour récupérer le secret dans le coffre-fort.
- secret_vault est le coffre-fort créé pour stocker le secret de service.
- HTTP/webserver1.idm.example.com est le service propriétaire de la chambre forte.
- HTTP/webserver2.idm.example.com et HTTP/webserver3.idm.example.com sont les services aux membres de la voûte.
- service-public.pem est la clé publique du service utilisée pour crypter le mot de passe stocké dans password_vault.
- service-private.pem est la clé privée du service utilisée pour décrypter le mot de passe stocké dans secret_vault.
24.1. Assurer la présence d'un coffre-fort de service asymétrique dans IdM à l'aide d'Ansible
Cette section montre comment un administrateur de gestion des identités (IdM) peut utiliser un playbook Ansible pour créer un conteneur de coffre-fort de service avec un ou plusieurs coffres-forts privés pour stocker en toute sécurité des informations sensibles. Dans l'exemple utilisé dans la procédure ci-dessous, l'administrateur crée un coffre-fort asymétrique nommé secret_vault. Cela garantit que les membres de l'espace de stockage doivent s'authentifier à l'aide d'une clé privée pour récupérer le secret dans l'espace de stockage. Les membres du coffre-fort pourront récupérer le fichier à partir de n'importe quel client IdM.
Conditions préalables
Vous avez configuré votre nœud de contrôle Ansible pour qu'il réponde aux exigences suivantes :
- Vous utilisez la version 2.8 ou ultérieure d'Ansible.
-
Vous avez installé le paquetage
ansible-freeipa
sur le contrôleur Ansible. - L'exemple suppose que dans le répertoire ~/MyPlaybooks/ vous avez créé un fichier d'inventaire Ansible avec le nom de domaine complet (FQDN) du serveur IdM.
-
L'exemple suppose que le coffre-fort secret.yml Ansible stocke votre
ipaadmin_password
.
- Vous connaissez le mot de passe de IdM administrator.
Procédure
Naviguez jusqu'au répertoire
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
Obtenir la clé publique de l'instance de service. Par exemple, en utilisant l'utilitaire
openssl
:Générer la clé privée
service-private.pem
.$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
Générer la clé publique
service-public.pem
à partir de la clé privée.$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
Facultatif : Créez un fichier d'inventaire s'il n'existe pas, par exemple inventory.file:
$ touch inventory.file
Ouvrez votre fichier d'inventaire et définissez le serveur IdM que vous souhaitez configurer dans la section
[ipaserver]
. Par exemple, pour demander à Ansible de configurer server.idm.example.com, entrez :[ipaserver] server.idm.example.com
Faites une copie du fichier ensure-asymmetric-vault-is-present.yml Ansible playbook. Par exemple :
$ cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
- Ouvrez le fichier ensure-asymmetric-vault-is-present-copy.yml pour le modifier.
- Ajoutez une tâche qui copie la clé publique service-public.pem du contrôleur Ansible vers le serveur server.idm.example.com.
Modifiez le reste du fichier en définissant les variables suivantes dans la section
ipavault
task :-
Fixer la variable
ipaadmin_password
au mot de passe de l'administrateur de l'IdM. -
Définissez le nom de la chambre forte à l'aide de la variable
name
, par exemple secret_vault. -
Fixer la variable
vault_type
à asymmetric. -
Définissez la variable
service
comme étant le principal du service propriétaire de la chambre forte, par exemple HTTP/webserver1.idm.example.com. Réglez l'adresse
public_key_file
sur l'emplacement de votre clé publique.Il s'agit du fichier playbook Ansible modifié pour l'exemple actuel :
--- - name: Tests hosts: ipaserver gather_facts: false vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Copy public key to ipaserver. copy: src: /path/to/service-public.pem dest: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem mode: 0600 - name: Add data to vault, from a LOCAL file. ipavault: ipaadmin_password: "{{ ipaadmin_password }}" name: secret_vault vault_type: asymmetric service: HTTP/webserver1.idm.example.com public_key_file: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem
-
Fixer la variable
- Enregistrer le fichier.
Exécutez le manuel de jeu :
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml