net-kingdom/tools/service-identity/declarations/privacyidea.yaml
tegwick ac66753bd4
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
NK-WP-0054-T03b: declarations and validator migrated to canon grants (draft-3)
Schema, validator, fixtures, declarations and tests (40 pass) now use the imported
principal_type and authority grants MODE @ SCOPE with activation and environments,
estate conventions bind and service-admin, unknown placeholders, and an elimination
path on every exception. SI-4 and SI-7 became decidable. Before/after over the same
declarations: 1/11/2/5/6 to 1/10/2/5/7 (non-conformant/unknown/excepted/planned/
conformant); the only move is KeyCape's secrets-engine-openbao client, whose scope is
established. lldap/admin is now also excepted under SI-4.

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 328925@bnt-lap001
Assistant-Session: 14b795fd-c632-4c01-8d28-e7e490c7b0ed
2026-10-24 23:35:30 +02:00

56 lines
2.6 KiB
YAML

schema_version: "0.1"
service: privacyidea
owner: "MFA and privacyIDEA owners (NetKingdom)"
declared_at: 2026-10-24
attestation:
authored_by: claude-code
basis: [sso-mfa/k8s/privacyidea/README.md, sso-mfa/k8s/privacyidea/bootstrap-admin.py, sso-mfa/k8s/keycape/deployment.yaml, docs/service-identity-inventory.md]
owner_confirmed: false
complete: false
identities:
- name: pi-admin
principal_type: HUMAN
conventions: [service-admin]
purpose: "privacyIDEA's local administrator; policy pi-admin-all-rights restricted to adminuser=pi-admin"
grants: [{mode: ADMINISTER, scope: privacyidea, activation: STANDING, environments: [PRODUCTION]}]
interactive_login: true
second_factor: unknown
custody: [personal-safe]
consumers: [{name: founder, kind: person}]
owner: "Founder and MFA owners"
rotation: {path: "bootstrap-admin custody entry; password changes are a separate procedure", coupling: []}
status: active
recovery: {needed: true, works_with_sso_down: true, in_crisis_list: true}
- name: trigger-admin
principal_type: unknown
conventions: [service-admin]
purpose: "Legacy Keycloak-era administrator account, policy and Secret; who presents it is not established"
grants: [{mode: ADMINISTER, scope: privacyidea, activation: STANDING, environments: [PRODUCTION]}]
interactive_login: false
second_factor: unknown
custody: [delivered-secret]
consumers: []
owner: "MFA owners; revocation decided under NK-WP-0049-T22"
rotation: {path: "None established; revocation needs a separate approval", coupling: []}
status: legacy
disposition: {action: defer, owner: "Founder", date: 2026-12-31}
- name: keycape-factor-reader
principal_type: SERVICE
purpose: "KeyCape's access to read factor state; delivered by railiance-platform (RPF-WP-0040)"
grants: [{mode: unknown, scope: privacyidea, note: "exact rights not established"}]
interactive_login: false
second_factor: not_applicable
custody: [delivered-secret]
consumers: [{name: keycape, kind: service}]
owner: "railiance-platform and key-cape"
rotation: {path: "Renewed by policy keycape-factor-renewer through ESO", coupling: [keycape]}
status: active
exceptions:
- id: SI-X3
rules: [NAMING]
identity: trigger-admin
reason: "Legacy account whose name does not follow the admin naming form and whose consumers are uninventoried"
owner: "Founder"
expires: 2026-12-31
compensating_control: "Not provisioned by the current bootstrap"
elimination_path: "Revocation or acceptance under NK-WP-0049-T22"