SOPS Credential Audit Report

Generated: 2026-07-05
Method: scripts/bootstrap/validate-sops-env.ps1 -Env all
Purpose: D1 — inwentarz kluczy w SOPS, identyfikacja co wymaga human-action

Uruchom skrypt ponownie po każdej sesji rotacji aby odświeżyć. Ten plik to snapshot — skrypt jest źródłem prawdy.


Legenda

StatusZnaczenie
✅ FRESHRotowany w tej sesji lub w ciągu ostatnich 7 dni
⚠️ STALEOstatnio rotowany > 90 dni temu; priorytetyzuj
❌ BROKENZnany błąd; nie działa w produkcji
🔴 HUMANBrakuje; wymaga human-action (Tier 3)
🟡 AUTOBrakuje; można wygenerować automatycznie (Tier 1/2)
⏸ DEFERREDCelowo odłożony

monitoring.env.sops (vps-i1)

❌ Zepsute klucze — priorytet P0/P1

KluczProblemTicketTierAkcja
SUPABASE_SERVICE_KEYsb_secret format; PostgREST odrzuca#27903Human: Supabase dashboard → Settings → API → nowy klucz
SUPABASE_SERVICE_ROLE_KEYsb_secret format; PostgREST odrzuca#27903Human: jak wyżej
GH_TOKENWygasły PAT#27213Human: github.com → Settings → Developer Settings → PAT

⏸ Odłożone

KluczPowódTerminTier
DISCORD_BOT_TOKENDiscord API — stabilny, odłożonypo 2026-07-102

✅ Świeże (rotowane tej sesji 2026-07-05)

KluczMetoda
SMTP_PASSWORDMailgun Admin API (rotate-now.ps1)
discord_radieu_passwordPlaywright (rotate-now.ps1)
P24_INFRA_WASABI_ACCESS_KEY + P24_INFRA_WASABI_SECRET_KEYWasabi IAM API
WASABI_ACCESS_KEY + WASABI_SECRET_KEYWasabi IAM API

⚠️ Do weryfikacji — stare klucze

