Quais são as práticas recomendadas para usar o Ansible Vault em ICs públicos e repositórios de controle de origem como o BitBucket?

11

Introdução

Em um IC privado e repositórios de controle de origem como o Gitlab-ce, é possível copiar um ~ / .vault_pass.txt no servidor e deixá-lo usar pelo IC para descriptografar arquivos usando o Ansible.

Problema

Em ICs públicos e repositórios de controle de origem como o Bitbucket, não é possível copiar um ~ / .vault_pass.txt no servidor de ICs.

Discussão

No Bitbucket, é possível definir variáveis ​​criptografadas, mas quando esse arquivo é verificado, as únicas variáveis ​​relacionadas ao VAULT são:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Essas variáveis ​​não são uma opção para resolver o problema, pois quando o ANSIBLE_ASK_VAULT_PASSconjunto ansible-vaultainda é solicitado:

user@host $
Vault password:

Quando a mesma senha é inserida, ela pode abrir o arquivo criptografado, mas o objetivo é abrir o arquivo sem precisar de um arquivo ou digitar uma senha em um prompt.

Outra tentativa de resolver o problema estava em execução export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, mas o modo interativo persiste.

Outra opção é export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, mas esse arquivo precisa ser enviado ao repositório, mas os repositórios de controle de origem não devem conter senhas.

030
fonte
2
Oi @ 030, você poderia esclarecer o que quer dizer com CI? Para mim, isso significa integração contínua , no entanto, tanto o GitLab quanto o BitBucket também são repositórios de controle de origem - a questão seria mais clara se o IC fosse expandido.
Richard Slater

Respostas:

8

--vault-password-fileem vez disso, pode apontar para um script executável que grava no stdout. Esse recurso pouco conhecido deve resolver seu problema.

Primeiro, escreva um script simples e executável que imprima uma variável de ambiente do sistema e verifique isso no controle de origem. Em seguida, use o recurso de variável criptografada do Bitbucket para definir essa variável de ambiente como seu segredo do cofre de segurança. Por fim, execute da seguinte maneira:

ansible-playbook site.yml --vault-password-file ./mypass.sh.

Referências:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto

Caçador da floresta
fonte
E então o mypass.sh conterá, echo $VARpor exemplo, e esse var será definido na interface do BitBucket?
030
Sim! Como alternativa, aqui está um exemplo de Python: stackoverflow.com/questions/4906977/…
Woodland Hunter
([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030
1

Usando

ansible-playbook site.yml --vault-password-file ./mypass.sh

resultou em:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

Com base nesta postagem, o seguinte foi definido nos pipelines de bitbucket:

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt
030
fonte
-1

Você pode ter um teste configurado que não execute a produção e carregar arquivos diferentes para eles.

Crie um host_vars / localhost / vault que funcione apenas para a instalação de teste local.

Dessa forma, você pode usar uma senha de cofre aberta que funcione apenas para esse cofre de host local.

Findarato
fonte