railiance-platform filed the hub-writer caller as proposed and did not apply it. key-cape has no reuse-surface-hub-writers group; the founder creates it in the LLDAP admin UI before the role can be bound. Assistant: grok Assistant-Session: 01a13b2d-5f6d-7a32-b2c9-384625c55ca6
584 lines
37 KiB
YAML
584 lines
37 KiB
YAML
operators/nextcloud/backup:
|
|
description: Operator login (BACKUP_USERNAME, BACKUP_PASSWORD) for the dedicated Nextcloud Storage Share
|
|
account Backup on nx4069.your-storageshare.de, the independent secondary backup copy lane.
|
|
missing: []
|
|
on_loss: Resettable by the founder in the Storage Share provider admin (attended). If the share is recreated,
|
|
update the workload lane's NC_WEBDAV_TOKEN. Stored backups are unaffected.
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/docs/backup-credential-recovery.md; railiance-platform/credential-change-requests/CCR-2026-0004-railiance-backup-offsite-lane.yaml
|
|
sources:
|
|
- railiance-platform reply 3e490cd4 (2026-10-09)
|
|
used_by: Attended operator only, to manage the account and its create-only /railiance-backups share.
|
|
Never delivered to production; workloads get only the derived NC_WEBDAV_TOKEN/NC_WEBDAV_URL via the
|
|
workload lane.
|
|
platform/workloads/activity-core/llm-connect/llm-connect-provider-secrets:
|
|
description: llm-connect provider access through OpenBao workload KV and External Secrets
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Replace OPENROUTER_API_KEY directly in OpenBao and record non-secret
|
|
rotation evidence.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0003-llm-connect-openrouter-api-key.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0003-llm-connect-openrouter-api-key.yaml
|
|
- ops-warden catalog openrouter-llm-connect
|
|
used_by: ExternalSecret to Secret llm-connect-provider-secrets in the activity-core namespace
|
|
platform/workloads/activity-core/ops-run-workers/rein-aharness-metered-railiance01:
|
|
description: Deliver the bearer token of ops_run queue worker rein-aharness-metered@railiance01 to the
|
|
activity-core runtime Secret through External Secrets.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: activity-core re-mints the worker token at its path. ESO syncs it within
|
|
1h, and the queue accepts the new token per ACTIVITY_CORE_WORKERS.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0030-activity-core-ops-run-worker-rein-aharness-metered-railiance01.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0030-activity-core-ops-run-worker-rein-aharness-metered-railiance01.yaml
|
|
used_by: ExternalSecret actcore-ops-run-worker-tokens merges ACTIVITY_CORE_WORKER_TOKEN_METERED into
|
|
Secret actcore-runtime-secret in namespace activity-core.
|
|
platform/workloads/activity-core/ops-run-workers/rein-aharness-railiance01:
|
|
description: Deliver the bearer token of ops_run queue worker rein-aharness@railiance01 to the activity-core
|
|
runtime Secret through External Secrets.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: activity-core re-mints the worker token at its path. ESO syncs it within
|
|
1h, and the queue accepts the new token per ACTIVITY_CORE_WORKERS.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0029-activity-core-ops-run-worker-rein-aharness-railiance01.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0029-activity-core-ops-run-worker-rein-aharness-railiance01.yaml
|
|
used_by: ExternalSecret actcore-ops-run-worker-tokens merges ACTIVITY_CORE_WORKER_TOKEN into Secret
|
|
actcore-runtime-secret in namespace activity-core.
|
|
platform/workloads/agent-harness/forgejo-deploy-key:
|
|
description: agent-harness Forgejo deploy key (write sandbox; binky-control at cutover)
|
|
missing: []
|
|
on_loss: 're-establish by railiance-platform: On railiance01 generate a new ed25519 keypair under ~/.local/agent-harness/ssh/
|
|
(mode 600); do not paste the private key into chat or Git.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: ops-warden/wiki/playbooks/agent-harness-secrets.md#lane-2-forgejo-deploy-key
|
|
sources:
|
|
- ops-warden catalog agent-harness-forgejo-deploy
|
|
- railiance-platform reply 3e490cd4 (2026-10-09)
|
|
used_by: agent-harness worker on railiance01 (private key at ~/.local/agent-harness/ssh/forgejo-deploy);
|
|
this OpenBao copy is the recovery copy, via ops-warden agent-harness-forgejo-deploy (policy workload-kv-read-agent-harness-forgejo).
|
|
Deploy key on coulomb/executor-sandbox (write).
|
|
platform/workloads/approval-engine/audit-sender:
|
|
description: Provide only the approval-engine sender with source=approval-engine, tenants=[tenant:platform],
|
|
may_write=true, may_read=false, evidence_kind=load-bearing, secret_policy=redact.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Reviewed overlap-first rotation: append a replacement to this sender
|
|
only, deliver it, prove acceptance, then remove the predecessor and prove refusal. The first-provision
|
|
helper refuses rotation and unexpected existing values.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0021-approval-engine-audit.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0021-approval-engine-audit.yaml
|
|
used_by: 'ClusterSecretStore openbao-approval-engine-audit restricted to namespace approval-engine;
|
|
ExternalSecret and Secret approval-engine/approval-engine-audit, key audit-token. Source: manifests/factory-audit-senders.yaml.
|
|
A missing namespace stays a workload-owner prerequisite; this packet creates none.'
|
|
platform/workloads/approval-engine/operator-client:
|
|
description: Hold the approval-engine-operator confidential client secret in platform custody and project
|
|
it into the KeyCape runtime so KeyCape can verify presented client_credentials for the operator client.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: KeyCape mints a replacement client secret; platform writes the new
|
|
KV version under the same attended authority. Rotation is independent of CCR-2026-0017.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0018-keycape-approval-engine-operator-client.yaml#lifecycle.rotate;
|
|
railiance-platform/credential-change-requests/CCR-2026-0020-approval-engine-operator-client-read.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0018-keycape-approval-engine-operator-client.yaml
|
|
- CCR-2026-0020-approval-engine-operator-client-read.yaml
|
|
used_by: 'ClusterSecretStore openbao-keycape-approval-engine-operator, limited to namespace sso, to
|
|
ExternalSecret sso/keycape-approval-engine-operator-client and Secret sso/keycape-approval-engine-operator-client
|
|
with key client-secret. KeyCape resolves it as KEYCAPE_APPROVAL_ENGINE_OPERATOR_CLIENT_SECRET through
|
|
a secretKeyRef. Manifests: argocd/platform-addons/openbao-secretstore/openbao-keycape-approval-clients.clustersecretstore.yaml
|
|
and keycape-approval-clients.externalsecrets.yaml.'
|
|
platform/workloads/audit-core/senders:
|
|
description: audit-core sender registry (write and operator-read tokens)
|
|
missing: []
|
|
on_loss: audit-core re-mints sender tokens and every projected copy is reseeded; senders queue to their
|
|
local outboxes meanwhile. See ops-mason/plans/audit-core-openbao-runtime-custody.md.
|
|
owner: ops-mason
|
|
review: accepted
|
|
rotation: ops-warden/wiki/playbooks/audit-core-senders.md#worker-checklist
|
|
sources:
|
|
- ops-warden catalog audit-core-senders
|
|
- ops-mason plan (hand-filled 2026-10-09)
|
|
used_by: audit-core on railiance01 (sender registry authority); seed source for per-sender projections
|
|
such as tenant-engine/audit-core-sender
|
|
platform/workloads/core-hub/forgejo-source-read:
|
|
description: Hold a dedicated Forgejo PAT scoped exactly read:repository and project it through External
|
|
Secrets into namespace core-hub as the Secret that the rapp-core-hub publisher mounts read-only at
|
|
/var/run/secrets/repo-manager/forgejo/token.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Every 180 days or on owner change. Mint a replacement read:repository
|
|
PAT for core-hub-source, write it to OpenBao from stdin, let ESO refresh (5m), pass make verify-publisher,
|
|
then revoke the predecessor PAT and record evidence.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0031-core-hub-forgejo-source-read.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0031-core-hub-forgejo-source-read.yaml
|
|
- ops-warden catalog core-hub-forgejo-source-read
|
|
used_by: ClusterSecretStore openbao-core-hub-forgejo-source (conditions limited to namespace core-hub)
|
|
feeding ExternalSecret core-hub/repo-manager-forgejo-source, which materializes Secret repo-manager-forgejo-source
|
|
with the single key token (remoteRef workloads/core-hub/forgejo-source-read property FORGEJO_SOURCE_TOKEN),
|
|
explicit empty target metadata template, creationPolicy Owner, deletionPolicy Retain. rapp-core-hub
|
|
then sets publisher.existingSecret to repo-manager-forgejo-source with tokenKey token. Both ma
|
|
platform/workloads/core-hub/runtime:
|
|
description: Project the existing Core Hub protected-API token into the private railiance01 runtime
|
|
through a namespace-limited ExternalSecret while preserving the token across the relocation window.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Coordinate a new random token with all protected API consumers, update
|
|
the OpenBao field through attended custody, wait for ESO sync, roll Core Hub and consumers, verify
|
|
protected calls, then invalidate the old token.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0013-core-hub-runtime-api-token.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0013-core-hub-runtime-api-token.yaml
|
|
used_by: ClusterSecretStore openbao-core-hub-runtime, limited to namespace core-hub, to ExternalSecret
|
|
core-hub/core-hub-api-token and Secret core-hub-api-token. The rapp package consumes this Secret separately
|
|
from runtime and migration PostgreSQL lease Secrets.
|
|
platform/workloads/coulomb-social/backup-primary:
|
|
description: Read this application backup publisher key pair into the admitted node delivery process;
|
|
no other workload credential or escrow.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Separate owner-approved CAS rotation and atomic host replacement contract
|
|
required. This helper refuses different existing bytes; retain old provider identity until new publication/recovery
|
|
acceptance, then revoke predecessor at provider.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0036-coulomb-social-backup-primary.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0036-coulomb-social-backup-primary.yaml
|
|
used_by: /etc/coulomb-social-backup/primary.env
|
|
platform/workloads/coulomb/fluid-telegram/hall-of-helix/bot-token:
|
|
description: Telegram bot token for the hall-of-helix campaign bot, created by the provisioner. Not
|
|
the operator session.
|
|
missing: []
|
|
on_loss: Regenerate with BotFather via the operator account (attended) and write a new version; the
|
|
old token stops working.
|
|
owner: fluid-telegram
|
|
review: draft
|
|
rotation: ops-mason/plans/fluid-telegram-operator-credential-lane.md; railiance-platform CCR-2026-0039
|
|
sources:
|
|
- ops-mason plan fluid-telegram-operator-credential-lane.md (approved 2026-10-09)
|
|
used_by: Attended fluid-telegram provisioner only, via bao login -method=oidc -path=netkingdom role=fluid-telegram-hall-of-helix-workload-kv
|
|
(group fluid-telegram-operators, aal2, 15m). Agents are denied (agent-high-risk-boundary). Create,
|
|
read, update. The future adapter lane (MASON-IN-0003) may read it.
|
|
platform/workloads/coulomb/fluid-telegram/hall-of-helix/operator-app:
|
|
description: Telegram API application credentials (api_id, api_hash) for the hall-of-helix provisioner.
|
|
Not a session and not a bot token.
|
|
missing: []
|
|
on_loss: 'Re-create the app at my.telegram.org with the operator''s account and write a new version
|
|
(attended). Cost: provisioning pauses; the existing session and bot keep working.'
|
|
owner: fluid-telegram
|
|
review: draft
|
|
rotation: ops-mason/plans/fluid-telegram-operator-credential-lane.md; railiance-platform CCR-2026-0039
|
|
sources:
|
|
- ops-mason plan fluid-telegram-operator-credential-lane.md (approved 2026-10-09)
|
|
used_by: Attended fluid-telegram provisioner only, via bao login -method=oidc -path=netkingdom role=fluid-telegram-hall-of-helix-workload-kv
|
|
(group fluid-telegram-operators, aal2, 15m). Agents are denied (agent-high-risk-boundary). Read only.
|
|
platform/workloads/coulomb/fluid-telegram/hall-of-helix/operator-session:
|
|
description: 'MTProto session (session_b64) of the operator''s Telegram account: a full-account credential.
|
|
Not the bot token.'
|
|
missing: []
|
|
on_loss: Log in again with the operator's Telegram account through the provisioner (attended, needs
|
|
the phone/2FA) and write a new version. Revoke the old session in Telegram if it may have leaked.
|
|
owner: fluid-telegram
|
|
review: draft
|
|
rotation: ops-mason/plans/fluid-telegram-operator-credential-lane.md; railiance-platform CCR-2026-0039
|
|
sources:
|
|
- ops-mason plan fluid-telegram-operator-credential-lane.md (approved 2026-10-09)
|
|
used_by: Attended fluid-telegram provisioner only, via bao login -method=oidc -path=netkingdom role=fluid-telegram-hall-of-helix-workload-kv
|
|
(group fluid-telegram-operators, aal2, 15m). Agents are denied (agent-high-risk-boundary). Create,
|
|
read, update.
|
|
platform/workloads/coulomb/fluid-telegram/hall-of-helix/redaction-salt:
|
|
description: Redaction salt (salt) for hall-of-helix, created once by the provisioner; write-once.
|
|
missing: []
|
|
on_loss: Not recoverable by design; a new salt changes every redacted identifier. Replacing it is a
|
|
separately approved platform action, not a provisioner capability.
|
|
owner: fluid-telegram
|
|
review: draft
|
|
rotation: ops-mason/plans/fluid-telegram-operator-credential-lane.md; railiance-platform CCR-2026-0039
|
|
sources:
|
|
- ops-mason plan fluid-telegram-operator-credential-lane.md (approved 2026-10-09)
|
|
used_by: Attended fluid-telegram provisioner only, via bao login -method=oidc -path=netkingdom role=fluid-telegram-hall-of-helix-workload-kv
|
|
(group fluid-telegram-operators, aal2, 15m). Agents are denied (agent-high-risk-boundary). Create
|
|
once, read.
|
|
platform/workloads/coulomb/whynot-design/npm-publish:
|
|
description: npm package publishing through ops-warden caller-scoped fetch/exec
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Replace NPM_AUTH_TOKEN value directly in OpenBao and record non-secret
|
|
rotation evidence.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0001-whynot-design-npm-publish.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0001-whynot-design-npm-publish.yaml
|
|
- ops-warden catalog whynot-design-npm-publish
|
|
- railiance-platform reply 3e490cd4 (2026-10-09)
|
|
used_by: Attended whynot-design npm publishing via ops-warden whynot-design-npm-publish (warden access
|
|
... --exec -- npm publish), OIDC role whynot-design-workload-kv-read on auth/netkingdom. Field NPM_AUTH_TOKEN.
|
|
platform/workloads/email-connect/backup-primary:
|
|
description: Read this application backup publisher key pair into the admitted node delivery process;
|
|
no other workload credential or escrow.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Separate owner-approved CAS rotation and atomic host replacement contract
|
|
required. This helper refuses different existing bytes; retain old provider identity until new publication/recovery
|
|
acceptance, then revoke predecessor at provider.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0037-email-connect-backup-primary.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0037-email-connect-backup-primary.yaml
|
|
used_by: /etc/email-connect-backup/primary.env
|
|
platform/workloads/email-connect/transactional:
|
|
description: Deliver EMAIL_CONNECT_INGEST_TOKEN and IONOS SMTP username/password into the email-connect
|
|
namespace via External Secrets so the transactional receiver can send invitation and verification
|
|
mail without baking secrets into the image, Git, or user-engine.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Overlap-first: put new SMTP password and/or ingest token in OpenBao;
|
|
wait for ESO refresh (or force sync); roll email-connect and user-engine as needed; revoke old provider
|
|
password / retire old bearer.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0010-email-connect-transactional.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0010-email-connect-transactional.yaml
|
|
- ops-warden catalog email-connect-transactional
|
|
used_by: ClusterSecretStore openbao-email-connect (tokenSecretRef openbao-email-connect-eso-token; namespace
|
|
condition email-connect) at railiance-platform/argocd/platform-addons/openbao-secretstore/openbao-email-connect.clustersecretstore.yaml
|
|
→ ExternalSecret email-connect/email-connect-runtime → Secret email-connect-runtime. Package manifests
|
|
in email-connect/deploy/k8s/railiance/ (not applied until this CCR is approved and the KV secret is
|
|
provisioned).
|
|
platform/workloads/forgejo/forgejo-admin:
|
|
description: Forgejo admin API token for package prune, registry ops, org webhooks, and operator bootstrap
|
|
on workstations and activity-core worker
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Mint a new PAT in Forgejo, update API_TOKEN in OpenBao, record non-secret
|
|
rotation evidence, and restart dependent automation after downstream consumers load from OpenBao.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0006-forgejo-admin-api-token-lane.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0006-forgejo-admin-api-token-lane.yaml
|
|
- ops-warden catalog forgejo-admin-api-token
|
|
used_by: railiance-platform tools/cmd/forgejo-package-prune, activity-core weekly-forgejo-package-prune
|
|
shell resolver, and railiance-apps Forgejo tools (load_token pattern after lane verified)
|
|
platform/workloads/glas-harness/claude-agent-dev:
|
|
description: Dedicated Claude Code inference for the Glas local agent-dev profile, delivered by the
|
|
sandbox owner.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Create a replacement provider key, write with expected-version CAS,
|
|
stop old runs, verify new delivery and inference, then revoke the predecessor at Anthropic and prove
|
|
its denial.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0016-glas-claude-anthropic.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0016-glas-claude-anthropic.yaml
|
|
used_by: Sand-boxer delivers ANTHROPIC_API_KEY only to the selected Claude workload; neither the Glas
|
|
caller nor the runtime receives an OpenBao token.
|
|
platform/workloads/inbound-library/imap:
|
|
description: inbound-library AppRole for non-interactive library@coulomb.social IMAP read
|
|
missing: []
|
|
on_loss: 'rotate by ops-mason: bao write -f auth/approle/role/inbound-library/secret-id -> new secret_id;
|
|
deliver mode-0600 to ~/.local/inbound-library/approle; shred old secret_id file.'
|
|
owner: ops-mason
|
|
review: accepted
|
|
rotation: ops-warden/wiki/playbooks/inbound-library-imap-approle.md#worker-checklist
|
|
sources:
|
|
- ops-warden catalog inbound-library-imap-approle
|
|
- ops-mason plan (hand-filled 2026-10-09)
|
|
used_by: inbound-library systemd user timer on the workstation, via AppRole inbound-library (reads once
|
|
per run, then revokes its token)
|
|
platform/workloads/informed-decision/audit-sender:
|
|
description: Provide only the informed-decision sender with source=informed-decision, tenants=[tenant:platform],
|
|
may_write=true, may_read=false, evidence_kind=load-bearing, secret_policy=redact.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Reviewed overlap-first rotation: append a replacement to this sender
|
|
only, deliver it, prove acceptance, then remove the predecessor and prove refusal. The first-provision
|
|
helper refuses rotation and unexpected existing values.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0022-informed-decision-audit.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0022-informed-decision-audit.yaml
|
|
used_by: 'ClusterSecretStore openbao-informed-decision-audit restricted to namespace informed-decision;
|
|
ExternalSecret and Secret informed-decision/informed-decision-audit, key token. Source: manifests/factory-audit-senders.yaml.
|
|
A missing namespace stays a workload-owner prerequisite; this packet creates none.'
|
|
platform/workloads/informed-decision/sitting-requester:
|
|
description: create-only sitting requester KeyCape verifier custody; approval:create only; subject informed-decision;
|
|
audience approval-engine.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Rotate through KeyCape and platform using a new version with predecessor
|
|
refusal proof.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0026-informed-decision-sitting-requester-verifier.yaml#lifecycle.rotate;
|
|
railiance-platform/credential-change-requests/CCR-2026-0027-informed-decision-sitting-requester-reader.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0026-informed-decision-sitting-requester-verifier.yaml
|
|
- CCR-2026-0027-informed-decision-sitting-requester-reader.yaml
|
|
- CCR-2026-0032.yaml
|
|
used_by: sso/keycape-informed-decision-sitting-requester-client via ESO; env KEYCAPE_INFORMED_DECISION_SITTING_REQUESTER_CLIENT_SECRET
|
|
platform/workloads/issue-core/issue-core/issue-core-runtime:
|
|
description: issue-core runtime ingestion through OpenBao workload KV and External Secrets
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Replace issue-core runtime secret values directly in OpenBao and record
|
|
non-secret rotation evidence.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0002-issue-core-ingestion-api-key.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0002-issue-core-ingestion-api-key.yaml
|
|
- ops-warden catalog issue-core-ingestion-api-key
|
|
used_by: ExternalSecret issue-core/issue-core-runtime -> Secret issue-core-runtime in the issue-core
|
|
namespace
|
|
platform/workloads/keycape/secrets-engine-openbao:
|
|
description: Hold the secrets-engine-openbao client secret authoritatively in platform KV and deliver
|
|
it to the KeyCape issuer through sso-only ESO
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Roll-forward only: custody child writes a new version with cas=<current>
|
|
under a standing rotation approval for this CCR (event-driven + 90d); never a read or restore of an
|
|
old version'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0033.yaml#lifecycle.rotate; railiance-platform/credential-change-requests/CCR-2026-0034.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0033.yaml
|
|
- CCR-2026-0034.yaml
|
|
used_by: sso/keycape-secrets-engine-openbao-client key client-secret; issuer-side delivery only
|
|
platform/workloads/net-kingdom/keycape-factor-issuer:
|
|
description: Renewable login (USERNAME, PASSWORD, REQUEST) of the local privacyIDEA service admin keycape-factor-reader,
|
|
permission tokenlist for realm coulomb only. Used to obtain the short-lived factor-read JWT. Not the
|
|
JWT KeyCape uses, not a privacyIDEA admin credential (pi-admin is operators/privacyidea/pi-admin).
|
|
missing:
|
|
- rotation
|
|
on_loss: 'Resettable by a privacyIDEA administrator via attended pi-admin custody: new password for
|
|
keycape-factor-reader, CAS-write here. Cost: renewal stops; JWT valid up to 2h, then coulomb MFA lookup
|
|
fails closed until restored.'
|
|
owner: railiance-platform
|
|
review: draft
|
|
rotation: ''
|
|
sources:
|
|
- net-kingdom reply 75b48030 (2026-10-09); rotation is a railiance-platform gap
|
|
used_by: CronJob sso/keycape-factor-renewer (own SA, every 10 min, 5-min OpenBao session); writes keycape-factor-read.
|
|
The keycape-factor-read ESO reader is denied this path.
|
|
platform/workloads/net-kingdom/keycape-factor-read:
|
|
description: Deliver only a provider-issued coulomb factor-read JWT to KeyCape, separating it from issuer
|
|
credentials and signing keys.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Issue replacement before expiry, CAS update exact KV, verify ESO projection
|
|
and consumer acceptance; retain no plaintext artifacts.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0023-keycape-factor-read.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0023-keycape-factor-read.yaml
|
|
used_by: Namespace-restricted ClusterSecretStore openbao-keycape-factor-read -> sso/keycape-factor-read
|
|
Secret admin-token. Mount only the JWT in KeyCape; provider password remains in separate custody.
|
|
platform/workloads/policy-nexus/forgejo-source-read:
|
|
description: Hold a dedicated Forgejo PAT with read:repository only and deliver it as the FORGEJO_SOURCE_TOKEN
|
|
secret to the policy-nexus Actions workflow.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Mint a replacement read:repository-only PAT, update OpenBao and the
|
|
Actions secret through attended custody, pass one candidate build, then revoke the predecessor.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0014-policy-nexus-forgejo-source-read.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0014-policy-nexus-forgejo-source-read.yaml
|
|
- ops-warden catalog policy-nexus-forgejo-source-read
|
|
used_by: Repository Actions secret FORGEJO_SOURCE_TOKEN on coulomb/policy-nexus. Delivery is attended
|
|
and must not expose the value in command output, process arguments, Git, State Hub, or workflow logs.
|
|
platform/workloads/railiance-clock/authority-signing:
|
|
description: Hold one ES256 authority private signing key in OpenBao and deliver it only to the private
|
|
railiance01 Railiance Clock service; no public listener or consumer-wide distribution.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Stop authority, perform separately versioned attended CAS rotation
|
|
and atomic host replacement, then admit new public key and epoch for consumers.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0028-railiance-clock-authority-signing.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0028-railiance-clock-authority-signing.yaml
|
|
used_by: /var/lib/railiance-clock/signing.pem
|
|
platform/workloads/railiance-telemetry/smtp:
|
|
description: Native password-reset notifier; password mounted read-only under /run/secrets/authelia-smtp/password.
|
|
missing: []
|
|
on_loss: 'Resettable by the founder in IONOS mail admin; write a new KV version keeping the other fields,
|
|
wait for ESO refresh. Cost: alert mail and Authelia reset emails fail until then; no data loss.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0035-authelia-platform-smtp.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0035-authelia-platform-smtp.yaml
|
|
- railiance-platform reply 3e490cd4 (2026-10-09)
|
|
used_by: railiance-telemetry alert mail (ESO telemetry-smtp-eso -> Secret telemetry/telemetry-alert-smtp,
|
|
SMTP_PASSWORD only) and the Authelia password-reset notifier (CCR-2026-0035, /run/secrets/authelia-smtp/password).
|
|
Mailbox platform@coulomb.social at IONOS.
|
|
platform/workloads/railiance/backup/object-storage:
|
|
description: Object-store credentials for Railiance backup destinations.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Overlap-first. Put a new key in OpenBao, wait for ESO refresh, revoke
|
|
the old Scaleway key.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0012-backup-object-storage.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0012-backup-object-storage.yaml
|
|
used_by: 'ClusterSecretStore openbao-backup-object-storage (first namespace condition: databases) →
|
|
ExternalSecret databases/platform-pg-backup-s3 → Secret platform-pg-backup-s3 (ACCESS_KEY_ID / ACCESS_SECRET_KEY
|
|
projected from ACCESS_KEY / SECRET_KEY). Drafts live under railiance-platform/argocd/platform-addons/openbao-secretstore/
|
|
and rapp-postgres/helm/platform-pg-backup-s3.externalsecret.yaml. Do not apply until this CCR is approved
|
|
and the KV values are real.'
|
|
platform/workloads/railiance/backup/offsite-lane:
|
|
description: age-encrypted offsite backup upload through Nextcloud WebDAV file drop
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Mint a new Nextcloud upload token, update NC_WEBDAV_TOKEN in OpenBao,
|
|
and record non-secret rotation evidence.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0004-railiance-backup-offsite-lane.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0004-railiance-backup-offsite-lane.yaml
|
|
- ops-warden catalog railiance-backup-offsite-lane
|
|
used_by: railiance-platform lib/railiance-backup-common.sh and forgejo-backup via RAILIANCE_BACKUP_NC_TOKEN
|
|
env (fetched through OpenBao or warden access)
|
|
platform/workloads/railiance/scaleway/bootstrap:
|
|
description: Create reef-storage object-store members; not the Barman runtime key
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Put a new bootstrap key; do not reuse the scoped backup key.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0011-scaleway-object-storage-bootstrap.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0011-scaleway-object-storage-bootstrap.yaml
|
|
- ops-warden catalog scaleway-bootstrap
|
|
used_by: reef-storage/tools/create-platform-audit-bucket.sh (reads, never prints)
|
|
platform/workloads/rapp-qonto/keycape-client:
|
|
description: rapp-qonto KeyCape workload client
|
|
missing: []
|
|
on_loss: 'rotate by key-cape: Generate a fresh newline-free secret through an approved execution transport;
|
|
never print it. NOT automatable — no admitted execution and rollback contract (see delegation.blocked_on).'
|
|
owner: key-cape
|
|
review: accepted
|
|
rotation: ops-warden/wiki/CredentialRouting.md#routing-catalog-index
|
|
sources:
|
|
- ops-warden catalog rapp-qonto-keycape-client
|
|
- key-cape reply 40395cc2 (2026-10-10)
|
|
used_by: (1) KeyCape via ESO -> Secret sso/keycape-rapp-qonto-client key client-secret, to verify client_credentials
|
|
for rapp-qonto-client. (2) The rapp-qonto runtime, presenting it to keycape service-token; its delivery
|
|
transport is for railiance-apps/rapp-qonto to name.
|
|
platform/workloads/reuse/reuse-surface/runtime-secrets:
|
|
description: reuse-surface federation hub runtime secrets through OpenBao workload KV and External Secrets
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Replace field values directly in OpenBao, wait for ESO refresh, rollout
|
|
reuse-surface, then run make reuse-forgejo-webhook when rotating the webhook HMAC.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0005-reuse-surface-runtime-secrets-lane.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0005-reuse-surface-runtime-secrets-lane.yaml
|
|
- ops-warden catalog reuse-surface-hub-write-token
|
|
- ops-mason plan reuse-surface-hub-writer (MASON-WP-0011)
|
|
- CCR-2026-0044-reuse-surface-hub-writer-caller.yaml (proposed; role not applied)
|
|
used_by: ExternalSecret reuse/reuse-surface-runtime -> Secret reuse-surface-env; ClusterSecretStore
|
|
openbao-reuse uses private railiance01 OpenBao and exact reuse/reuse-surface-eso Kubernetes identity.
|
|
Caller-facing OIDC policy workload-kv-read-reuse-surface-runtime remains separately retained.
|
|
The dedicated caller is OIDC role reuse-surface-hub-writer-workload-kv-read, not the platform-admin entity.
|
|
platform/workloads/secrets-engine/approval-client:
|
|
description: Hold the secrets-engine-approval confidential client secret in platform custody and project
|
|
it into the KeyCape runtime so KeyCape can verify presented client_credentials without the value living
|
|
in Git, a chart value, or a hand-created Kubernetes Secret.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: KeyCape mints a replacement client secret; platform writes the new
|
|
KV version under the same attended authority; ESO refresh delivers it and KeyCape restarts or re-reads.
|
|
Rotation is independent of the operator client.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0017-keycape-secrets-engine-approval-client.yaml#lifecycle.rotate;
|
|
railiance-platform/credential-change-requests/CCR-2026-0019-secrets-engine-approval-client-read.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0017-keycape-secrets-engine-approval-client.yaml
|
|
- CCR-2026-0019-secrets-engine-approval-client-read.yaml
|
|
used_by: 'ClusterSecretStore openbao-keycape-secrets-engine-approval, limited to namespace sso, to ExternalSecret
|
|
sso/keycape-secrets-engine-approval-client and Secret sso/keycape-secrets-engine-approval-client with
|
|
key client-secret. KeyCape resolves it as KEYCAPE_SECRETS_ENGINE_APPROVAL_CLIENT_SECRET through a
|
|
secretKeyRef, matching the live KEYCAPE_RAPP_QONTO_CLIENT_SECRET shape observed on image main-153258b.
|
|
Manifests: argocd/platform-addons/openbao-secretstore/openbao-keycape-approval-clients.clustersecretstor'
|
|
platform/workloads/secrets-engine/approval-requester:
|
|
description: T03 create-only requester KeyCape verifier custody; execute only the three fixed T03 request
|
|
records.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Rotate through KeyCape and platform using a new version with predecessor
|
|
refusal proof.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0024-t03-requester-verifier.yaml#lifecycle.rotate;
|
|
railiance-platform/credential-change-requests/CCR-2026-0025-t03-requester-reader.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0024-t03-requester-verifier.yaml
|
|
- CCR-2026-0025-t03-requester-reader.yaml
|
|
used_by: sso/keycape-secrets-engine-requester-client via ESO; env KEYCAPE_SECRETS_ENGINE_REQUESTER_CLIENT_SECRET
|
|
platform/workloads/state-hub/repository-rename-preflight:
|
|
description: Deliver one HMAC signing key to the transitional State Hub API; no rename execution, general
|
|
credential vending, or second identity authority.
|
|
missing: []
|
|
on_loss: 'Re-issue per rotation: Stop every API replica and verify no matching pods before CAS rotation;
|
|
wait ESO, recreate API replicas with one version, verify old token invalidation and health.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: railiance-platform/credential-change-requests/CCR-2026-0015-state-hub-preflight-signing.yaml#lifecycle.rotate
|
|
sources:
|
|
- CCR-2026-0015-state-hub-preflight-signing.yaml
|
|
used_by: Namespace SecretStore openbao-state-hub-rename-preflight -> ExternalSecret/Secret state-hub-rename-preflight;
|
|
required explicit API-only secretKeyRef. Owner creation, Retain deletion policy.
|
|
platform/workloads/telemetry/grafana-admin:
|
|
description: Grafana native administrator for rapp-telemetry on railiance01 (ADMIN_USERNAME, ADMIN_PASSWORD),
|
|
the attended bootstrap credential.
|
|
missing: []
|
|
on_loss: 'Resettable by a cluster operator with Grafana''s admin reset in the pod, then a new KV version
|
|
(not yet exercised). Cost: short loss of admin access; dashboards and data unaffected.'
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: 'railiance-platform/docs/credential-lane-designs/telemetry-grafana.md (attended: change the
|
|
Grafana DB admin password and OpenBao together, then test old fails and new works)'
|
|
sources:
|
|
- railiance-platform reply 3e490cd4 (2026-10-09)
|
|
used_by: Grafana in namespace telemetry via ExternalSecret telemetry-grafana-admin (ESO SA/role telemetry-grafana-eso,
|
|
policy telemetry-grafana-admin-eso), plus the attended check scripts/telemetry_grafana_access.py.
|
|
platform/workloads/tenant-engine/audit-core-sender:
|
|
description: tenant-engine's audit-core sender token, a copy of its entry in the audit-core sender registry.
|
|
Not the registry itself.
|
|
missing: []
|
|
on_loss: Reseed from platform/workloads/audit-core/senders with the seed helper (founder, attended).
|
|
audit-core re-mints if the registry entry is also gone; emission waits in tenant-engine's local outbox
|
|
meanwhile.
|
|
owner: railiance-platform
|
|
review: accepted
|
|
rotation: ops-mason/plans/tenant-engine-audit-core-sender-projection.md; reseed with railiance-platform/scripts/tenant_engine_audit_core_sender_seed.py
|
|
sources:
|
|
- ops-mason plan (hand-filled 2026-10-09)
|
|
used_by: ESO ClusterSecretStore openbao-tenant-engine-audit-core-sender (k8s role tenant-engine-audit-core-sender-eso)
|
|
-> Secret tenant-engine/tenant-engine-audit-core-sender key token
|
|
platform/workloads/user-engine/runtime:
|
|
description: 'user-engine runtime secrets: the portal edge marker and the identity-provisioner service
|
|
token. Not a user credential.'
|
|
missing:
|
|
- on_loss
|
|
on_loss: ''
|
|
owner: railiance-platform
|
|
review: draft
|
|
rotation: 'ops-mason/plans/user-engine-openbao-runtime-custody.md (rows 8-9: ExternalSecret is the sole
|
|
writer and rotation path)'
|
|
sources:
|
|
- ops-mason plan (hand-filled 2026-10-09)
|
|
used_by: user-engine and identity-provisioner via External Secrets Operator
|