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 resetAdmin pass potrzebny do mongosh
GitHub PAT (human) → GH Actions workflowsPAT jest auth w CI

Agent A — Pinbox24 W3+W4

Od issue #3256 (2026-07-08): sops-reset-pinbox24.ps1 jest 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 w scripts/, 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 3

Scope:

  • 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 tokenu

Agent 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 automatycznie

Czas: ~20 min end-to-end (skrypt + CI + restart kontenerów)


Harmonogram rotacji (rekomendowany)

GrupaCzęstotliwośćTrigger
Pinbox24 W3+W4 (Tier 1)co 90 dniConvertAPI JWT wygasa
monitoring.env.sops (Tier 1)co 90 dniCF tokens wygasają
Wszystkie (pełny reset)rocznie lub przy incydencieRotacja CF_GLOBAL_API_KEY
Tier 3 kluczerocznie (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.psm1 i można je uruchomić samodzielnie z -DryRun)
  • docs/playbooks/sops-autonomous-reset.md — pełna procedura wszystkich SOPS
  • docs/playbooks/secret-manager.md — master playbook
  • docs/playbooks/convertapi-token-management.md — ConvertAPI JWT rotation
  • docs/playbooks/secret-rotation-access-matrix.md — tier każdego klucza