Runbook: DO API & Database správa
DO API
- Token:
/root/secrets/digitalocean/api_token - Cluster ID:
530f1c9e-9ae7-4d0f-a531-0e490c9b9135 - Cluster name:
s60-postgres-dev - Base URL:
https://api.digitalocean.com/v2
Trusted sources (IP whitelist)
# Zobrazit aktuální
DO_TOKEN=$(cat /root/secrets/digitalocean/api_token)
curl -s -H "Authorization: Bearer $DO_TOKEN" \
"https://api.digitalocean.com/v2/databases/530f1c9e-9ae7-4d0f-a531-0e490c9b9135/firewall" | python3 -m json.tool
# Aktualizovat — POZOR: PUT nahrazuje VŠECHNA pravidla!
curl -s -X PUT -H "Authorization: Bearer $DO_TOKEN" -H "Content-Type: application/json" \
"https://api.digitalocean.com/v2/databases/530f1c9e-9ae7-4d0f-a531-0e490c9b9135/firewall" \
-d '{"rules":[
{"type":"ip_addr","value":"49.13.168.234"},
{"type":"ip_addr","value":"178.104.36.211"},
{"type":"ip_addr","value":"178.104.40.167"},
{"type":"ip_addr","value":"178.63.52.57"},
{"type":"ip_addr","value":"178.104.15.77"}
]}'
Aktuální trusted sources (2026-03-14):
| IP | Server |
|---|---|
| 49.13.168.234 | sentinel |
| 178.104.36.211 | prod-alfa |
| 178.104.40.167 | hub-alfa |
| 178.63.52.57 | cerebro |
| 178.104.15.77 | cortex |
DB Users — Access matrix
| User | Přístup | Kdo používá |
|---|---|---|
| doadmin | ALL (admin) | POUZE sentinel + Libor |
| s60_infra_user | všechny dev DB, CREATEDB, NE hub/prod | infra agent |
| s60_cs_user | POUZE bwcs | cs agent (cortex) |
| s60_hub_user | s60_auth_hub | hub-alfa auth |
| s60_prod_user | s60_auth_prod | prod-alfa auth |
| s60_*_hub_user | per-service hub DB | hub-alfa per-service |
| s60_*_prod_user | per-service prod DB | prod-alfa per-service |
Credentials
| Soubor | Obsah |
|---|---|
/root/secrets/digitalocean/api_token |
DO API token |
/root/secrets/digitalocean/doadmin.env |
PG admin (doadmin) |
/root/secrets/digitalocean/infra_user.env |
s60_infra_user |
Bezpečnostní model
PUBLIC role — KRITICKÉ
PostgreSQL nové usery dědí CONNECT od PUBLIC role. Musíme:
-- 1. Odebrat PUBLIC přístup na VŠECH databázích
REVOKE CONNECT ON DATABASE <db_name> FROM PUBLIC;
-- 2. Explicitně udělit přístup konkrétnímu userovi
GRANT CONNECT ON DATABASE <db_name> TO <user>;
Toto se musí udělat pro KAŽDOU novou databázi!
Přidání nového DB usera
- Vytvořit user přes DO API nebo psql
- REVOKE CONNECT FROM PUBLIC na všech relevantních DB
- GRANT CONNECT pouze na DB, ke kterým má mít přístup
- Otestovat: přihlásit se jako nový user a ověřit, že vidí jen povolené DB
- Credentials uložit do
/root/secrets/digitalocean/<user>.env
Změna hesla
DO_TOKEN=$(cat /root/secrets/digitalocean/api_token)
curl -s -X POST -H "Authorization: Bearer $DO_TOKEN" -H "Content-Type: application/json" \
"https://api.digitalocean.com/v2/databases/530f1c9e-9ae7-4d0f-a531-0e490c9b9135/users/<username>/reset_auth" \
-d '{"mysql_settings":{"auth_plugin":"caching_sha2_password"}}'