Raxx · internal docs

internal · gated ↑ index

Rotation Routing Matrix

Owner: sre-agent Last updated: 2026-05-04 UTC Consumed by: raxx-console rotation UI (#300) — UI links to vendor-specific SOP for any manual step

CF token rename (#754): New CF_<FUNCTION>_<SCOPE> names are the canonical names as of 2026-05-01. Legacy names continue to work until the cleanup card removes them. Rows show both names during the migration window.

This index is the canonical map from credential name → vendor → rotation mode → SOP path → cadence. The console rotation UI renders directly from this matrix (or its YAML/JSON-rendered equivalent under console/data/rotation-matrix.{yaml,json} once feature-developer wires it up).

Modes: - programmatic — fully automated; UI can trigger end-to-end without operator console interaction (still requires TOTP re-elevation per ADR 0021) - operator-assisted — UI prepares the rotation but the operator must complete one or more steps in the vendor's portal/CLI; UI deeplinks to the SOP - auto-rotated — vendor handles rotation transparently; SOP is informational only

Matrix

Credential name Vendor Mode SOP link Auto-prompt cadence Last rotated Next due
CF_WAF_EDIT_RAXX_APP Cloudflare (User API Tokens) operator-assisted cloudflare-user-api-token.md 90 days 2026-05-04 2026-08-02
CF_DNS_EDIT_GETRAXX_COM Cloudflare (User API Tokens) operator-assisted cloudflare-user-api-token.md 90 days 2026-05-04 2026-08-02
CF_PAGES_DEPLOY (was CLOUDFLARE_RAXX_AUTOMATION_API_TOKEN) Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD (operator to populate) TBD
CF_ACCESS_MGMT (was CLOUDFLARE_ACCESS_MGMT_TOKEN) Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD TBD
CF_PAGES_READ (was CLOUDFLARE_PAGES_READ_TOKEN) Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD TBD
CF_ACCESS_SVC_CONSOLE (was CF_ACCESS_SERVICE_TOKEN_CONSOLE) Cloudflare Access (Service Tokens) programmatic cloudflare-access-service-token.md 90 days TBD TBD
CF_ACCESS_SVC_VAULT (was CF_ACCESS_SERVICE_TOKEN_VAULT_PROBE) Cloudflare Access (Service Tokens) programmatic cloudflare-access-service-token.md 90 days TBD TBD
CLOUDFLARE_RAXX_AUTOMATION_API_TOKEN Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD TBD (legacy name — see CF_PAGES_DEPLOY)
CLOUDFLARE_ACCESS_MGMT_TOKEN Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD TBD (legacy name — see CF_ACCESS_MGMT)
CLOUDFLARE_PAGES_READ_TOKEN Cloudflare (User API Tokens) programmatic cloudflare-user-api-token.md 90 days TBD TBD (legacy name — see CF_PAGES_READ)
CF_ACCESS_SERVICE_TOKEN_CONSOLE Cloudflare Access (Service Tokens) programmatic cloudflare-access-service-token.md 90 days TBD TBD (legacy name — see CF_ACCESS_SVC_CONSOLE)
CF_ACCESS_SERVICE_TOKEN_VAULT_PROBE Cloudflare Access (Service Tokens) programmatic cloudflare-access-service-token.md 90 days TBD TBD (legacy name — see CF_ACCESS_SVC_VAULT)
HEROKU_API_KEY Heroku Platform operator-assisted heroku-platform-token.md 90 days TBD TBD
HEROKU_PLATFORM_API_TOKEN Heroku Platform operator-assisted heroku-platform-token.md 90 days TBD TBD
ALPACA_PAPER_API_KEY_ID Alpaca Paper Trading operator-assisted alpaca-paper-keys.md 180 days TBD TBD
ALPACA_PAPER_API_SECRET_KEY Alpaca Paper Trading operator-assisted alpaca-paper-keys.md 180 days TBD TBD
ALPACA_LIVE_API_KEY_ID Alpaca Live Trading operator-assisted alpaca-live-keys.md 60 days TBD TBD
ALPACA_LIVE_API_SECRET_KEY Alpaca Live Trading operator-assisted alpaca-live-keys.md 60 days TBD TBD
STRIPE_RESTRICTED_KEY Stripe operator-assisted stripe-restricted-key.md 90 days TBD TBD
POSTMARK_SERVER_TOKEN Postmark operator-assisted postmark-server-token.md 180 days TBD TBD
ANTHROPIC_API_KEY Anthropic operator-assisted anthropic-api-key.md 90 days TBD TBD
DREAMHOST_API_KEY DreamHost operator-assisted dreamhost-api-key.md 90 days TBD TBD
DYN_PASSWORD Oracle Dyn operator-assisted dyn-api-key.md 180 days TBD TBD
AWS_ACCESS_KEY_ID (per IAM user) AWS IAM programmatic aws-iam-access-key.md 30 days TBD TBD
AWS_SECRET_ACCESS_KEY (per IAM user) AWS IAM programmatic aws-iam-access-key.md 30 days TBD TBD
GITHUB_API_READONLY_TOKEN GitHub PAT operator-assisted github-pat.md 90 days TBD TBD
GITHUB_APP_PRIVATE_KEY GitHub App operator-assisted github-app-installation-token.md 365 days N/A (no App provisioned yet) N/A
GITHUB_INSTALLATION_ACCESS_TOKEN (transient) GitHub App auto-rotated github-app-installation-token.md 1 hour (auto) continuous continuous
GOOGLE_WORKSPACE_SA_KEY_JSON Google Workspace (Service Account) programmatic google-workspace-service-account-key.md 90 days TBD TBD
INFISICAL_SERVICE_TOKEN Infisical operator-assisted infisical-service-token.md 90 days TBD TBD

Mode counts

How the rotation UI consumes this matrix

The rotation UI reads the matrix at render time and: 1. For each row, displays the credential name, vendor, status badge (healthy/stale/expiring/expired/unknown), days-since-last-rotation, and cadence. 2. Mode = programmatic → the "Rotate now" button triggers the UI's automated pipeline (#253). On any operator-required clarification (e.g., a vendor doc deeplink), the UI reveals the SOP link. 3. Mode = operator-assisted → the "Rotate now" button opens the SOP in a side panel and pre-fills as much of the rotation as possible (e.g., generates rotation IDs, opens vendor URL in a new tab). The operator works through the SOP, then returns to the UI to confirm completion. The UI captures the audit log entry on completion. 4. Mode = auto-rotated → no button; the UI shows the rotation status as informational.

Operator follow-ups (to populate "Last rotated" / "Next due")

The "Last rotated" and "Next due" columns are TBD because: - This SOP set is being authored before the rotation pipeline (#253) and console UI (#300) ship. - Once the console UI is live, the Infisical metadata (updatedAt) becomes the source of truth and these columns can be auto-populated. - For credentials that have not been rotated since onboarding, the operator should populate the "Last rotated" date based on their records and trigger a rotation if the value is older than the cadence.

Update protocol

Operator answers to SRE follow-up questions (2026-04-25)

1. GitHub App provisioned?

No — Raxx GitHub App is not provisioned as of 2026-04-25. Plan: stay on PATs for v1; revisit GitHub App provisioning once we have ≥2 automated systems writing to the GitHub API. The github-app-installation-token.md SOP is informational/aspirational until then.

2. Dyn DNS — still in use?

Yes — still on Dyn for some records as of 2026-04-25. Vendor docs are degrading post-Oracle acquisition; not yet planned for migration. Keep the SOP active. Follow-up to file: migrate off Dyn before vendor support degrades further.

3. AWS IAM users + break-glass storage

Cross-reference issues