KluczOstatnie wzmiankiTierAkcja
ATRAX_AUTH_STRINGRotation due ~2026-06-30 (issue #1569)3Human: Atrax portal
ATRAX_PASSWORDPowiązany z ATRAX_AUTH_STRING3Human: Atrax portal
ATRAX_CLIENT_SECRETBrak historii rotacji3Human: Atrax admin
OVH_CONSUMER_KEY / SYS_CONSUMER_KEYBrak historii rotacji2Semi-auto: OVH OAuth flow
IONOS_HOSTING_TOKEN_PREFIX / IONOS_HOSTING_TOKEN_ENCRYPTIONBrak historii rotacji2Semi-auto: IONOS API
MAILGUN_API_KEYBrak historii rotacji3Human: app.mailgun.com
MAILGUN_ADMIN_API_KEYBrak historii rotacji3Human: app.mailgun.com
VERCEL_TOKEN / VERCEL_API_TOKEN / VERCEL_ADMIN_TOKENBrak historii rotacji2Human/semi-auto: Vercel dashboard
OPENAI_ADMIN_KEYBrak historii rotacji3Human: OpenAI console
TRACCAR_PASSWORDBrak historii rotacji3Human: Traccar web UI
MYSQL_ROOT_PASSWORDBrak historii rotacji3Human: MySQL root na serwerze
SUPABASE_WAP_ANON_KEYBrak historii rotacji3Human: Supabase dashboard (WAP project)
SUPABASE_DB_PASSWORDBrak historii rotacji3Human: Supabase dashboard → Database
SENTRY_AUTH_TOKEN#2620, rotacja grupowa 6/2026 — Playwright2Semi-auto: scripts/rotate/sentry-auth-token.js

🟡 Auto-generowalne (Tier 1) — nie rotowane od dawna

KluczMetoda
LOKI_BASIC_AUTH_PASSWORDscripts/rotate/generate-random.ps1
PROMETHEUS_BASIC_AUTH_PASSWORD + HASHscripts/rotate/generate-bcrypt.ps1
STATUS_BASIC_AUTH_PASSWORD + HASHscripts/rotate/generate-bcrypt.ps1
NEXCON_API_KEYdocs/playbooks/nexcon-api-key-rotation.md
N8N_CLOUD_API_KEYdocs/playbooks/n8n/n8n-cloud-api-key-rotation.md
CRON_SECRETscripts/rotate/generate-random.ps1
EXTERNAL_DB_SYM_KEYscripts/rotate/generate-random.ps1
GF_RENDERING_RENDERER_TOKENscripts/rotate/gf_rendering_renderer_token.sh
CLOUDFLARE_TOKEN_ZINTEGROWANAcloudflare-credential-rotation.md
CF_EDIT_ALL_ZONES_API_TOKENcloudflare-credential-rotation.md
CF_WORKERS_API_TOKENcloudflare-credential-rotation.md
CF_RADEKKONARSKI_DNS_TOKENcloudflare-credential-rotation.md
WAP_OPENAI_KEY_MINIscripts/rotate/openai-key-rotation.ps1

n8n-bms4.env.sops (bms-4)

❌ Zepsute / wygasłe — P0/P1

KluczProblemTierAkcja
GH_TOKENWygasły PAT3Human: jak w monitoring
GITHUB_PAT_ALL_WRITESPrawdopodobnie wygasły3Human: github.com
GITHUB_PAT_P24_INFRAPrawdopodobnie wygasły3Human: github.com
SUPABASE_SERVICE_ROLE_KEYsb_secret format (jak #2790)3Human: Supabase dashboard
LINKEDIN_ACCESS_TOKENLinkedIn tokeny wygasają po ~60 dniach2Semi-auto: refresh_token flow
MONGODB_RS0_ADMIN_PASSWORDP0 — consider rotation (priorities.md)3Human: MongoDB rs0 admin

⚠️ Do weryfikacji

KluczTierAkcja
ATRAX_PASSWORD / ATRAX_CLIENT_SECRET3Human: Atrax portal (sync z monitoring)
N8N_ENCRYPTION_KEY3NIGDY nie rotować bez migracji credentials!
REDIS_PASSWORD3Human: Redis config + restart
RABBITMQ_DEFAULT_PASS3Human: container restart
GOOGLE_CLIENT_SECRET3Human: Google Cloud Console
GITHUB_APP_PRIVATE_KEY_B643Human: GitHub App settings
BMS4_N8N_ADMIN_PASSWORD3Human: n8n account settings

🟡 Auto-generowalne

KluczMetoda
TELEGRAM_BOT_TOKENBotFather /revoke
TELEGRAM_P24_CLAUDE_BOT_API_KEYBotFather /revoke
N8N_GPS_SYNC_SECRETgenerate-random.ps1
N8N_HU_SP_REPORT_SECRETgenerate-random.ps1
GITHUB_TRIGGER_SECRETgenerate-random.ps1
ANTHROPIC_API_KEYanthropic-key-rotation.ps1
BMS4_N8N_API_KEYn8n-bms4-api-key.ps1
MONGODB_RS0_PROMETHEUS_PASSWORDmongodb-credential-rotation.md

et-lager.env.sops (Vercel)

🔴 Masowo niekompletny — tylko 1 klucz z N wymaganych

StatusKlucz
✅ PRESENTMONGODB_URI
❓ UNKNOWNWszystkie pozostałe — sprawdź et-lager repo .env.example

Akcja: uruchom po uzupełnieniu szablonu docs/sops-templates/et-lager.keys:

.\scripts\bootstrap\validate-sops-env.ps1 -Env et-lager

brandpilot.env.sops (Vercel)

❌ Zepsute

KluczProblemTierAkcja
SUPABASE_SERVICE_ROLE_KEYsb_secret format3Human: Supabase dashboard

⚠️ Do weryfikacji

KluczTierAkcja
LINKEDIN_CLIENT_SECRET3Human: LinkedIn developer portal
SUPABASE_MANAGEMENT_TOKEN3Human: Supabase dashboard → Account → Access Tokens
SUPABASE_DB_PASSWORD3Human: Supabase dashboard

art-agency.env.sops

⚠️ Do weryfikacji

KluczTierAkcja
supabase_Art_Agency_service_role_key3Human: Supabase dashboard
GOOGLE_ADS_DEVELOPER_TOKEN3Human: Google Ads Manager
GOOGLE_ADS_CLIENT_SECRET3Human: Google Cloud Console
GOOGLE_ADS_REFRESH_TOKEN2Semi-auto: refresh_token endpoint

Priorytety human-action — skonsolidowana lista

Ustaw te $env:VALUE_* przed uruchomieniem new-sops-env.ps1:

P0 — krytyczne (blokują produkcję)

# Supabase Service Role Keys (monitoring + n8n-bms4 + brandpilot + et-op)
# Pobierz z: Supabase Dashboard > Settings > API > Service Role Key
$env:VALUE_SUPABASE_SERVICE_KEY        = "sb_secret_..."
$env:VALUE_SUPABASE_SERVICE_ROLE_KEY   = "sb_secret_..."
 
# GitHub PAT (monitoring + n8n-bms4)
# Utwórz na: github.com/settings/personal-access-tokens
# Scope: repo, workflow, packages:write
$env:VALUE_GH_TOKEN          = "ghp_..."
$env:VALUE_GITHUB_PAT_ALL_WRITES = "ghp_..."
$env:VALUE_GITHUB_PAT_P24_INFRA  = "ghp_..."

P1 — ważne (degraded functions)

# Atrax (fleet system) — wszystkie env używają tych samych wartości
$env:VALUE_ATRAX_PASSWORD       = "..."
$env:VALUE_ATRAX_AUTH_STRING    = "..."
$env:VALUE_ATRAX_CLIENT_SECRET  = "..."
 
# MongoDB rs0 admin
$env:VALUE_MONGODB_RS0_ADMIN_PASSWORD = "..."
 
# LinkedIn (n8n workflow)
$env:VALUE_LINKEDIN_ACCESS_TOKEN = "..."

P2 — planowane (rotate soon)

# Vercel tokens
$env:VALUE_VERCEL_TOKEN       = "..."
$env:VALUE_VERCEL_API_TOKEN   = "..."
$env:VALUE_VERCEL_ADMIN_TOKEN = "..."
 
# OpenAI Admin
$env:VALUE_OPENAI_ADMIN_KEY = "sk-..."
 
# Mailgun API key (browser login)
$env:VALUE_MAILGUN_API_KEY       = "..."
$env:VALUE_MAILGUN_ADMIN_API_KEY = "..."
 
# Supabase DB passwords
$env:VALUE_SUPABASE_DB_PASSWORD = "..."

Dostępne klucze admin — co możemy zrotować autonomicznie TERAZ

Na podstawie kluczy obecnych w SOPS i wiedzy z tej sesji:

Admin keyDostępnyUmożliwia rotation
WASABI_ADMIN_ACCESS_KEY (administration.env.sops)✅ TAKWszystkie Wasabi IAM keys (Tier 1)
CF_GLOBAL_API_KEY (administration.env.sops)✅ TAKWszystkie CF API tokens (Tier 1)
MAILGUN_ADMIN_API_KEY (monitoring.env.sops)✅ TAKSMTP_PASSWORD (Tier 1 via API)
OPENAI_ADMIN_KEY (monitoring.env.sops — do weryfikacji)⚠️ VERIFYWAP_OPENAI_KEY_MINI (Tier 1 via API)
SUPABASE_ACCESS_TOKEN (monitoring.env.sops)⚠️ VERIFYSupabase Management API
BMS4_N8N_API_KEY✅ TAKn8n credentials (Tier 1)
Playwright browser✅ TAKSENTRY_AUTH_TOKEN, discord_radieu_password, VERCEL_TOKEN
IONOS_API_TOKEN_* (monitoring.env.sops)⚠️ VERIFYIONOS API calls

Workflow — jak użyć tego audytu

# 1. Sprawdz aktualny stan
.\scripts\bootstrap\validate-sops-env.ps1 -Env all
 
# 2. Dla każdego srodowiska z brakujacymi kluczami:
#    - Ustaw Tier 3 klucze recznie (patrz lista P0/P1/P2 powyzej)
#    - Uruchom bootstrap dla brakujacych kluczy:
.\scripts\bootstrap\new-sops-env.ps1 -Env monitoring -OnlyMissing -TierFilter 1
.\scripts\bootstrap\new-sops-env.ps1 -Env monitoring -OnlyMissing -TierFilter 3
 
# 3. Po bootstrapie — weryfikacja
.\scripts\bootstrap\validate-sops-env.ps1 -Env monitoring
 
# 4. Git commit + PR + merge → secrets-sync auto-trigger
git add secrets\monitoring.env.sops
git commit -m "chore: bootstrap monitoring.env.sops — added N keys"