Spec-Zone.ru › Ansible

Шифрование содержимого с помощью Ansible Vault

После того, как вы разработали стратегию управления и хранения паролей vault, можно начать шифрование содержимого. С помощью Ansible Vault можно зашифровать два типа содержимого: переменные и файлы. Зашифрованное содержимое всегда включает метку !vault, которая сообщает Ansible и YAML о необходимости расшифровки содержимого, и символ |, который позволяет использовать многострочные строки. Зашифрованное содержимое, созданное с помощью --vault-id, также содержит метку идентификатора vault. Более подробную информацию о процессе шифрования и формате содержимого, зашифрованного с помощью Ansible Vault, см. в Формат файлов, зашифрованных с помощью Ansible Vault. В этой таблице показаны основные различия между зашифрованными переменными и зашифрованными файлами:

Зашифрованные переменные

Зашифрованные файлы

Что шифруется?

Переменные внутри текстового файла

Весь файл

Когда происходит расшифровка?

По запросу, только при необходимости

При загрузке или ссылке [1]

Что можно зашифровать?

Только переменные

Любой файл структурированных данных

[1]

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

Шифрование отдельных переменных с помощью Ansible Vault

Можно зашифровать отдельные значения внутри файла YAML, используя команду ansible-vault encrypt_string. Способ безопасного отображения зашифрованных переменных см. в Безопасное отображение зашифрованных переменных.

Преимущества и недостатки шифрования переменных

При шифровании переменных файлы остаются легко читаемыми. Можно смешивать текстовые и зашифрованные переменные, даже встраивать их в плей или роль. Однако ротация паролей не так проста, как при шифровании файлов. Зашифрованные переменные нельзя перешифровать. Кроме того, шифрование переменных работает только с переменными. Если нужно зашифровать задачи или другое содержимое, необходимо зашифровать весь файл.

Создание зашифрованных переменных

Команда ansible-vault encrypt_string шифрует и форматирует любую вводимую (или копируемую или генерируемую) строку в формат, который можно включить в плейбук, роль или файл переменных. Для создания простой зашифрованной переменной передайте три параметра команде ansible-vault encrypt_string:

  • источник пароля vault (ввод, файл или скрипт с или без идентификатора vault)
  • строка для шифрования
  • имя строки (имя переменной)

Шаблон выглядит так:

ansible-vault encrypt_string <password_source> '<string_to_encrypt>' --name '<string_name_of_variable>'

Например, для шифрования строки ‘foobar’ с использованием пароля из файла ‘a_password_file’ и именования переменной ‘the_secret’:

ansible-vault encrypt_string --vault-password-file a_password_file 'foobar' --name 'the_secret'

Вышеуказанная команда создает такое содержимое:

the_secret: !vault |
      $ANSIBLE_VAULT;1.1;AES256
      62313365396662343061393464336163383764373764613633653634306231386433626436623361
      6134333665353966363534333632666535333761666131620a663537646436643839616531643561
      63396265333966386166373632626539326166353965363262633030333630313338646335303630
      3438626666666137650a353638643435666633633964366338633066623234616432373231333331
      6564

Для шифрования строки ‘foooodev’ с использованием идентификатора vault ‘dev’ и пароля из файла ‘a_password_file’, и именования переменной ‘the_dev_secret’:

ansible-vault encrypt_string --vault-id dev@a_password_file 'foooodev' --name 'the_dev_secret'

Вышеуказанная команда создает такое содержимое:

the_dev_secret: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

Для шифрования строки ‘letmein’ из стандартного ввода, добавления метки идентификатора vault ‘dev’ с использованием пароля из a_password_file и именования переменной ‘db_password’:

echo -n 'letmein' | ansible-vault encrypt_string --vault-id dev@a_password_file --stdin-name 'db_password'

Предупреждение

Ввод секретного содержимого непосредственно в командной строке (без запроса) сохраняет секретную строку в истории оболочки. Не делайте этого за пределами тестирования.

Вышеуказанная команда создает такой результат:

Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line)
db_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          61323931353866666336306139373937316366366138656131323863373866376666353364373761
          3539633234313836346435323766306164626134376564330a373530313635343535343133316133
          36643666306434616266376434363239346433643238336464643566386135356334303736353136
          6565633133366366360a326566323363363936613664616364623437336130623133343530333739
          3039

Для запроса строки для шифрования, шифрования её с паролем vault ‘dev’ из файла ‘a_password_file’, именования переменной ‘new_user_password’ и добавления метки идентификатора vault ‘dev’:

ansible-vault encrypt_string --vault-id dev@a_password_file --stdin-name 'new_user_password'

Вышеуказанная команда вызывает такой запрос:

Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line)

Введите строку для шифрования (например, ‘hunter2’), нажмите ctrl-d и подождите.

Предупреждение

Не нажимайте Enter после ввода строки для шифрования. Это добавит новую строку к зашифрованному значению.

Вышеуказанная последовательность создаёт такой результат:

new_user_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

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

Просмотр зашифрованных переменных

Вы можете просмотреть исходное значение зашифрованной переменной, используя модуль debug. Вы должны указать пароль, который использовался для шифрования переменной. Например, если вы сохранили переменную, созданную в последнем примере, в файле ‘vars.yml’, вы можете просмотреть незашифрованное значение этой переменной следующим образом:

