4.7 KiB
4.7 KiB
Думаю что данный механизм будет лучше чем PAM но WAZUH будет ругаться на создание пользователей, наверно не стоит создавать пользователей чаще чем раз в месяц.
🔐 Использование PostgreSQL с Vault Database Secrets Engine
Vault от HashiCorp предоставляет Database Secrets Engine — мощный инструмент для динамической выдачи учетных данных к базам данных, включая PostgreSQL.
Что делает Vault с PostgreSQL
Vault может:
- Создавать временных пользователей в PostgreSQL
- Ограничивать время жизни (TTL) учетных записей
- Автоматически удалять пользователей после TTL
- Выдавать роли с разными правами
⚙️ Настройка Vault с PostgreSQL
1. Включить Secret Engine
vault secrets enable database
2. Настроить подключение к PostgreSQL
vault write database/config/my-postgresql-db \
plugin_name=postgresql-database-plugin \
allowed_roles="readonly,readwrite" \
connection_url="postgresql://{{username}}:{{password}}@db.example.com:5432/mydb?sslmode=disable" \
username="vaultadmin" \
password="adminpassword"
vault write database/roles/app_billing \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS CONNECTION LIMIT 100; GRANT app_billing TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
vault write database/roles/app_company \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS CONNECTION LIMIT 100; GRANT app_company TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
vaultadminдолжен иметь привилегии на создание пользователей и назначение прав.
3. Создать роли Vault → PostgreSQL
Роль readonly:
vault write database/roles/readonly \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
Роль readwrite:
vault write database/roles/readwrite \
db_name=my-postgresql-db \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
- Создаем два AppRole логина
vault auth enable approle
vault write auth/approle/role/app_billing_role \
token_policies="app-billing" \
token_ttl=1h \
token_max_ttl=4h
vault write auth/approle/role/app_company_role \
token_policies="app-company" \
token_ttl=1h \
token_max_ttl=4h
4. Получение динамического пользователя
vault read database/creds/readonly
vault read database/creds/app_billing
vault read database/creds/app_company
Ответ:
{
"data": {
"username": "v-token-readonly-3HeNkcQZ",
"password": "D8uJKv2sO7VvXJ5yMwG1",
"ttl": 3600
}
}
Удаление пользователя:
vault lease revoke <lease_id>
🔁 Использование существующих пользователей (Static Roles)
vault write database/static-roles/my-static-role \
db_name=my-postgresql-db \
rotation_statements="ALTER USER readonly WITH PASSWORD '{{password}}';" \
username="readonly" \
rotation_period="24h"
Vault будет менять пароль у существующего пользователя.
🔐 Привилегии PostgreSQL пользователя vaultadmin
CREATE ROLE;
GRANT ...;
ALTER DEFAULT PRIVILEGES ...;
🎯 Применение
- CI/CD пайплайны: временные креды с TTL
- Разработчики: автоматическая выдача доступов
- Безопасность: без хранения логинов в
.env