Quali sono le migliori pratiche per l'utilizzo di Ansible Vault su CI pubblici e repository di controllo del codice sorgente come BitBucket?


11

introduzione

Su un CI privato e repository di controllo del codice sorgente come Gitlab-ce è possibile copiare un ~ / .vault_pass.txt sul server e lasciarlo usare dall'IC per decrittografare i file usando Ansible.

Problema

Sui repository CI e Source Control pubblici come Bitbucket non è possibile copiare un ~ / .vault_pass.txt sul server CI da solo.

Discussione

In Bitbucket è possibile definire variabili crittografate, ma quando si controlla questo file le uniche variabili relative a VAULT sono:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Queste variabili non sono un'opzione per risolvere il problema come quando l' ANSIBLE_ASK_VAULT_PASSimpostazione è ansible-vaultancora richiesta:

user@host $
Vault password:

Quando viene immessa la stessa password, è possibile aprire il file crittografato, ma l'obiettivo è quello di aprire il file senza bisogno di un file o inserendo una password in un prompt.

Un altro tentativo di risolvere il problema era in corso export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, ma la modalità interattiva persiste.

Un'altra opzione è export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, ma questo file deve essere trasferito nel repository, ma i repository di controllo del codice sorgente non devono contenere password.


2
Ciao @ 030, potresti chiarire cosa intendi per CI? Per me questo significa integrazione continua , tuttavia sia GitLab che BitBucket sono anche repository di controllo del codice sorgente: la domanda sarebbe più chiara se il CI fosse espanso.
Richard Slater,

Risposte:


8

--vault-password-filepuò invece puntare a uno script eseguibile che scrive su stdout. Questa funzione poco nota dovrebbe risolvere il tuo problema.

Innanzitutto, scrivi uno script semplice ed eseguibile che stampa una variabile di ambiente di sistema e controlla quella nel controllo del codice sorgente. Quindi, utilizza la funzione di variabile crittografata di Bitbucket per impostare quella variabile di ambiente sul tuo segreto ansible-vault. Infine, esegui in questo modo:

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

Riferimenti:

  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 quindi mypass.sh conterrà echo $VARad esempio e questo var verrà impostato nell'interfaccia utente di BitBucket?
030

Sì! In alternativa, ecco un esempio di 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

utilizzando

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

provocato:

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.

Sulla base di questo post, è stato definito quanto segue in 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

È possibile impostare un test che non esegue la produzione e caricare file diversi per quelli.

Creare un host_vars / localhost / vault che funziona solo per l'installazione di test locale.

In questo modo è possibile utilizzare una password del vault aperto che funziona solo per quel vault dell'host locale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.