ansible localhost -m ansible.builtin.debug -a var="new_user_password" -e "@vars.yml" --vault-id dev@a_password_file

localhost | SUCCESS => {
    "new_user_password": "hunter2"
}

Шифрование файлов с помощью Ansible Vault

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

  • файлы переменных групп из инвентаризации
  • файлы переменных хостов из инвентаризации
  • файлы переменных, переданные в ansible-playbook с помощью -e @file.yml или -e @file.json
  • файлы переменных, загруженные с помощью include_vars или vars_files
  • файлы переменных в ролях
  • файлы параметров в ролях
  • файлы задач
  • файлы обработчиков
  • бинарные файлы или другие произвольные файлы

Весь файл шифруется в хранилище.

Примечание

Ansible Vault использует редактор для создания или изменения зашифрованных файлов. См. Шаги по защите редактора для получения руководства по защите редактора.

Преимущества и недостатки шифрования файлов

Шифрование файлов на уровне файлов легко использовать. Повторное использование паролей для зашифрованных файлов просто с помощью команды rekey. Шифрование файлов может скрыть не только конфиденциальные значения, но и имена используемых переменных. Однако при шифровании файлов на уровне файлов содержимое файлов больше не легко доступно и читаемо. Это может быть проблемой с зашифрованными файлами задач. При шифровании файла переменных, см. Убедитесь, что зашифрованные переменные остаются видимыми, чтобы сохранить ссылки на эти переменные в незашифрованном файле. Ansible всегда расшифровывает весь зашифрованный файл при загрузке или ссылке, потому что Ansible не может знать, нужно ли ему содержимое, пока он его не расшифрует.

Создание зашифрованных файлов

Чтобы создать новый зашифрованный файл данных под названием «foo.yml» с паролем хранилища «test» из файла «multi_password_file»:

ansible-vault create --vault-id test@multi_password_file foo.yml

Инструмент запускает редактор (любой редактор, который вы определили с помощью $EDITOR, по умолчанию — vi). Добавить содержимое. При закрытии сеанса редактора файл сохраняется как зашифрованные данные. Заголовок файла отражает идентификатор хранилища, использованный для его создания:

``$ANSIBLE_VAULT;1.2;AES256;test``

Чтобы создать новый зашифрованный файл данных с назначенным для него идентификатором хранилища «my_new_password» и запросить пароль:

ansible-vault create --vault-id my_new_password@prompt foo.yml

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

Шифрование существующих файлов

Чтобы зашифровать существующий файл, используйте команду ansible-vault encrypt. Эта команда может работать с несколькими файлами одновременно. Например:

ansible-vault encrypt foo.yml bar.yml baz.yml

Чтобы зашифровать существующие файлы с идентификатором «project» и запросить пароль:

ansible-vault encrypt --vault-id project@prompt foo.yml bar.yml baz.yml

Просмотр зашифрованных файлов

Чтобы просмотреть содержимое зашифрованного файла без его редактирования, вы можете использовать команду ansible-vault view:

ansible-vault view foo.yml bar.yml baz.yml

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

Чтобы отредактировать зашифрованный файл на месте, используйте команду ansible-vault edit. Эта команда расшифровывает файл во временный файл, позволяет редактировать содержимое, затем сохраняет и заново шифрует содержимое и удаляет временный файл при закрытии редактора. Например:

ansible-vault edit foo.yml

Чтобы отредактировать файл, зашифрованный с помощью файла паролей vault2 и назначенным идентификатором хранилища pass2:

ansible-vault edit --vault-id pass2@vault2 foo.yml

Изменение пароля и/или идентификатора хранилища в зашифрованных файлах

Чтобы изменить пароль зашифрованного файла или файлов, используйте команду rekey:

ansible-vault rekey foo.yml bar.yml baz.yml

Эта команда может изменить ключи нескольких файлов данных одновременно и запросит исходный пароль, а также новый. Чтобы установить другой идентификатор для перешифрованных файлов, передайте новый идентификатор в --new-vault-id. Например, чтобы перешифровать список файлов, зашифрованных с идентификатором хранилища «preprod1» из файла «ppold» в идентификатор хранилища «preprod2» и запросить новый пароль:

ansible-vault rekey --vault-id preprod1@ppold --new-vault-id preprod2@prompt foo.yml bar.yml baz.yml

Расшифровка зашифрованных файлов

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

ansible-vault decrypt foo.yml bar.yml baz.yml

Шаги по защите редактора

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

vim

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

  1. Отключить файлы-временные копии, которые действуют как автоматическое сохранение в случае сбоя или прерывания.
set noswapfile
  1. Отключить создание резервных файлов.
set nobackup
set nowritebackup
  1. Отключить файл viminfo для копирования данных из текущей сессии.
set viminfo=
  1. Отключить копирование в буфер обмена системы.
set clipboard=

Вы можете добавить эти параметры в .vimrc для всех файлов или только для определенных путей или расширений. Подробности см. в руководстве vim.

Emacs

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

  1. Не копировать данные в буфер обмена системы.
(setq x-select-enable-clipboard nil)
  1. Отключить создание резервных файлов.
(setq make-backup-files nil)
  1. Отключить файлы автосохранения.
(setq auto-save-default nil)

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/vault_guide/vault_encrypting_content.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API