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
Navegue até o diretório
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
-
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: 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
ImportanteCertifique-se de que a lista não contém o servidor web comprometido, no exemplo atual webserver3.idm.example.com.
-
O servidor da IdM na seção
- Abra o arquivo data-archive-in-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 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
paramember
.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
-
Defina a variável
- Salvar o arquivo.
Execute o livro de brincadeiras:
$ ansible-playbook -v -i inventory.file data-archive-in-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 new-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: new-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: 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
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
- Salvar o arquivo.
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/
.