Quais são as práticas recomendadas para estruturar variáveis ​​de criptografia desde o Ansible 2.3.0?

8

Este documento indica que, desde o Ansible 2.3, deve ser possível criptografar determinados vars usando um !vault |prefixo, em vez de colocar uma variável e chaves em um arquivo do Vault e criptografá-lo completamente.

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue

No momento, a estrutura é a seguinte:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault

Quando uma variável criptografada é movida do diretório do vault para o diretório vars e ansible-vault decrypt ansible/group_vars/testing/varsé executada, ela retorna:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars

Essa variável com cofre é descriptografada com o segredo do cofre fornecido e usada como uma variável normal. A linha de comando ansible-vault suporta stdin e stdout para criptografar dados dinamicamente, que podem ser usados ​​no seu editor favorito para criar essas variáveis ​​com cofre; você só precisa adicionar a tag! vault para que o Ansible e o YAML estejam cientes da necessidade de descriptografar. O | também é necessário, pois a criptografia do cofre resulta em uma sequência de várias linhas.

Questões

  1. As variáveis ​​que precisam ser criptografadas devem ser criptografadas uma a uma usando a linha de comando?
  2. Quais são as melhores práticas para reestruturar a antiga estrutura Ansible? Por exemplo, remova os arquivos do Vault e coloque todos os Vars criptografados no arquivo Vars?
030
fonte

Respostas:

2

Tendo trabalhado com o ansible vault há pouco tempo (especificamente sobre o que criptografar e como criptografar essas coisas sem tornar o código ilegível), encontrei muito pouco incentivo para mudar meus hábitos na versão 2.3.

Se eu quiser ter uma série de variáveis ​​ou arquivos criptografados, mantenha-os separados (prefixo-os com todos vault_) e deixe assim.

Algumas vezes eu usei o recurso! Vault, mas fiquei impressionado, pois parece mais fácil ser muito explícito sobre o que é e o que não é proveniente de um arquivo de segredos. Dessa forma, ninguém editando minhas peças faz suposições sobre o que é e o que não é dados confidenciais.

hvindin
fonte
1

Decidi remover o ansible/group_vars/testingdiretório e substituí-lo por um arquivo, ou seja, ansible/group_vars/testingque contenha os vars criptografados:

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136

Em vez de executar, ansible-vault edit ansible/group_vars/testing/vaultpode-se canalizar os valores que precisam ser criptografados no ansible-vault, ou seja printf mysecret | ansible-vault encrypt. Este último criptografará mysecrete a saída poderá ser adicionada ao ansible/group_vars/testingarquivo. Quando ansible-playbookserá executado, as variáveis ​​criptografadas serão descriptografadas se o arquivo do Ansible Vault for especificado, é claro.

Se o valor criptografado precisar ser depurado, o seguinte código poderá ser usado:

- debug: msg="Decrypted value: {{ encrypted_var }}"
030
fonte