railiance-platform/credential-change-requests/CCR-2026-0040-keycape-client-secret-generate-grant.yaml
codex c924ff2279
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
RPF-WP-0054-T05 probe passed; publish secrets-engine JWT login contract
- CCR-2026-0040/0043 re-applied 2026-10-10T09:15Z. Probe: generated v1, a
  second run refused (already_present), tokens revoked, no value read,
  probe entry deleted. Receipts in docs/evidence.
- CCR-2026-0038: login proof passed (secrets-engine a963a77); the consumer
  contract is published at docs/contracts/secrets-engine-openbao-jwt-login.yaml.
  RPF-WP-0035-T02 still waits on the negative claim checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 469992@bnt-lap001
Assistant-Session: e4b8e420-df0a-441d-83ae-7f19130594d9
2026-10-10 11:18:38 +02:00

105 lines
4.7 KiB
YAML

id: CCR-2026-0040
kind: credential-change-request
schema_version: 1
request_type: custody-generate-grant
title: Broker grant keycape/client-secret-generate (create-only, generate in custody)
status: applied
created: '2026-10-09'
updated: '2026-10-10'
requester:
agent: railiance-platform
reason: RPF-WP-0054-T04. net-kingdom SecurityCaseType oidc-browser-relying-party
step mint-secret (lane keycape-client-secret-generate); ops-warden d9f889b1, ops-mason
789feb39. Founder chose the templated create-only grant 2026-10-09 (T02 option
A).
review:
required: true
required_approvers:
- platform-owner
- key-cape-owner
comments:
- at: '2026-10-09T17:18:53+00:00'
reviewer: platform-owner, key-cape-owner (founder Bernd Worsch)
decision: approved
comment: Approve create-only broker grant keycape/client-secret-generate (RPF-WP-0054-T02
option A).
target:
domain: infotech
tenant: platform
workload: keycape
environment: production
purpose: Let the credential broker create a new KeyCape confidential-client secret
at platform/workloads/keycape/<client_id> once, without any value leaving custody.
openbao:
grant_id: keycape/client-secret-generate
kv_prefix: platform/workloads/keycape
reserved_entries:
- secrets-engine-openbao
policy_name: keycape-client-secret-generate
policy_file: openbao/policies/keycape-client-secret-generate.hcl
issuer_policy: credential-broker-keycape-client-secret-generate-issuer
issuer_policy_file: openbao/policies/credential-broker-keycape-client-secret-generate-issuer.hcl
token_role: keycape-client-secret-generate
token_ttl: 5m
founder_confirmation_items:
- This apply writes two policies and one token role. It binds the issuer policy to
no identity, so nothing can mint the token until a separate review binds it to the
caller named in RPF-WP-0054-T01.
- Create-only on keycape/+ means a token can create a new client entry once and can
never change an existing one. Its widest misuse is an unused entry for a client
that does not exist.
access_frontdoor:
type: none
catalog_id: none
risk:
level: medium
notes:
- No data read, no update, no metadata write, no list, no delete. Exact denies on
reserved entries take precedence over the + glob.
- The token lives at most 5m and only inside the broker process.
verification:
positive:
- Readback after apply matches source for both policies and the token role (done
by applier-apply; prints nothing).
- Disposable probe (T05) creates probe-secret-generate-<date> at version 1.
negative:
- A second create on the probe path, a data read, update, delete and any path outside
keycape/ are denied for the grant token (sys/capabilities-self).
- The reserved entry keycape/secrets-engine-openbao reports deny on data and metadata.
activation_conditions:
- Founder approval (two reviews).
- Issuer binding reviewed after RPF-WP-0054-T01; probe passed (T05).
evidence:
- at: '2026-10-09T17:19:06+00:00'
actor: founder
kind: delegated_metadata_apply
result: passed
details:
- Delegated metadata applier ran as founder using local bao CLI ambient authority.
- 'Policy metadata write: sys/policies/acl/keycape-client-secret-generate'
- 'Issuer policy metadata write: sys/policies/acl/credential-broker-keycape-client-secret-generate-issuer'
- 'Token role metadata write: auth/token/roles/keycape-client-secret-generate'
- Readback matched source for both policies and the token role.
- Issuer policy is not bound to any identity by this apply.
- No secret values were read, written, printed, or accepted in argv.
- at: '2026-10-10T09:15:46+00:00'
actor: founder
kind: delegated_metadata_apply
result: passed
details:
- Delegated metadata applier ran as founder using local bao CLI ambient authority.
- 'Policy metadata write: sys/policies/acl/keycape-client-secret-generate'
- 'Issuer policy metadata write: sys/policies/acl/credential-broker-keycape-client-secret-generate-issuer'
- 'Token role metadata write: auth/token/roles/keycape-client-secret-generate'
- Readback matched source for both policies and the token role.
- Issuer policy is not bound to any identity by this apply.
- No secret values were read, written, printed, or accepted in argv.
lifecycle:
deactivate: Delete auth/token/roles/keycape-client-secret-generate, then both policies;
generated entries stay in custody with their cases.
rotate: Not applicable; rotation is a separate lane (RPF-WP-0054-T07).
compromised: Delete the token role and revoke outstanding tokens by accessor; review
metadata for entries without an accepted case.
state_hub:
workplan: RPF-WP-0054
task: RPF-WP-0054-T04