💽 Шпаргалка Ansible Vault / Справочное руководство |

💽 Шпаргалка Ansible Vault / Справочное руководство

Мануал

Как зашифровать конфиденциальные данные с помощью Ansible Vault ?

Как защитить Ansible Playbook с Vault ?

Как использовать Ansible Vault ?

Это руководство было сделано в качестве справочного руководства / шпаргалки для энтузиастов Ansible, использующих Vault, чтобы обеспечить шифрование и защиту данных при работе с Ansible.

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

С большим внедрением возникает проблема безопасности.

Чтобы сохранить вашу конфиденциальную информацию, такую как пароли или секретные ключи, вам нужен Vault.

Зашифрованные данные хранилища автоматически дешифруются во время выполнения.

Ansible является обязательным требованием для этого руководства.

Убедитесь, что Ansible установлен в вашей системе и предоставляет инструмент командной строки ansible-vault, который мы будем использовать во всем этом руководстве.

Прежде чем начать, установите редактор по умолчанию для Ansible Vault.

--- Для Bash---
$ echo "export EDITOR=vim" >> ~/.bashrc
$ source ~/.bashrc

--- Для Zsh ---
$ echo "export EDITOR=vim" >> ~/.zshrc
$ source ~/.zshrc
Замените vim вашим любимым редактором.

Шаг 1: Установите Ansible / Ansible Vault

Самый простой способ установить Ansible в Linux и большинстве систем Unix – через менеджер пакетов Ansible – pip.

Установить pip:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --user
После того, как pip установлен, используйте его для установки Ansible.
pip install --user ansible

Шаг 2: Использование Ansible Vault

В этом разделе мы увидим много примеров использования Ansible Vault.

Команда ansible-vault используется для управления зашифрованным содержимым в Ansible.

С его помощью вы создаете, редактируете, просматриваете и расшифровываете зашифрованные файлы.

$ ansible-vault create create_users.yml

Вам будет предложено ввести и подтвердить безопасный пароль:

New Vault password: 
Confirm New Vault password:
Ansible откроет окно редактирования для ввода желаемого содержимого.

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

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

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

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

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

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

Пример 4: обновить пароль шифрования

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

$ ansible-vault rekey create_users.yml
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful
Введите старый пароль и новый пароль для установки при появлении запроса.
После обновления файл будет доступен с использованием нового пароля.

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

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

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

$ ansible-vault view create_users.yml

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

Vault password:
Secret information

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

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

$ ansible-vault decrypt myfile.yml

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

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

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

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

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

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

Для выполнения playbook передайте флаг –ask-vault-pass.

$ 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 будет использовать пароль конфигурации для всех операций шифрования и создания.

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

В идеальном мире автоматизации с совместной работой вам нужно только шифровать конфиденциальные данные, такие как пароли базы данных, ключи 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

Заключение

В этом руководстве мы продемонстрировали, как вы можете использовать Ansible Vault для шифрования конфиденциальных переменных и данных, чтобы вы могли безопасно делиться своими проектами без ущерба для безопасности.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий