Secret Repo Access Matrix
Who can request what. Read by the secret-manager worker before any cross-repo secret operation.
Last reviewed: 2026-07-01 Reviewer: Radek Konarski (auto-populated from SOPS key names, 2026-07-01)
Format
Each repo entry lists:
- May request ROTATE for — secrets this repo owns and can trigger autonomous rotation on
- May request CREATE for — usually empty; new secrets always require a p24-infra session
- May NOT request — explicit blocklist for high blast-radius or shared secrets
Validation rules (secret-manager worker must enforce):
requesting_repomust match a repo listed below- The
secret_keymust appear in the repo’s “May request ROTATE for” table - The
sops_filemust match the registered value for that key readoperation type is NEVER permitted via automated trigger
Repo: radieu/et-operational-platform
SOPS file: secrets/et-operational-platform.env.sops
May request ROTATE for:
| Secret key | SOPS file | Notes |
|---|---|---|
CRON_SECRET | et-operational-platform | |
GPS_EVENT_WEBHOOK_URL | et-operational-platform | |
GPS_EVENT_WEBHOOK_ALLOWED_HOSTS | et-operational-platform | |
N8N_ATRAX_REPORT_WEBHOOK_URL | et-operational-platform | |
N8N_HU_SP_REPORT_WEBHOOK_URL | et-operational-platform | |
OPENAI_API_KEY | et-operational-platform | |
PINBOX24_WASABI_ACCESS_KEY | et-operational-platform | Wasabi per-app key |
PINBOX24_WASABI_SECRET_KEY | et-operational-platform | Wasabi per-app key |
ANTHROPIC_API_KEY | et-operational-platform | |
DOCUMENT_INGEST_SECRET | et-operational-platform | |
INSPECTION_WEBHOOK_SECRET | et-operational-platform |
May request CREATE for:
(empty — new secrets require a p24-infra session)
May NOT request:
SUPABASE_SERVICE_ROLE_KEY— shared platform key, blast radius = all Supabase operationsN8N_GPS_SYNC_SECRET— shared with n8n-bms4.env.sops; rotation must update both SOPS files- All admin keys (
WASABI_ADMIN_*,CF_GLOBAL_API_KEY,SUPABASE_ACCESS_TOKEN) mongodb_rs0_admin_password— blast radius: entire Pinbox24 production stack
Repo: radieu/Art-Agency
SOPS file: secrets/art-agency.env.sops
May request ROTATE for:
| Secret key | SOPS file | Notes |
|---|---|---|
supabase_Art_Agency_password | art-agency | |
clickup_clickup_api_key | art-agency | |
GOOGLE_ADS_DEVELOPER_TOKEN | art-agency | |
GOOGLE_ADS_CLIENT_SECRET | art-agency | |
GOOGLE_ADS_REFRESH_TOKEN | art-agency | |
wasabi_art_agency_access_key | art-agency | Wasabi per-app key |
wasabi_art_agency_secret_key | art-agency | Wasabi per-app key |
May request CREATE for:
(empty)
May NOT request:
- All admin keys
- Any key in
monitoring.env.sops,bms-servers.env.sops, oradministration.env.sops
Repo: radieu/brandpilot
SOPS file: secrets/brandpilot.env.sops
May request ROTATE for:
| Secret key | SOPS file | Notes |
|---|---|---|
RESEND_API_KEY | brandpilot | |
P24_INFRA_TELEGRAM_BOT_TOKEN | brandpilot | |
P24_EMAIL_SENDER_CF | brandpilot | |
LINKEDIN_CLIENT_ID | brandpilot | |
LINKEDIN_CLIENT_SECRET | brandpilot |
May request CREATE for:
(empty)
May NOT request:
- All admin keys
- Wasabi admin IAM keys
Repo: radieu/radekkonarski-personal-brand
SOPS file: secrets/radekkonarski-brand.env.sops (in that repo, not p24-infra — uses its own age key)
Note: Key names not populated here — the brand repo uses a separate age key not available to p24-infra sessions. Access the brand repo session directly to list keys via:
sops -d secrets/radekkonarski-brand.env.sops | grep -o '^[A-Z_a-z]*'
May request ROTATE for:
| Secret key | SOPS file | Notes |
|---|---|---|
| Populate from brand repo session | radekkonarski-brand |
May request CREATE for:
(empty)
May NOT request:
- Cross-app secrets (any key used by another repo)
Rejection policy
If any validation fails, the secret-manager worker:
- Posts a rejection comment on the requesting repo’s issue
- Closes the p24-infra infra-task-request issue with label
access-denied - Does NOT proceed with any SOPS operation
Rejection reasons:
repo_not_found— requesting repo not in this matrixkey_not_authorized— the requested key is not in the repo’s ROTATE allowlistsops_file_mismatch— thesops_filein the request does not match the registered fileoperation_not_permitted—readorcreatewithout P0 priority + human confirmation
References
- Plan:
docs/plans/plan-2427-rotate-secret-system.md §10 - Secret-manager playbook:
docs/playbooks/secret-manager.md - Rotation tier matrix:
docs/playbooks/secret-rotation-access-matrix.md