В прошлой части, статьи мы получили цепочку сертификатов, pfx сертификат.
У нас все готово , к использованию. Мы определили, что данные сертификаты, ключи, pfx сертификат и.т.д мы будем хранить в замечательном сервисе , который называется Hashicorp Vault. Данный проект находится по адресу https://www.vaultproject.io/
Я буду использовать локально развернутый в тестовом окружении. Еще одно препятствие ,чтобы взять и использовать vault. Мы не можем поместить сертификат целиком, как файл. В Vault мы можем поместить текстовую сущность. А для этого необходимо полученные файлы преобразовать в строку, а когда мы будем извлекать необходимо преобразовать обратно из строки в файл. Будем использовать base64 преобразование.
Посмотрим , как это можно сделать из разных операционных систем.
Linux Ubuntu:
Для кодирования и декодирования сертификатов будем использовать 2 достаточно простых команды:
cat fullchain.pem | base64 -w 0 > fullchainb64
Мы командой преобразовали в base64 в строку и сохранили результат в файл.
Готовая строка может быть помещена в хранилище vault , как пара ключ-значение. Для обратного преобразования можно использовать следующую команду:
cat fullchainb64 | base64 -d
Windows:
В ОС Windows подобное преобразование делается с помощью следующего командлета Powershell.
[convert]::ToBase64String((Get-Content -path "C:\ssl\fullchain.pem" -Encoding byte)) > fullchane64win
Выводы команд можно сравнить по скриншотам. Добавляя перенаправление в файл сохраняем в файл.
И обратное преобразование в ОС Windows с сохранением в файл
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("yoursBase64string")) > "pathToFile"
Так с сертификатами и манипуляциями думаю все понятно , теперь надо посмотреть как эту информацию можно сохранить и передавать через vault.
С сервером Vault можно работать несколькими способами, два самых распространенных рассмотрим.
Способ 1. Работа с сервером Vault с помощью утилиты.
Установка утилиты Ubuntu:
sudo apt update && sudo apt install gpg wget
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vault
Установка Утилиты Windows:
Официально HashiCorp поддерживает установку vault с помощью пакетного менеджера chocolatey.
choco install vault
!!! Из РФ hashicorp блокирует доступ к репозиториям , используйте прокси !!!
Принцип работы одиноковый, но для начала необходимо сделать одно не маловажное приготовление. добавить значение переменной в окружение.
export VAULT_ADDR=https://fqdn_server_vault
Можно это сделать при подключении , когда вводим команду , добавить ключ
vault login -address=https://fqdn_server_vault
Как можно понять из контекста, первое что нам необходимо сделать это залогинится. Для того , чтобы залогинится нам необходим токен, можно использовать токен от root , который мы получили при инициализации сервера vault ( установку и инициализацию специально опустил, это не тема данной статьи.)
Далее как с волтом работать можно почитать в официальной документации.
Приведу небольшой пример , как прочитать например секрет, который хранится в фармате ключ-пара.
vault kv get -mount=path_secret Name_secret - после ввода такой команды будет выдан ответ
Далее останется только обработать ответ.
Поместить, пару ключ значение тоже не составит труда
vault kv put -mount=path_secret Name_secret fullchain64="base64"
Таким образом мы можем поместить сертификат в хранилище и потом при необходимости его использовать. Конечно данный способ довольно таки не удобный , в дальнейшем можно используя роли непосредственно из волта при инсталяции и AWX забирать ключ, но опять же данные вопросы выходят за рамки данной статьи.
Способ 2. Работа с сервером Vault с помощью CURL.
Это еще один способ работы с сервером Vault
Читаем Секреты из Vault:
curl -H "X-Vault-Token: Vault_Token" -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1
В данном запросе Vault_Token - токен под которым логинимся.
https://vault.example.lan/v1/kv/postgresql/192.168.0.1 - URL по которому располагается секрет.
С помощью jq мы можем отфильтровывать вывод json. Добавляем curl -H "X-Vault-Token: Vault_Token" -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1 2>/dev/null | jq .data.data.Login -r
И получем содержимое Login.
Просматриваем список секретов:
curl -H "X-Vault-Token: Vault_Token" -X LIST https://vault.example.lan/v1/kv/postgresql/
Добавляем секреты:
curl -H "X-Vault-Token: Vault_Token" -H "Content-Type: application/json" -X POST -d '{"value":"bar"}' https://vault.example.lan/v1/kv/postgresql/192.168.0.2
, где {"value":"bar"} - пара ключ\значение которые помещаем в Vault
Удаляем Секреты:
curl -H "X-Vault-Token: Vault_Token" -X DELETE https://vault.example.lan/v1/kv/postgresql/192.168.0.2
#DevOPs #OpenSource #SSL #vault #hashicorp