RabbitMQ
This commit is contained in:
158
PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md
Normal file
158
PostgreSQL/PostgreSQL_Vault_Database_Secrets_Engine.md
Normal file
@ -0,0 +1,158 @@
|
||||
Думаю что данный механизм будет лучше чем PAM но WAZUH будет ругаться на создание пользователей, наверно не стоит создавать пользователей чаще чем раз в месяц.
|
||||
|
||||
# 🔐 Использование PostgreSQL с Vault Database Secrets Engine
|
||||
|
||||
Vault от HashiCorp предоставляет [**Database Secrets Engine**](https://developer.hashicorp.com/vault/docs/secrets/databases) — мощный инструмент для **динамической выдачи учетных данных** к базам данных, включая PostgreSQL.
|
||||
|
||||
## Что делает Vault с PostgreSQL
|
||||
|
||||
Vault может:
|
||||
- Создавать **временных пользователей** в PostgreSQL
|
||||
- Ограничивать **время жизни (TTL)** учетных записей
|
||||
- Автоматически **удалять пользователей** после TTL
|
||||
- Выдавать **роли с разными правами**
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Настройка Vault с PostgreSQL
|
||||
|
||||
### 1. Включить Secret Engine
|
||||
|
||||
```bash
|
||||
vault secrets enable database
|
||||
```
|
||||
|
||||
### 2. Настроить подключение к PostgreSQL
|
||||
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
|
||||
2. Создаем два AppRole логина
|
||||
```
|
||||
vault auth enable approle
|
||||
```
|
||||
```conf
|
||||
vault write auth/approle/role/app_billing_role \
|
||||
token_policies="app-billing" \
|
||||
token_ttl=1h \
|
||||
token_max_ttl=4h
|
||||
```
|
||||
|
||||
```conf
|
||||
vault write auth/approle/role/app_company_role \
|
||||
token_policies="app-company" \
|
||||
token_ttl=1h \
|
||||
token_max_ttl=4h
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 4. Получение динамического пользователя
|
||||
|
||||
```bash
|
||||
vault read database/creds/readonly
|
||||
vault read database/creds/app_billing
|
||||
vault read database/creds/app_company
|
||||
```
|
||||
|
||||
Ответ:
|
||||
|
||||
```json
|
||||
{
|
||||
"data": {
|
||||
"username": "v-token-readonly-3HeNkcQZ",
|
||||
"password": "D8uJKv2sO7VvXJ5yMwG1",
|
||||
"ttl": 3600
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Удаление пользователя:
|
||||
|
||||
```bash
|
||||
vault lease revoke <lease_id>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔁 Использование существующих пользователей (Static Roles)
|
||||
|
||||
```bash
|
||||
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`
|
||||
|
||||
```sql
|
||||
CREATE ROLE;
|
||||
GRANT ...;
|
||||
ALTER DEFAULT PRIVILEGES ...;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Применение
|
||||
|
||||
- CI/CD пайплайны: временные креды с TTL
|
||||
- Разработчики: автоматическая выдача доступов
|
||||
- Безопасность: без хранения логинов в `.env`
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user