Red Hat Training

A Red Hat training course is available for RHEL 8

56.5. Mudando um segredo do cofre de serviço IdM quando comprometido usando o Ansible

Esta seção mostra como um administrador de Gerenciamento de Identidade (IdM) pode reutilizar um Livro de Jogadas Ansioso para alterar o segredo armazenado em um cofre de serviço quando uma instância de serviço tiver sido comprometida. O cenário no exemplo a seguir assume que em webserver3.idm.example.com, o segredo recuperado foi comprometido, mas não a chave para o cofre assimétrico que armazena o segredo. No exemplo, o administrador reutiliza os Livros de jogo possíveis usados ao armazenar um segredo em um cofre assimétrico e recupera um segredo do cofre assimétrico em hosts IdM. No início do procedimento, o administrador da IdM armazena um novo arquivo PEM com um novo segredo no cofre assimétrico, adapta o arquivo de inventário para não recuperar o novo segredo para o servidor web comprometido, webserver3.idm.example.com, e depois executa novamente os dois procedimentos.

Pré-requisitos

  • Você instalou o pacote ansible-freeipa no controlador Ansible. Este é o host no qual você executa as etapas do procedimento.
  • Você conhece a senha IdM administrator.
  • Você criou um cofre assimétrico para armazenar o segredo do serviço.
  • Você gerou uma nova chave httpd para os serviços web rodando em hosts IdM para substituir a chave antiga comprometida.
  • A nova chave httpd é armazenada localmente no controlador Ansible, por exemplo, no arquivo /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-signed-certificate.pem.

Procedimento

  1. Navegue até o diretório /usr/share/doc/ansible-freeipa/playbooks/vault:

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Abra seu arquivo de inventário e verifique se o servidor IdM que você deseja configurar está definido corretamente na seção [ipaserver]. Por exemplo, para instruir o Ansible a configurar server.idm.example.com, entre:
  3. Abra seu arquivo de inventário e certifique-se de que os seguintes anfitriões estejam definidos corretamente:

    • O servidor da IdM na seção [ipaserver].
    • Os anfitriões para os quais você deseja recuperar o segredo na seção [webservers]. Por exemplo, para instruir Ansible a recuperar o segredo para webserver1.idm.example.com e webserver2.idm.example.com, entre:

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

    Certifique-se de que a lista não contém o servidor web comprometido, no exemplo atual webserver3.idm.example.com.

  4. Abra o arquivo data-archive-in-asymmetric-vault-copy.yml para edição.
  5. Modifique o arquivo definindo as seguintes variáveis na seção de tarefas ipavault:

    • Defina a variável ipaadmin_password para a senha do administrador da IdM.
    • Defina a variável name para o nome do cofre, por exemplo secret_vault.
    • Defina a variável service para o proprietário do serviço do cofre, por exemplo HTTP/webserver.idm.example.com.
    • Defina a variável in para "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}". Isto assegura que o Ansible recupere o arquivo com a chave privada do diretório de trabalho no controlador Ansible em vez de no servidor IdM.
    • Defina a variável action para member.

      Este é o arquivo Ansible playbook modificado para o exemplo atual:

    ---
    - 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
  6. Salvar o arquivo.
  7. Execute o livro de brincadeiras:

    $ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  8. Abra o arquivo retrieve-data-asymmetric-vault-copy.yml para edição.
  9. Modifique o arquivo definindo as seguintes variáveis na seção de tarefas ipavault:

    • Defina a variável ipaadmin_password para sua senha de administrador IdM.
    • Defina a variável name para o nome do cofre, por exemplo secret_vault.
    • Defina a variável service para o proprietário do serviço do cofre, por exemplo HTTP/webserver1.idm.example.com.
    • Defina a variável private_key_file para a localização da chave privada utilizada para recuperar o segredo do cofre de serviço.
    • Defina a variável out para o local no servidor IdM onde você deseja recuperar o segredo new-private-key-to-an-externally-signed-certificate.pem, por exemplo, o diretório de trabalho atual.
    • Defina a variável action para member.

      Este é o arquivo Ansible playbook modificado para o exemplo atual:

    ---
    - 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
  10. Adicione uma seção ao playbook que recupera o arquivo de dados do servidor da IdM para o controlador 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
  11. Adicione uma seção ao playbook que transfere o arquivo new-private-key-to-an-externally-signed-certificate.pem recuperado do controlador Ansible para os webservers listados na seção webservers do arquivo do inventário:

    ---
    - 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
  12. Salvar o arquivo.
  13. Execute o livro de brincadeiras:

    $ ansible-playbook -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml

Recursos adicionais

  • Para mais informações sobre o uso do Ansible to manage IdM vaults and service secrets e sobre variáveis de playbook, consulte o arquivo README-vault.md Markdown disponível no diretório /usr/share/doc/ansible-freeipa/ e os exemplos de playbooks disponíveis no diretório /usr/share/doc/ansible-freeipa/playbooks/vault/.