Rechercher

5.5. Changer le secret du coffre d'un service IdM en cas de compromission en utilisant Ansible

download PDF

Cette section montre comment un administrateur de gestion des identités (IdM) peut réutiliser un playbook Ansible pour modifier le secret stocké dans un coffre-fort de service lorsqu'une instance de service a été compromise. Le scénario de l'exemple suivant suppose que sur webserver3.idm.example.com, le secret récupéré a été compromis, mais pas la clé du coffre-fort asymétrique stockant le secret. Dans cet exemple, l'administrateur réutilise les playbooks Ansible utilisés pour stocker un secret dans un coffre-fort as ymétrique et pour récupérer un secret du coffre-fort asymétrique sur les hôtes IdM. Au début de la procédure, l'administrateur IdM stocke un nouveau fichier PEM avec un nouveau secret dans le coffre-fort asymétrique, adapte le fichier d'inventaire de manière à ne pas récupérer le nouveau secret sur le serveur web compromis, webserver3.idm.example.com, puis réexécute les deux procédures.

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.
  • Vous avez créé un coffre-fort asymétrique pour stocker le secret de service.
  • Vous avez généré une nouvelle clé httpd pour les services web fonctionnant sur les hôtes IdM afin de remplacer l'ancienne clé compromise.
  • La nouvelle clé httpd est stockée localement sur le contrôleur Ansible, par exemple dans le fichier /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-signed-certificate.pem.

Procédure

  1. Naviguez jusqu'au répertoire /usr/share/doc/ansible-freeipa/playbooks/vault:

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Ouvrez votre fichier d'inventaire et assurez-vous que les hôtes suivants sont définis correctement :

    • Le serveur IdM dans la section [ipaserver].
    • 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 et webserver2.idm.example.com, entrez :

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

    Assurez-vous que la liste ne contient pas le serveur web compromis, dans l'exemple actuel webserver3.idm.example.com.

  3. Ouvrez le fichier data-archive-in-asymmetric-vault-copy.yml pour le modifier.
  4. Modifiez le 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.
    • 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/webserver.idm.example.com.
    • Définissez la variable in à "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}", ce qui garantit qu'Ansible récupère le fichier contenant la clé privée dans le répertoire de travail du contrôleur Ansible plutôt que sur le serveur IdM.
    • Fixer la variable action à member.

      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:
      - ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver.idm.example.com
          in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  5. Enregistrer le fichier.
  6. Exécutez le manuel de jeu :

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  7. Ouvrez le fichier retrieve-data-asymmetric-vault-copy.yml pour le modifier.
  8. 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 new-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: new-private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  9. 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: 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
  10. Ajoutez une section au playbook qui transfère le fichier new-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: 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
  11. Enregistrer le fichier.
  12. Exécutez le manuel de jeu :

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.