Инструменты пользователя

Инструменты сайта


linux:ansible:vault

Ansible Vault

зашифровать существующий файл

Для существующих файлов используйте команду ansible-vault encrypt, чтобы установить пароль.

$ echo "SecurePassword" > passwords.txt
$ ansible-vault encrypt passwords.txt
New Vault password: 
Confirm New Vault password: 
Encryption successful

Это заменит незашифрованный файл зашифрованным.

Редактировать зашифрованный файл

Для редактирования зашифрованного файла используйте команду ansible-vault edit.

$ ansible-vault edit passwords.yml

Это попросит вас ввести пароль для файла.

Vault password:

обновить пароль шифрования

Вы всегда можете обновить пароль шифрования с помощью команды ansible-vault rekey.

$ ansible-vault rekey create_users.yml
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful

Введите старый пароль и новый пароль для установки при появлении запроса. После обновления файл будет доступен с использованием нового пароля.

просмотр Ansible зашифрованного файла

Вы можете просматривать содержимое зашифрованного файла, не открывая окно редактора.

Для этого вы будете использовать команду ansible-vault view.

$ ansible-vault view create_users.yml

Перед отображением содержимого вам необходимо ввести пароль файла.

Vault password:
Secret information

Расшифровать зашифрованные файлы Vault

Если вам больше не нужно шифрование, вы можете расшифровать зашифрованный в хранилище файл с помощью команды ansible-vault decrypt.

$ ansible-vault decrypt myfile.yml

Укажите пароль для шифрования файла.

Vault password:
Decryption successful

Вы сможете увидеть фактическое содержимое файла после расшифровки.

Выполнение Ansible с файлами, зашифрованными в хранилище

После того, как вы зашифруете свои конфиденциальные данные, вы, очевидно, захотите запустить Ansible playbook, который каким-то образом ссылается на зашифрованные данные.

Команды ansible и ansible-playbook могут расшифровывать файлы, защищенные хранилищем, если указан правильный пароль.

Использование пароля

$ ansible-playbook --ask-vault-pass <vault-encrypted-playbook-file>.yaml

Для Ansible версии моложе или 2,4, вы можете использовать флаг –vault-id @prompt.

Смотрите пример ниже.

$ ansible-playbook --ask-vault-pass -i hosts osp-pre.yml 
Vault password: 
 
PLAY [Run presetup on OSP nodes] ******************************************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************************************************************
...................................................................................

или

$ ansible-playbook -i hosts osp-pre.yml --vault-id @prompt
Vault password (default): 

Использование файла паролей

Если вы хотите избежать интерактивного запроса пароля во время выполнения playbook, рассмотрите возможность использования Ansible Vault с файлом паролей.

Создать файл паролей.

$ echo 'MyStrongVaulPassword' > .ansible_vault_pass

Для парней, использующих системы контроля версий, такие как git, рассмотрите возможность добавления файла .ansible_vault_pass в список игнорируемых файлов.

$ echo '.ansible_vault_pass' >> .gitignore

Теперь используйте файл пароля при запуске команды ansible или ansible-playbook.

$ ansible --vault-password-file=.ansible_vault_pass ...
$ ansible-playbook --vault-password-file=.ansible_vault_pass ....

Пример:

$ ansible-playbook --vault-password-file=.ansible_vault_pass -i hosts osp-pre.yml 
 
PLAY [Run presetup on OSP nodes] ******************************************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************************************************************

Как показано выше, нет запроса на ввод файла пароля.

Установите переменную среды

ANSIBLE_VAULT_PASSWORD_FILE

Если вам не нравится указывать флаг пароля или использовать интерактивный запрос пароля, вы можете настроить Ansible на автоматическое чтение файла пароля.

Это достигается путем установки переменной среды ANSIBLE_VAULT_PASSWORD_FILE с путем к файлу пароля:

export ANSIBLE_VAULT_PASSWORD_FILE=./.ansible_vault_pass

Чтобы сохранить конфигурацию, установите ее в локальном файле ansible.cfg.

$ vim ansible.cfg
 
[defaults]
........
vault_password_file = ./.ansible_vault_pass

Ansible будет использовать пароль конфигурации для всех операций шифрования и создания.

Шифрование только чувствительных переменных

В идеальном мире автоматизации с совместной работой вам нужно только шифровать конфиденциальные данные, такие как пароли базы данных, ключи API, учетные данные пользователя и т. д.

Создать файл зашифрованных переменных.

$ vim vars/vault.yml
vault_db_pass: MyStrongPassword
 
$ ansible-vault encrypt vars/vault.yml
New Vault password: 
Confirm New Vault password: 
Encryption successful
Подтвердите, что это все зашифровано.
 
$ cat vars/vault.yml 
$ANSIBLE_VAULT;1.1;AES256
62383961353832333263356333356465633635633731393039303834623832626162613235343930
6238663730366237616639326233393361626639616136300a393665326434633438613436316630
61656261616132366436646434393833613064326531346631666630616535663535353038666135
3732333338313739340a656434633336666662393161393663303662616264643364313630383163
30643763323038396161316339663037353632626462626233363836346461656238393035623533
6531353930326133656165326130303661303965316464306330

Затем мы определим другие незашифрованные переменные и ссылку, зашифрованные в переменных хранилища.

$ vim vars/plain.yml
db_user: computingforgeeks
db_port: 3306
db_pass: "{{ vault_db_pass }}"

Обратите внимание, что мы использовали шаблоны Jinja2 для ссылки на переменную, определенную в защищенном от хранилища файле.

Создать файл Playbook.

$ vim vault.yml

---
- name: Create users
  hosts: localhost
  tasks:
    - name: Include vars
      include_vars:
        dir: vars

    - name: Generate dummy variables data
      blockinfile:
        path: /tmp/vault
        block:
            Database user: "{{ db_user }}"
            Database Port: "{{ db_port }}"
            Database Password: "{{ db_pass }}"

Запустим плейбук:

$ ansible-playbook --connection=local vault.yml --ask-vault-pass
 
Vault password: 
 
PLAY [Create users] *******************************************************************************************************************************
 
TASK [Gathering Facts] ****************************************************************************************************************************
ok: [localhost]
 
TASK [Include vars] *******************************************************************************************************************************
ok: [localhost]
 
TASK [Generate dummy variables data] **************************************************************************************************************
changed: [localhost]
 
PLAY RECAP ****************************************************************************************************************************************
localhost                  : ok=3    changed=1    unreachable=0    fa

Давайте проверим содержимое созданного файла.

$ cat /tmp/vault
 
# BEGIN ANSIBLE MANAGED BLOCK
Database user: "computingforgeeks"
Database Port: "3306"
Database Password: "MyStrongPassword"
# END ANSIBLE MANAGED BLOCK
linux/ansible/vault.txt · Последние изменения: 2023/12/31 15:08 — werwolf