Como criptografar arquivos binários no Ansible?

9

Estamos usando o Ansible Vault para armazenar senhas, chaves privadas para certificados etc. em nosso repositório git do Ansible Playbook. Todos os nossos dados privados existentes estão em forma de texto, para que possamos armazená-los em variáveis. Eles são usados ​​em modelos ou com o contentparâmetro do módulo de cópia.

Agora, temos um arquivo Java KeyStore, que infelizmente possui um formato binário. Como tal, não pode ser armazenado dentro de uma variável - ou pelo menos não sei como fazê-lo. Qual seria a maneira mais fácil de ter nosso arquivo criptografado corretamente enquanto permanece no git, mas disponível durante a execução ansible-playbook?

O que eu já tentei sem sucesso:

  • Codificando o arquivo binário em base64, armazenando os dados codificados em uma variável e usando o módulo de modelo com {{base64_data | b64decode}}. Leva a muitos EF BF BDdespejos hexadecimais do arquivo resultante. Os três bytes codificam o caractere de substituição Unicode no UTF-8, portanto, há um problema com a interpretação dos dados binários como texto.
  • Codificando o arquivo binário em base64, armazenando os dados codificados em uma variável e usando o módulo de cópia com content="{{base64_data | b64decode}}". O Ansible reclama com "Uma variável inseriu um novo parâmetro no módulo args". Ao usar aspas simples em vez de aspas duplas, o Ansible reclama com "erro ao analisar a sequência de argumentos" e uma cópia de todos os dados binários, despejados no terminal ...
Daniel Seither
fonte
De uma discussão em groups.google.com/d/topic/ansible-project/IinZK14FyX4 , concluo que o ansible não suporta isso e que você precisa fazer algumas coisas de base64 por conta própria, mas que pode haver outras coisas de terceiros isso pode facilitar.
Antonis Christofides
Obrigado, isso parece bom. Vou tentar isso e relatório de volta ...
Daniel Seither
Não, infelizmente não funciona (consulte a pergunta editada). Há alguma discussão em torno de uma solicitação de recebimento ansible que possam ser relevantes: github.com/ansible/ansible-modules-extras/pull/142
Daniel Seither
Você já pensou em encerrar isso com chamadas GPG? Você pode ter a representação ASCII de uma chave privada GPG armazenada no Ansible Vault e usá-la para descriptografar seu arquivo binário, que pode ser armazenado no git sem problemas.
Christopher Karel
Obrigado pela sua sugestão, mas esta solução alternativa é um pouco mais envolvente do que eu gostaria que fosse. Eu já pensei em copiar o KeyStore codificado em base64 para a máquina de destino e ter um manipulador que decodifique o arquivo na atualização, mas eu prefiro uma solução que não gere arquivos temporários.
Daniel Seither

Respostas:

4

Você pode usar um comando shell com uma variável base64 para fazer isso.

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

Eric

elhostis
fonte
Essa é definitivamente uma opção, especialmente porque ela não usa um arquivo temporário. Infelizmente, isso não permite ao Ansible detectar se uma alteração foi feita, mas é melhor do que todas as outras soluções que eu já vi.
Daniel Seither 5/07
1
Acho que o Vault suporta agora: "O recurso do Vault também pode criptografar arquivos arbitrários, até arquivos binários. Se um arquivo criptografado no Vault for fornecido como argumento src para o módulo de cópia, o arquivo será colocado no destino no host de destino. descriptografado (assumindo que uma senha válida do cofre é fornecida ao executar a reprodução). " - docs.ansible.com/ansible/playbooks_vault.html
Mike Gleason Jr Couturier
2
Observe que eles parecem ter movido o texto citado por @MikeGleasonjrCouturier para uma página diferente na documentação solicitada; consulte docs.ansible.com/ansible/latest/vault.html agora.
Liam
2

A maneira como fazemos isso para nossa configuração ansible é:

- Criptografamos material sensível individual (um pequeno subconjunto de nosso repositório) usando https://www.agwa.name/projects/git-crypt/ - Todos sempre confirmamos usando tags de sinal git - Verificamos periodicamente se há arquivos não assinados

A vantagem do git-crypt é que, como se baseia em filtros git, a criptografia é transparente. Além disso, você pode conceder acesso ao repositório aos desenvolvedores sem comprometer o conteúdo criptografado (ele ignorará os arquivos criptografados se nenhuma chave de descriptografia puder ser obtida).

MemCtrl
fonte