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
Navegue até o diretório
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
Opcional: Criar um arquivo de inventário se ele não existir, por exemplo inventory.file:
$ touch inventory.file
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
-
Defina seu servidor IdM na seção
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
- Abra o arquivo retrieve-data-asymmetric-vault-copy.yml para edição.
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
paramember
.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
-
Defina a variável
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
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
- Salvar o arquivo.
Execute o livro de brincadeiras:
$ ansible-playbook -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml