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.


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


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

-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.