¿Cuáles son las mejores prácticas para usar Ansible Vault en CI públicos y repositorios de control de código fuente como BitBucket?


11

Introducción

En un CI privado y repositorios de control de código fuente como Gitlab-ce, es posible copiar un ~ / .vault_pass.txt en el servidor y dejar que el CI lo use para descifrar archivos usando Ansible.

Problema

En los CI públicos y los repositorios de control de código fuente como Bitbucket, no es posible copiar un ~ / .vault_pass.txt en el servidor de CI.

Discusión

En Bitbucket es posible definir variables encriptadas, pero cuando este archivo está marcado, las únicas variables relacionadas con VAULT son:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Estas variables no son una opción para resolver el problema, ya que cuando ANSIBLE_ASK_VAULT_PASSse configura el sistema ansible-vaulttodavía se solicita:

user@host $
Vault password:

Cuando se ingresa la misma contraseña, puede abrir el archivo cifrado, pero el objetivo es abrir el archivo sin necesidad de un archivo o ingresar una contraseña en un mensaje.

Se estaba ejecutando otro intento de resolver el problema export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, pero el modo interactivo persiste.

Otra opción es export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, pero luego este archivo debe enviarse al repositorio, pero los repositorios de control de origen no deben contener contraseñas.


2
Hola @ 030, ¿podrías aclarar qué quieres decir con CI? Para mí, esto significa integración continua , sin embargo, tanto GitLab como BitBucket también son repositorios de control de fuente: la pregunta sería más clara si se ampliara CI.
Richard Slater

Respuestas:


8

--vault-password-fileen su lugar, puede apuntar a un script ejecutable que escribe en stdout. Esta característica poco conocida debería resolver su problema.

Primero, escriba un script simple y ejecutable que imprima una variable de entorno del sistema, y ​​verifíquelo en su control de origen. Luego, use la función de variable cifrada de Bitbucket para establecer esa variable de entorno en su secreto ansible-vault. Finalmente, ejecuta así:

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

Referencias

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

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


¿Y entonces mypass.sh contendrá, echo $VARpor ejemplo, y esta var se establecerá en la interfaz de usuario de BitBucket?
030

¡Sip! Alternativamente, aquí hay un ejemplo 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

Utilizando

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

resultó en:

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.

Según esta publicación, se definió lo siguiente en bitbucket-pipelines:

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

Podría tener una configuración de prueba que no ejecute la producción y cargar archivos diferentes para ellos.

Cree un host_vars / localhost / vault que solo funcione para la instalación de prueba local.

De esa manera, podría usar una contraseña de bóveda abierta que funcione solo para esa bóveda de host local.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.