Capítulo 56. Usando Ansible to manage IdM service vaults: armazenando e recuperando segredos
Esta seção mostra como um administrador pode usar o módulo ansible-freeipa
vault
para armazenar com segurança um segredo de serviço em um local centralizado. O cofre utilizado no exemplo é assimétrico, o que significa que, para utilizá-lo, o administrador precisa realizar os seguintes passos:
-
Gerar uma chave privada usando, por exemplo, o utilitário
openssl
. - Gerar uma chave pública com base na chave privada.
O segredo do serviço é criptografado com a chave pública quando um administrador o arquiva no cofre. Em seguida, uma instância de serviço hospedada em uma máquina específica no domínio recupera o segredo usando a chave privada. Somente o serviço e o administrador têm permissão para acessar o segredo.
Se o segredo for comprometido, o administrador pode substituí-lo no cofre de serviço e depois redistribuí-lo para aquelas instâncias de serviço individuais que não foram comprometidas.
Pré-requisitos
- O componente do Sistema de Certificado da Key Recovery Authority (KRA) foi instalado em um ou mais servidores em seu domínio IdM. Para detalhes, consulte Instalando a Autoridade de Recuperação de Chaves no IdM.
Esta seção inclui estes procedimentos:
- Garantir a presença de um cofre de serviço assimétrico na IdM usando o Ansible
- Armazenando um segredo de serviço IdM em um cofre assimétrico usando o Ansible
- Recuperar um segredo de serviço para um serviço IdM usando o Ansible
- Mudando um segredo do cofre de serviço IdM quando comprometido usando o Ansible
Nos procedimentos:
- admin é o administrador que administra a senha de serviço.
- private-key-to-an-externally-signed-certificate.pem é o arquivo que contém o segredo do serviço, neste caso uma chave privada para um certificado assinado externamente. Não confunda esta chave privada com a chave privada utilizada para recuperar o segredo do cofre.
- secret_vault é o cofre criado para armazenar o segredo do serviço.
- HTTP/webserver1.idm.example.com é o serviço que é o proprietário do cofre.
- HTTP/webserver2.idm.example.com e HTTP/webserver3.idm.example.com são os serviços dos membros do cofre.
- service-public.pem é a chave pública de serviço utilizada para criptografar a senha armazenada em password_vault.
- service-private.pem é a chave privada de serviço utilizada para decifrar a senha armazenada em secret_vault.
56.1. Garantir a presença de um cofre de serviço assimétrico na IdM usando o Ansible
Esta seção mostra como um administrador de Gerenciamento de Identidade (IdM) pode usar um livro de brincadeiras para criar um container de serviço com um ou mais cofres privados para armazenar informações sensíveis com segurança. No exemplo utilizado no procedimento abaixo, o administrador cria um cofre assimétrico chamado secret_vault. Isto assegura que os membros do cofre têm que autenticar usando uma chave privada a fim de recuperar o segredo no cofre. Os membros do cofre poderão recuperar o arquivo a partir de qualquer cliente IdM.
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.
Procedimento
Navegue até o diretório
/usr/share/doc/ansible-freeipa/playbooks/vault
:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
Obter a chave pública da instância de serviço. Por exemplo, utilizando a utilidade
openssl
:Gerar a chave privada
service-private.pem
.$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
Gerar a chave pública
service-public.pem
com base na chave privada.$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
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 o servidor IdM que você deseja configurar na seção
[ipaserver]
. Por exemplo, para instruir o Ansible a configurar server.idm.example.com, entre:[ipaserver] server.idm.example.com
Faça uma cópia do arquivo do livro de jogo ensure-asymmetric-vault-is-present.yml. Por exemplo:
$ cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
- Abra o arquivo ensure-asymmetric-vault-is-present-copy.yml para edição.
- Adicione uma tarefa que copia a chave pública service-public.pem do controlador Ansible para o servidor server.idm.example.com.
Modifique o restante do 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. -
Definir o nome do cofre utilizando a variável
name
, por exemplo secret_vault. -
Defina a variável
vault_type
para asymmetric. -
Defina a variável
service
para o principal do serviço que possui o cofre, por exemplo HTTP/webserver1.idm.example.com. Defina o
public_key_file
para a localização de sua chave pública.Este é o arquivo Ansible playbook modificado para o exemplo atual:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - name: Copy public key to ipaserver. copy: src: /path/to/service-public.pem dest: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem mode: 0600 - name: Add data to vault, from a LOCAL file. ipavault: ipaadmin_password: Secret123 name: secret_vault vault_type: asymmetric service: HTTP/webserver1.idm.example.com public_key_file: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem
-
Defina a variável
- Salvar o arquivo.
Execute o livro de brincadeiras:
$ ansible-playbook -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml