Red Hat Training

A Red Hat training course is available for RHEL 8

56.4. Recuperar um segredo de serviço para um serviço IdM usando o Ansible

Esta seção mostra como um usuário de Gerenciamento de Identidade (IdM) pode usar um Livro de Jogadas Ansivel para recuperar um segredo de um cofre de serviço em nome do serviço. No exemplo utilizado no procedimento abaixo, a execução do playbook recupera um arquivo PEM com o segredo de um cofre assimétrico chamado secret_vault, e o armazena no local especificado em todos os hosts listados no arquivo de inventário Ansible como ipaservers.

Os serviços se autenticam na IdM usando chaves, e se autenticam no cofre usando uma chave privada. É possível recuperar o arquivo em nome do serviço de qualquer cliente IdM no qual ansible-freeipa está instalado.

Pré-requisitos

  • Você instalou o pacote ansible-freeipa no controlador Ansible. Este é o host no qual você executa as etapas do procedimento.
  • Você sabe a senha do administrador da IdM.
  • Você criou um cofre assimétrico para armazenar o segredo do serviço.
  • Você arquivou o segredo na caixa-forte.
  • Você armazenou a chave privada utilizada para recuperar o segredo do cofre de serviço no local especificado pela variável private_key_file no controlador Ansible.

Procedimento

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

    $ cd /usr/share/doc/ansible-freeipa/playbooks/vault
  2. Opcional: Criar um arquivo de inventário se ele não existir, por exemplo inventory.file:

    $ touch inventory.file
  3. Abra seu arquivo de inventário e defina os seguintes anfitriões:

    • Defina seu servidor IdM na seção [ipaserver].
    • Defina os anfitriões para os quais você deseja recuperar o segredo na seção [webservers]. Por exemplo, para instruir Ansible para recuperar o segredo para webserver1.idm.example.com, webserver2.idm.example.com e webserver3.idm.example.com, entre:
    [ipaserver]
    server.idm.example.com
    
    [webservers]
    webserver1.idm.example.com
    webserver2.idm.example.com
    webserver3.idm.example.com
  4. Faça uma cópia do arquivo do livro de jogo retrieve-data-asymmetric-vault.yml. Por exemplo:

    $ cp retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
  5. Abra o arquivo retrieve-data-asymmetric-vault-copy.yml para edição.
  6. 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 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: private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  7. 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: no
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: yes
          mode: 0600
  8. Adicione uma seção ao playbook que transfere o arquivo 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: 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
  9. Salvar o arquivo.
  10. Execute o livro de brincadeiras:

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