Шаг 1 – Подготовка к работе
Настройка Vault
Первый скрипт запускает контейнеры Consul и Vault ./start-vault.sh
Vault упаковывается в контейнер, что означает, что вы не сможете читать / записывать данные.
Используйте скрипт помощника, чтобы распоковать vault ./unseal-vault.sh.
Error: No such container: vault-dev
Если вы увидели эту ошибку, то только потому, что Vault все еще инициализируется.
Завершающий этап – получение токена доступа;
export VAULT_TOKEN=$(grep 'Initial Root Token:' keys.txt | awk '{print substr($NF, 1, length($NF)-1)}')
vault auth -address=${VAULT_ADDR} ${VAULT_TOKEN}
Шаг 2 – Создание данных
Запустив Vault, используйте интерфейс командной строки для сохранения секретов, необходимых для ваших приложений.
Vault может хранить любую конфиденциальную информацию, такую как пароли, сертификаты или ключи.
Сохранение данных
Выполните следующую команду, чтобы записать данные в vault.
Vault зашифрует данные перед сохранением в Consul.
Имя ключа – db-password , который мы храним в коллекции app-1.
Группировка секретов по приложениям облегчает управление.
Это также позволяет вам добавлять ограничения, чтобы только определенные пользователи имели доступ к определенным группам.
vault write -address=${VAULT_ADDR} \
secret/app-1/db-password value=mysecretpassword
Примечание. Если вы используете CLI для заполнения Vault, убедитесь, что вы не сохранили команды в своем файле истории Bash.
vault write secret/password value=@data.tx
Шаг 3 – Настройте драйвер тома Docker
Теперь, когда данные сохранены, нам нужен наш Docker-контейнер, чтобы иметь возможность прочитать и получить доступ к секрету, в данном случае нашему паролю.
Мы сделаем это с помощью стороннего драйвера тома Docker под названием LibSecret.
Драйверы Volume – это плагины, расширяющие Docker.
Docker будет связываться с плагином при доступе к файловой системе.
Запуск плагина
Плагин должен работать как фоновое задание на вашем хосте Docker.
Nohup – это приложение Ubuntu, которое позволяет запускать задачи в фоновом режиме и завершается при перезагрузке системы.
Для сохранения процессов потребуется использовать SystemD.
При запуске LibSecret мы определяем адрес Vault и токен доступа.
На данный момент все контейнеры будут использовать один и тот же токен доступа.
nohup docker-volume-libsecret \
--addr $VAULT_ADDR \
--backend vault \
--store-opt token=$VAULT_TOKEN </dev/null &> libsecretlogs &
Запуск контейнера
Чтобы контейнеры использовали драйвер тома, нам нужно указать, когда контейнер запускается с помощью параметра –volume-driver.
Используя параметр Volume, мы сопоставляем коллекцию Vault с папкой файловой системы.
В этом случае мы отображаем secret/app-1 в Vault в папку с именем /secrets.
docker run -ti --rm \
--volume-driver libsecret \
-v secret/app-1/:/secrets \
alpine ash
Наш контейнер никогда не имеет доступа к vault или токену доступа.
Все управляется через драйвер тома.
На следующем шаге мы прочитаем эти секреты.
Шаг 4 – Просмотр секретов
Контейнер теперь имеет доступ на чтение ко всем ключам в коллекции app-1.
Он не сможет получить доступ к ключам в других коллекциях, как мы указали при запуске контейнера.
Каждый ключ в нашей коллекции доступен в виде файла.
Например, чтобы прочитать расшифрованное значение db-password, мы просто прочитем файл.
cat secrets/db-password
echo 'Will this be stored?' > secrets/db-password
ls /secrets