Как автоматизировать расшифровку Ansible Vault?

Я хочу автоматизировать расшифровку доступного хранилища и не указывать местоположение хранилища или пароль из командной строки.

В основном я ищу решение, которое будет работать так же, как работает ~/.netrc. Когда вы помещаете туда учетные данные, инструменты (такие как curl, wget,...) будут знать, что нужно их загрузить.

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

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

Кроме того, я не хочу добавлять параметр --vault-password-file в каждую книгу воспроизведения. Любые идеи?


person sorin    schedule 17.02.2016    source источник


Ответы (3)


Как и в случае с инвентаризацией, если vault-password-file установлен исполняемый бит, Ansible запустит его. и используйте stdout в качестве пароля.

Это позволяет вам написать сценарий, который оборачивает пароль в шифрование PGP, находится в корзине S3 с ограниченным доступом, использует AWS KMS или что-то еще, что поражает ваше воображение.

person tedder42    schedule 18.02.2016

Вы можете определить vault_password_file в своем ansible.cfg.

Но я не вижу в этом особой ценности. Глядя на справочную страницу .netrc, я вижу, что учетные данные находятся в файле .netrc, а также записаны в виде открытого текста. Кроме того, он предлагает:

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

Для .netrc это имеет смысл, потому что цель состоит в том, чтобы предоставить доступ к другим системам. Но ваша цель — предоставить доступ к файлу.

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

person udondan    schedule 18.02.2016

Есть несколько способов:

  1. Как было предложено, храните файл паролей в заблокированном виде (например, в контейнере Azure или в любом другом месте, доступном с помощью ключей ssh). Получите его во время выполнения и используйте параметр --vault-password-file. Вы можете удалить файл сразу после этого.

  2. Если вы используете сервер автоматизации, такой как Jenkins, вы можете сохранить свой пароль как Jenkins Credential. Получите пароль на лету и поместите его в текстовый файл. Снова используйте параметр --vault-password-file. Я написал об этом небольшой пост здесь Stroing Ключ хранилища Дженкинс

person Muhammad Faizan-Ul-Haq    schedule 11.11.2017
comment
Было бы лучше, если бы вы просто поделились ответом на stackoverflow вместо того, чтобы давать ссылку. - person Alex Weitz; 14.06.2019