Come crittografare i file binari in Ansible?


9

Stiamo utilizzando Ansible Vault per memorizzare password, chiavi private per certificati ecc. Nel nostro repository git di Ansible Playbook. Tutti i nostri dati privati ​​esistenti sono in formato testo, quindi possiamo archiviarli in variabili. Questi vengono quindi utilizzati nei modelli o con il contentparametro del modulo copia.

Ora, abbiamo un file KeyStore Java, che purtroppo ha un formato binario. Come tale, non può essere archiviato all'interno di una variabile - o almeno non so come farlo. Quale sarebbe il modo più semplice per avere il nostro file correttamente crittografato mentre si trova in git, ma disponibile durante l'esecuzione ansible-playbook?

Quello che ho già provato senza successo:

  • Codifica del file binario in base64, memorizzando i dati codificati in una variabile e utilizzando il modulo modello con {{base64_data | b64decode}}. Porta a molti EF BF BDdump esadecimali del file risultante. I tre byte codificano il carattere sostitutivo Unicode in UTF-8, quindi c'è un problema con l'interpretazione dei dati binari come testo.
  • Codifica del file binario in base64, memorizzando i dati codificati in una variabile e usando il modulo copia con content="{{base64_data | b64decode}}". Ansible si lamenta di "Una variabile ha inserito un nuovo parametro nel modulo args". Quando si usano virgolette singole anziché doppie, Ansible si lamenta di "errore durante l'analisi della stringa di argomenti" e di una copia di tutti i dati binari, scaricati sul terminale ...

Da una discussione in groups.google.com/d/topic/ansible-project/IinZK14FyX4, concludo che ansible non supporta questo, e che devi fare alcune cose base64 da solo, ma che potrebbero esserci alcune cose di terze parti questo può renderlo più semplice.
Antonis Christofides,

Grazie, sta andando bene. Ci proverò e
riferirò

No, purtroppo non funziona (vedi domanda modificata). C'è qualche discussione intorno a una richiesta pull sensibile che potrebbe essere pertinente: github.com/ansible/ansible-modules-extras/pull/142
Daniel Seither

Hai pensato di concludere questo con le chiamate GPG? Potresti avere la rappresentazione ASCII di una chiave privata GPG memorizzata in Ansible Vault e usarla per decrittografare il tuo file binario, che può quindi essere archiviato in git senza problemi.
Christopher Karel,

Grazie per il tuo suggerimento, ma questa soluzione alternativa è un po 'più complessa di quanto mi piacerebbe che fosse. Ho già pensato di copiare il KeyStore con codifica base64 sul computer di destinazione e di avere un gestore che decodifica il file durante l'aggiornamento, ma preferirei una soluzione che non getti file temporanei.
Daniel Seither,

Risposte:


4

È possibile utilizzare un comando shell con una variabile base64 per farlo.

- vars:
  - myvar: "<my_base64_var>"
- name: Create binary file
  shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"

Eric


Questa è sicuramente un'opzione, soprattutto perché non utilizza un file temporaneo. Purtroppo, non consente ad Ansible di rilevare se è stata apportata una modifica, ma è migliore di tutte le altre soluzioni che ho visto.
Daniel Seither

1
Penso che Vault ora lo supporti: "La funzione Vault può anche crittografare file arbitrari, anche file binari. Se un file crittografato con Vault viene fornito come argomento src al modulo di copia, il file verrà posizionato nella destinazione sull'host di destinazione decrittografato (presupponendo che venga fornita una password del vault valida durante l'esecuzione del gioco). " - docs.ansible.com/ansible/playbooks_vault.html
Mike Gleason jr Couturier

2
Si noti che sembrano aver spostato il testo citato da @MikeGleasonjrCouturier in una pagina diversa nella documentazione di risposta; consultare docs.ansible.com/ansible/latest/vault.html ora.
Liam,

2

Il modo in cui lo facciamo per la nostra configurazione ansible è:

-Crittografiamo il singolo materiale sensibile (un piccolo sottoinsieme del nostro repository) utilizzando https://www.agwa.name/projects/git-crypt/ -Tutti ci impegniamo sempre con i tag git sign -Controlliamo periodicamente se ci sono file non firmati

Il vantaggio di git-crypt è che poiché si basa su filtri git, la crittografia è trasparente. Inoltre puoi dare accesso al repository agli sviluppatori senza compromettere il contenuto crittografato (ignorerà i file crittografati se non è possibile ottenere una chiave di decrittografia).

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.