GUI для ansible vault

GUI для ansible vault

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

Проблематика

Все созданные роли и переменные хранятся в репозитории и при обновлении роли или создании нового окружения необходимо подготовить файл с переменными. Далее закинуть его на сервер с ansible vault, зашифровать и скопировать обратно. Это довольно трудоемкий процесс.

Принцип работы

Для работы приложения необходим установленный ansible. Алгоритм работы следующий:

  • введенный текст сохраняется в файл;
  • выполняется команда ansible-vault encrypt\decrypt;
  • зашифрованный\расшифрованный файл считывается и передается в поле вывода.

Первым делом нужно создать секрет:

GUI для ansible vault интерфейс -  создать секрет

Вводим имя ключа (имя будет видно всем пользователям) и сам ключ:

GUI для ansible vault интерфейс -  создать секрет ввод данных

Если добавление ключа прошло успешно, появится сообщение об успешном выполнении:

GUI для ansible vault интерфейс -  успешное создание секрета

Далее обновляем страницу, выбираем из списка нужный ключ, вводим в поле для расшифровки\зашифровки строку и нажимаем «Выполнить»:

GUI для ansible vault интерфейс -  выполнение

Переменные GUI для ansible vault по умолчанию

OS_PROJECT_PATH=/opt/ans_vault — путь для хранения служебной информации. Папка должна быть создана в операционной системе. Так же пользователю, от которого запускается приложение, должны быть предоставлены права на запись в данную папку;
DATA_FILE=ans_vault_file.dat — имя файла для хранения секретов. Будет создан при запуске приложения;
JETTY_APP_PORT=8080 — порт, на котором будет поднят сервис;
JETTY_CONTEXT_PATH=/ — контекст, на котором будет доступен сервис. Например, приложение запустили на сервере с адресом 10.10.10.10, в этом случае url будет выглядеть так: http://10.10.10.10/.

Запуск приложения в docker на CentOS 7

Сначала устанавливаем docker и запускаем:

sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker

Создаем папку /opt/ans_vault:

sudo mkdir -p /opt/ans_vault

Запуск в самом простом варианте:

sudo docker run -d --rm \
-p 8080:8080 \
-v /opt/ans_vault:/opt/ans_vault \
ittxx/ansiblevaultgui:latest

Про ключи: 

  1. run запустить контейнер; 
  2. -d не зависеть от текущего терминала; 
  3. —rm удалить контейнер после остановки; 
  4. -p проброс порта 8080 на порт 8080 внутрь контейнера; 
  5. -v монтирование директории /opt/ans_vault в директорию /opt/ans_vault внутрь контейнера. То есть, все что приложение будет писать внутри контейнера, сохранится на сервере в папке, указанной в директиве -v.

При обращении по url http://<ip адрес>:8080/ откроется запущенный сервис.

Страница проекта на DockerHub: https://hub.docker.com/r/ittxx/ansiblevaultgui

Запуск GUI для ansible vault через jar на CentOS 7

Устанавливаем java 1.8 и ansible:

sudo yum install java-1.8.0-openjdk -y
sudo yum install ansible -y

Скачиваем готовое java приложение AnsibleVaultGui-<version>.jar:

curl -o AnsibleVaultGui-0.0.1.jar https://ittx.ru/repository/public/AnsibleVaultGui/0.0.1/AnsibleVaultGui-0.0.1.jar

Создаем папку /opt/ans_vault:

sudo mkdir -p /opt/ans_vault

Предоставляем права пользователю, под которым будет запускаться приложение. Мне проще было сделать владельцем папки именно этого пользователя:

sudo chown user:user -R /opt/ans_vault
sudo chmod 755 -R /opt/ans_vault

Далее запускаем приложение:

java -jar AnsibleVaultGui-0.0.1.jar
INFO:..:JettyServer:..:main:..:Метод вызван
INFO:..:CommonVars:..:getJettyAppPort:..:Глобальная переменная JETTY_APP_PORT значение 8080
INFO:..:CommonVars:..:getJettyContextPath:..:Глобальная переменная JETTY_CONTEXT_PATH значение /
INFO:..:FileData:..:createDataFile:..:Метод вызван
INFO:..:CommonVars:..:getOsProjectPath:..:Глобальная переменная OS_PROJECT_PATH значение /opt/ans_vault
INFO:..:CommonVars:..:getPathConnector:..:Глобальная переменная PATH_CONNECTOR значение /
INFO:..:CommonVars:..:getDataFile:..:Глобальная переменная DATA_FILE значение ans_vault_file.dat
INFO:..:FileData:..:createDataFile:..:Data файл уже существует, создание не требуется
INFO:..:FileData:..:createDataFile:..:Метод завершен
INFO:..:JettyServer:..:main:..:Jetty запущен
INFO:..:JettyServer:..:main:..:Используемый порт приложения: 8080
INFO:..:CommonVars:..:getJettyContextPath:..:Глобальная переменная JETTY_CONTEXT_PATH значение /
INFO:..:JettyServer:..:main:..:Используемый context root: /

Запуск c настраиваемыми параметрами

Приложение будет запущено на порту 9098. Папка для хранения данных приложения /u01/jettyVault и контекст /vault, то есть приложение будет доступно по ссылке http://<ip адрес>:9098/vault.

Запуск в докере:

docker run -d --rm \
-p 9098:9098 \
-v /u01/jettyVault:/u01/jettyVault \
-e OS_PROJECT_PATH=/u01/jettyVault \
-e DATA_FILE=ans_vault_file.dat \
-e JETTY_APP_PORT=9098 \
-e JETTY_CONTEXT_PATH=/vault \
ittxx/ansiblevaultgui:latest

Запуск через jar:

export OS_PROJECT_PATH=/u01/jettyVault
export DATA_FILE=ans_vault_file.dat
export JETTY_APP_PORT=9098
export JETTY_CONTEXT_PATH=/vault
java -jar AnsibleVaultGui-0.0.1.jar