Playbook: Równoległy reset SOPS — architektura multi-agent
Autor: secret-manager agent
Wersja: 1.0 — 2026-07-07
Zastosowanie: Pełny reset wszystkich SOPS files z maksymalną równoległością
Grupy i zależności
WAVE 1 — równolegle (brak zależności między grupami):
[Agent A] pinbox24-w3.env.sops + pinbox24-w4.env.sops ← scripts/sops-reset-pinbox24.ps1
[Agent B] monitoring.env.sops ← Wasabi, CF tokens, Mezmo, random
[Agent C] n8n-bms4.env.sops + n8n-bms4-gh.env.sops ← n8n API key, GH PAT
[Agent D] vps-h1.env.sops ← CF tunnel, Traefik secrets
[Agent E] art-agency.env.sops ← Wasabi, Supabase JWT refresh
[Agent F] brandpilot.env.sops ← Wasabi, Resend, Anthropic
[Agent G] et-operational-platform.env.sops ← Vercel env sync
[Agent H] bms-servers.env.sops + mongodb-bms.env.sops ← BMS root passwords (Tier 3 only)
WAVE 2 — po merge Wave 1 PRów:
[CI] secrets-sync.yml — deploy na serwery (automatycznie po merge do main)
WAVE 3 — human-action (równolegle z Wave 1, nie blokuje):
GH_TOKEN, SUPABASE_SERVICE_ROLE_KEY, CF_GLOBAL_API_KEY, ATRAX_AUTH_STRING, DISCORD_BOT_TOKEN
Zależności blokujące (nie wolno zrównoleglać):
| Zależność | Dlaczego |
|---|---|
| CF_GLOBAL_API_KEY (human) → CF scoped tokens (auto) | CF API wymaga Global Key do tworzenia tokenów |
| MongoDB rs0 admin password (human) → prometheus user reset | Admin pass potrzebny do mongosh |
| GitHub PAT (human) → GH Actions workflows | PAT jest auth w CI |
Agent A — Pinbox24 W3+W4
Od issue #3256 (2026-07-08):
sops-reset-pinbox24.ps1jest teraz cienkim orchestratorem, który po kolei wywołuje pięć skryptów per-usługa:sops-reset-wasabi.ps1,sops-reset-random-keys.ps1,sops-reset-mongodb.ps1,sops-reset-redis.ps1,sops-reset-mailgun.ps1(wszystkie wscripts/, importują wspólny modułscripts/lib/sops-common.psm1). Każdy z nich można też uruchomić samodzielnie, z własnym-DryRun, np..\scripts\sops-reset-mongodb.ps1 -DryRun -W3Only.
# Uruchomienie (bms-4 worker lub Windows dev):
$env:SOPS_AGE_KEY_FILE = "C:\Users\konar\.age\p24-infra-keys.txt"
.\scripts\sops-reset-pinbox24.ps1
# Czas: ~15 min (Tier 1+2), bez Tier 3Scope:
- Wasabi IAM (pinbox24-w3, pinbox24-w4 users) — boto3
- Random: JWT_TOKEN_SECRET, tokenGenSecret, tokenGenIV, INVOICE_AUTH_TOKEN, monitoringToken
- ConvertAPI JWT (HS256 self-sign, 90 dni)
- Mailgun domain key (POST /v1/keys via admin API)
Nie dotyka: Twilio, OneSignal, PayU, Przelewy24, Google Maps, PM2 Plus
Agent B — monitoring.env.sops
Scope Tier 1:
- Wasabi IAM (p24-infra user) — boto3
- CF scoped tokens: CLOUDFLARE_TOKEN_ZINTEGROWANA, CF_EDIT_ALL_ZONES, CF_WORKERS_API_TOKEN — CF API
- Mezmo ingestion keys — Mezmo API
- Random: GITHUB_TRIGGER_SECRET, CRON_SECRET, PDF_SERVICE_API_KEY, GF_RENDERING_RENDERER_TOKEN, LOKI_BASIC_AUTH_PASSWORD
Nie dotyka (Tier 3): GH_TOKEN, SUPABASE_SERVICE_ROLE_KEY, SMTP_PASSWORD, DISCORD_BOT_TOKEN, CF_GLOBAL_API_KEY
# Przykład — CF token rotation via Global API Key:
# CF_GLOBAL_API_KEY lives in administration.env.sops; auth email is radieu@gmail.com
# (ecotrans.automation@gmail.com is a separate Gmail/n8n account, does not authenticate — confirmed 2026-08-01)
$headers = @{ "X-Auth-Key" = $env:SM_CF_GLOBAL; "X-Auth-Email" = "radieu@gmail.com" }
$tokens = Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/user/tokens" -Headers $headers
# PUT /user/tokens/{id}/value dla każdego tokenuAgent C — n8n-bms4.env.sops
Scope Tier 1:
- BMS4_N8N_API_KEY — wygeneruj nowy przez n8n API (
POST /api/v1/credentials) - Random: N8N_HU_SP_REPORT_SECRET, BRAND_WEBHOOK_SECRET
Scope Tier 3: GH_TOKEN (n8n-bms4-gh.env.sops), Redis password (wymaga SSH)
Agent D — vps-h1.env.sops
Scope Tier 1:
- CF tunnel token (jeśli CF API dostępne) — Tier 2
- Random: EXTERNAL_DB_SYM_KEY, CLAUDE_SESSION_MANAGER_KEY
Scope Tier 3: GH_TOKEN, SUPABASE_SERVICE_ROLE_KEY
Agent E — art-agency.env.sops
Scope Tier 1:
- Wasabi IAM (art-agency user) — boto3
- Resend API key (jeśli mamy klucz bazowy)
- Random: WEBHOOK_SECRET, SESSION_SECRET
Scope Tier 3: PayPal credentials, Google OAuth tokens, Supabase JWT
Zatrzymanie i reset tylko W3+W4 (fast path)
Jeśli potrzebujesz tylko odświeżyć Pinbox24 bez ruszania reszty:
# Windows dev lub bms-4 agent:
$env:SOPS_AGE_KEY_FILE = "C:\Users\konar\.age\p24-infra-keys.txt"
.\scripts\sops-reset-pinbox24.ps1 -DryRun # najpierw podgląd
.\scripts\sops-reset-pinbox24.ps1 # właściwe wykonanie
# Po zakończeniu:
git push
gh pr create --title "chore(secrets): Pinbox24 W3+W4 reset $(Get-Date -Format 'yyyy-MM-dd')" ...
# Po merge — secrets-sync.yml restartuje kontenery automatycznieCzas: ~20 min end-to-end (skrypt + CI + restart kontenerów)
Harmonogram rotacji (rekomendowany)
| Grupa | Częstotliwość | Trigger |
|---|---|---|
| Pinbox24 W3+W4 (Tier 1) | co 90 dni | ConvertAPI JWT wygasa |
| monitoring.env.sops (Tier 1) | co 90 dni | CF tokens wygasają |
| Wszystkie (pełny reset) | rocznie lub przy incydencie | Rotacja CF_GLOBAL_API_KEY |
| Tier 3 klucze | rocznie (10–15 stycznia) | GitHub PAT window |
Powiązane
scripts/sops-reset-pinbox24.ps1— Tier 1+2 dla W3+W4, cienki orchestrator (issue #3256) nad:scripts/sops-reset-wasabi.ps1,scripts/sops-reset-random-keys.ps1,scripts/sops-reset-mongodb.ps1,scripts/sops-reset-redis.ps1,scripts/sops-reset-mailgun.ps1(wszystkie importująscripts/lib/sops-common.psm1i można je uruchomić samodzielnie z-DryRun)docs/playbooks/sops-autonomous-reset.md— pełna procedura wszystkich SOPSdocs/playbooks/secret-manager.md— master playbookdocs/playbooks/convertapi-token-management.md— ConvertAPI JWT rotationdocs/playbooks/secret-rotation-access-matrix.md— tier każdego klucza