В нескольких постах "подготовим и внедрим" к себе в проект безопасное хранилище секретов.
Готовим фундамент: сервер Vault и роль для приложения
Прежде чем агент пойдет за секретами, мы должны показать ему, куда идти и к какой двери он имеет право подойти.
Шаг 1. Создаем «пропуск» (Политику)
Приложению нельзя давать доступ ко всем секретам. Создаем правило, которое разрешает читать только нужную базу данных.
Создаем файл `my-app-policy.hcl` на сервере Vault:
path "secret/data/myapp/db" {
capabilities = ["read"]
}
Загрузи его в Vault:
`vault policy write my-app-policy my-app-policy.hcl`
Шаг 2. Заводим «учетку для сервера» (AppRole)
У сервера не может быть логина и пароля от человека. Используем AppRole — это пара «Role ID» (кто ты) и «Secret ID» (знаешь ли ты код).
Команды:
vault auth enable approle
vault write auth/approle/role/my-app-role token_policies="my-app-policy" token_ttl="1h"
Шаг 3. Выдаем ключи
Теперь забираем данные для нашего агента.
1. Получаем «логин» (Role ID):
`vault read auth/approle/role/my-app-role/role-id`
Сохраняем вывод этой команды в файл с названием `role-id`.
2. Получаем «пароль» (Secret ID):
`vault write -f auth/approle/role/my-app-role/secret-id`
Сохраняем вывод этой команды в файл с названием `secret-id`.
У нас на руках два файла: `role-id` и `secret-id`. Это всё, что нужно агенту для входа. Передай эти файлы тому, кто настраивает сервер с приложением.