5.4. Récupérer un secret de service pour un service IdM en utilisant Ansible
Cette section montre comment un utilisateur de la gestion des identités (IdM) peut utiliser un livre de jeu Ansible pour récupérer un secret dans un coffre-fort de service au nom du service. Dans l'exemple utilisé dans la procédure ci-dessous, l'exécution du livre de jeu récupère un fichier PEM
avec le secret d'un coffre-fort asymétrique nommé secret_vault, et le stocke à l'emplacement spécifié sur tous les hôtes répertoriés dans le fichier d'inventaire Ansible sous le nom ipaservers
.
Les services s'authentifient auprès de l'IdM à l'aide de keytabs, et ils s'authentifient auprès du coffre-fort à l'aide d'une clé privée. Vous pouvez récupérer le fichier au nom du service à partir de n'importe quel client IdM sur lequel ansible-freeipa
est installé.
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 l'administrateur IdM.
- Vous avez créé un coffre-fort asymétrique pour stocker le secret de service.
- Vous avez archivé le secret dans la chambre forte.
-
Vous avez stocké la clé privée utilisée pour récupérer le secret du coffre-fort du service dans l'emplacement spécifié par la variable
private_key_file
sur le contrôleur Ansible.
Procédure
Naviguez jusqu'au répertoire
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
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 les hôtes suivants :
-
Définissez votre serveur IdM dans la section
[ipaserver]
. -
Définissez les hôtes sur lesquels vous souhaitez récupérer le secret dans la section
[webservers]
. Par exemple, pour demander à Ansible de récupérer le secret sur webserver1.idm.example.com, webserver2.idm.example.com, et webserver3.idm.example.com, entrez :
[ipaserver] server.idm.example.com [webservers] webserver1.idm.example.com webserver2.idm.example.com webserver3.idm.example.com
-
Définissez votre serveur IdM dans la section
Faites une copie du fichier retrieve-data-asymmetric-vault.yml Ansible playbook. Par exemple :
$ cp retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
- Ouvrez le fichier retrieve-data-asymmetric-vault-copy.yml pour le modifier.
Modifiez le fichier en définissant les variables suivantes dans la section
ipavault
task :-
Définissez la variable
ipaadmin_password
avec votre mot de passe d'administrateur IdM. -
Attribuez à la variable
name
le nom de la chambre forte, par exemple secret_vault. -
Définissez la variable
service
comme étant le propriétaire du service de la chambre forte, par exemple HTTP/webserver1.idm.example.com. -
Définissez la variable
private_key_file
à l'emplacement de la clé privée utilisée pour récupérer le secret du coffre-fort de service. -
Définissez la variable
out
à l'emplacement du serveur IdM où vous souhaitez récupérer le secret private-key-to-an-externally-signed-certificate.pem, par exemple le répertoire de travail actuel. Fixer la variable
action
àmember
.Il s'agit du fichier playbook Ansible modifié pour l'exemple actuel :
--- - name: Retrieve data from vault hosts: ipaserver become: no gather_facts: false vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Retrieve data from the service vault ipavault: ipaadmin_password: "{{ ipaadmin_password }}" name: secret_vault service: HTTP/webserver1.idm.example.com vault_type: asymmetric private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}" out: private-key-to-an-externally-signed-certificate.pem state: retrieved
-
Définissez la variable
Ajouter une section au playbook qui récupère le fichier de données du serveur IdM vers le contrôleur Ansible :
--- - name: Retrieve data from vault hosts: ipaserver become: no gather_facts: false tasks: [...] - name: Retrieve data file fetch: src: private-key-to-an-externally-signed-certificate.pem dest: ./ flat: yes mode: 0600
Ajoutez une section au playbook qui transfère le fichier private-key-to-an-externally-signed-certificate.pem récupéré depuis le contrôleur Ansible vers les serveurs web répertoriés dans la section
webservers
du fichier d'inventaire :--- - name: Send data file to webservers become: no gather_facts: no hosts: webservers tasks: - name: Send data to webservers copy: src: private-key-to-an-externally-signed-certificate.pem dest: /etc/pki/tls/private/httpd.key mode: 0444
- Enregistrer le fichier.
Exécutez le manuel de jeu :
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml