Не всегда приложение может работать с динамическими учётными данными: некоторые системы требуют заранее созданной учётной записи с постоянным именем. В этом случае Stronghold берёт управление паролем существующей учётной записи на себя и меняет его по расписанию. Потребители всегда получают текущий пароль из Stronghold.
Цель
Настроить автоматическую ротацию пароля служебной учётной записи PostgreSQL и учётной записи в LDAP или Active Directory, а также выдачу учётных записей из общего пула (библиотеки) с возвратом.
Предварительные требования
Для выполнения примера нужны:
- Токен Stronghold с правами на настройку механизмов секретов
databaseиldap. - Настроенное подключение к PostgreSQL в механизме
database(например,database/config/myapp-postgresиз руководства «Динамические учётные данные PostgreSQL»). - Существующая учётная запись
billing_svcв PostgreSQL. - Сервер LDAP или Active Directory и учётная запись для Stronghold с правом менять пароли служебных учётных записей.
Не назначайте статической роли учётную запись, которую Stronghold использует для подключения в config/. После ротации пароль в config/ станет недействительным, и все роли этого подключения перестанут работать. Для смены пароля служебной учётной записи Stronghold используйте rotate-root.
Часть 1. Статическая роль в базе данных
Создайте статическую роль для существующей учётной записи базы данных:
Разрешите подключению использовать новую роль, добавив её в
allowed_roles:d8 stronghold write database/config/myapp-postgres allowed_roles="myapp,billing-svc"При изменении (update) переданные параметры объединяются с уже сохранёнными, поэтому остальные параметры подключения повторно передавать не нужно.
Создайте статическую роль. Stronghold сразу меняет пароль учётной записи и дальше меняет его каждые 24 часа:
d8 stronghold write database/static-roles/billing-svc db_name="myapp-postgres" username="billing_svc" rotation_period=24hСоздайте политику для потребителей:
d8 stronghold policy write billing-svc-creds - <<'POLICY' path "database/static-creds/billing-svc" { capabilities = ["read"] } POLICYПолучите текущие учётные данные:
d8 stronghold read database/static-creds/billing-svcПоле
ttlпоказывает время до следующей ротации,last_vault_rotation— время последней смены пароля.При необходимости смените пароль немедленно, например при подозрении на компрометацию:
d8 stronghold write -f database/rotate-role/billing-svc
Приложение должно запрашивать пароль заново после каждой ротации. Для приложений, которые читают пароль из файла, используйте шаблоны Stronghold Agent: Agent перерисует файл после ротации и выполнит команду перезагрузки.
Часть 2. Статическая роль в LDAP
Создайте статическую роль для существующей учётной записи LDAP:
Включите механизм секретов и настройте подключение. Для Active Directory укажите
schema=ad:d8 stronghold secrets enable ldap d8 stronghold write ldap/config binddn="CN=stronghold,OU=Service,DC=example,DC=com" bindpass="<BIND_PASSWORD>" url=ldaps://dc01.example.com schema=ad<BIND_PASSWORD>— текущий пароль учётной записиCN=stronghold. На следующем шаге Stronghold заменит его сгенерированным.Смените пароль учётной записи Stronghold, чтобы он был известен только Stronghold:
d8 stronghold write -f ldap/rotate-rootСоздайте статическую роль для служебной учётной записи:
d8 stronghold write ldap/static-role/svc-backup dn="CN=svc-backup,OU=Service,DC=example,DC=com" username="svc-backup" rotation_period=24hПолучите текущий пароль:
d8 stronghold read ldap/static-cred/svc-backupСмените пароль вручную при необходимости:
d8 stronghold write -f ldap/rotate-role/svc-backup
Механизм LDAP не хеширует пароль перед записью. Убедитесь, что на сервере LDAP настроена политика паролей, которая хранит пароли в хешированном виде. Подробнее — в разделе «Механизм секретов LDAP».
Часть 3. Библиотека учётных записей
Библиотека — это пул служебных учётных записей, которые выдаются во временное пользование. При возврате учётной записи Stronghold меняет её пароль, поэтому пароль, выданный предыдущему пользователю, перестаёт действовать.
Создайте библиотеку:
d8 stronghold write ldap/library/ops-team service_account_names="ops-svc1@example.com,ops-svc2@example.com" ttl=4h max_ttl=8hВозьмите учётную запись:
d8 stronghold write -f ldap/library/ops-team/check-outОтвет содержит
service_account_name,passwordиlease_id.Верните учётную запись после работы:
d8 stronghold write ldap/library/ops-team/check-in service_account_names="ops-svc1@example.com"Если учётную запись не вернуть, Stronghold вернёт её автоматически по истечении
ttlаренды.
Проверка
Проверьте результат:
Прочитайте
database/static-creds/billing-svc, выполнитеrotate-roleи прочитайте учётные данные ещё раз — пароль должен измениться.Подключитесь к PostgreSQL с новым паролем и убедитесь, что старый пароль отклоняется.
Проверьте статус библиотеки:
d8 stronghold read ldap/library/ops-team/statusВыданные учётные записи отмечены
available:false.
Очистка
Удаление статической роли не меняет пароль. Перед удалением смените пароль вручную, чтобы последнее значение, выданное Stronghold, перестало действовать:
d8 stronghold write -f database/rotate-role/billing-svc
d8 stronghold delete database/static-roles/billing-svc
d8 stronghold write -f ldap/rotate-role/svc-backup
d8 stronghold delete ldap/static-role/svc-backup
d8 stronghold delete ldap/library/ops-team
d8 stronghold policy delete billing-svc-credsПосле удаления передайте управление паролями учётных записей их владельцам или отключите учётные записи.