The reported uuid is not an OpenBao entity.

OpenBao has no entity f94b7c34-e151-30bb-b473-df3ccdbb9bf1 and no entity named bernd.worsch-3. T02 waits for the entity created at first login. The member receipt still rejects the admin entity.

Assistant: grok
Assistant-Session: 01a13b2d-5f6d-7a32-b2c9-384625c55ca6
This commit is contained in:
tegwick 2026-10-14 19:47:25 +02:00
parent a7f9516bb3
commit 0af5a09e89
6 changed files with 35 additions and 41 deletions

View file

@ -2,17 +2,15 @@
# Custodian Brief — ops-mason # Custodian Brief — ops-mason
**Domain:** infotech **Domain:** infotech
**Last synced:** 2026-10-14 17:24 UTC **Last synced:** 2026-10-14 17:37 UTC
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)* **State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
## Active Workstreams ## Active Workstreams
### Name a dedicated caller for the reuse-surface hub writer token ### Name a dedicated caller for the reuse-surface hub writer token
Progress: 1/4 done | workplan_id: `08e52353-b6e5-5742-b7b4-080d51a0cf57` Progress: 2/4 done | workplan_id: `08e52353-b6e5-5742-b7b4-080d51a0cf57`
**Open tasks:** **Open tasks:**
- ! Confirm the group and the member entity `9863b4b8`
*(wait: Group reuse-surface-hub-writers exists; member is bernd.worsch-3, and that user has a second factor (founder, 2026-10-14). OpenBao entity id is still unrecorded and must not be 4a1f663c-0621-0483-edd0-f852274f4b6b. bound_claims_confirmed stays false until that check.)*
- ! Apply the role without a KV write `7c32e273` - ! Apply the role without a KV write `7c32e273`
*(wait: After T02. Founder applies proposed CCR-2026-0044 through the delegated applier. No bao kv put. Do not attach the policy to the admin entity.)* *(wait: After T02. Founder applies proposed CCR-2026-0044 through the delegated applier. No bao kv put. Do not attach the policy to the admin entity.)*
- ! Record the sanitized receipt `9e12db29` - ! Record the sanitized receipt `9e12db29`

View file

@ -8,8 +8,8 @@ Plan: `plans/reuse-surface-hub-writer.md`. Filed request:
Run this only after CCR-2026-0044 is approved and applied. LLDAP group Run this only after CCR-2026-0044 is approved and applied. LLDAP group
`reuse-surface-hub-writers` exists with member `bernd.worsch-3`, and that `reuse-surface-hub-writers` exists with member `bernd.worsch-3`, and that
user enrolled a second factor on 2026-10-14. `member` still has to be a user enrolled a second factor on 2026-10-14. `member` still has to be a
login that KeyCape marks `/assurance/level=aal2`. The member entity is login that KeyCape marks `/assurance/level=aal2`. The reported uuid
`f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. A token for `f94b7c34-e151-30bb-b473-df3ccdbb9bf1` is not an OpenBao entity. A token for
`4a1f663c-0621-0483-edd0-f852274f4b6b` fails. Later groups of this `4a1f663c-0621-0483-edd0-f852274f4b6b` fails. Later groups of this
shape go through shape go through
identity-provisioner `POST /v1/groups/ensure`; see identity-provisioner `POST /v1/groups/ensure`; see

View file

@ -76,10 +76,10 @@ SEC-DSM §37, in order:
OpenBao can use a person or service identity. Do not create a secret to OpenBao can use a person or service identity. Do not create a secret to
stand in for the caller. stand in for the caller.
- Q2. OpenBao accepts OIDC on `auth/netkingdom`. Use that. A KeyCape group - Q2. OpenBao accepts OIDC on `auth/netkingdom`. Use that. A KeyCape group
selects the principal. The recorded member entity is selects the principal. The principal's OpenBao entity must not be
`f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. It must not be
`4a1f663c-0621-0483-edd0-f852274f4b6b` and must not carry `platform-admin` `4a1f663c-0621-0483-edd0-f852274f4b6b` and must not carry `platform-admin`
or `operator-custody`. or `operator-custody`. The uuid `f94b7c34-e151-30bb-b473-df3ccdbb9bf1` is
not an OpenBao entity.
- Q3. The OpenBao token is a 15-minute service token from the role. The hub - Q3. The OpenBao token is a 15-minute service token from the role. The hub
bearer stays the static field already in KV. No new issuance layer. bearer stays the static field already in KV. No new issuance layer.
- Q4. Rotation of the hub bearer stays CCR-2026-0005. This plan does not - Q4. Rotation of the hub bearer stays CCR-2026-0005. This plan does not
@ -103,9 +103,8 @@ static bearer for the hub. Not a new static secret and not a new AppRole.
true, TTL 15m, max 30m, group `reuse-surface-hub-writers`, assurance true, TTL 15m, max 30m, group `reuse-surface-hub-writers`, assurance
`aal2`. Callbacks are the workstation URIs above. `aal2`. Callbacks are the workstation URIs above.
3. `create` KeyCape group `reuse-surface-hub-writers` with member 3. `create` KeyCape group `reuse-surface-hub-writers` with member
`bernd.worsch-3`, entity `f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. `bernd.worsch-3`. The OpenBao entity is created on first login. The
`bound_claims_confirmed` stays false on the filed role. The member member receipt rejects the admin entity and any token that also carries
receipt rejects any other entity and any token that also carries
`platform-admin` or `operator-custody`. `platform-admin` or `operator-custody`.
4. No KV write. No attachment of this policy, or of 4. No KV write. No attachment of this policy, or of
`workload-kv-read-reuse-surface-runtime-eso`, to entity `workload-kv-read-reuse-surface-runtime-eso`, to entity
@ -172,7 +171,8 @@ Not applied. No live receipt yet.
(`88b4aed`, message `14e23602`). The live policy file stays as it was until (`88b4aed`, message `14e23602`). The live policy file stays as it was until
apply. The founder created LLDAP group `reuse-surface-hub-writers` with apply. The founder created LLDAP group `reuse-surface-hub-writers` with
member `bernd.worsch-3`. On 2026-10-14 that user enrolled a second factor. member `bernd.worsch-3`. On 2026-10-14 that user enrolled a second factor.
`tegwick` is not the member. The founder reported OpenBao entity `tegwick` is not the member. The founder reported uuid
`f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. `bound_claims_confirmed` stays false `f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. OpenBao has no entity with that id
on the filed role. A passing login still has to present and no entity named `bernd.worsch-3`. CCR-2026-0044 is approved in
`/assurance/level=aal2` and that entity id. railiance-platform `8655857`, with the group and `aal2` binding confirmed.
A passing login still has to present `/assurance/level=aal2`.

View file

@ -9,7 +9,6 @@ from __future__ import annotations
POLICY = "workload-kv-read-reuse-surface-runtime" POLICY = "workload-kv-read-reuse-surface-runtime"
ROLE = "reuse-surface-hub-writer-workload-kv-read" ROLE = "reuse-surface-hub-writer-workload-kv-read"
FORBIDDEN_ENTITY_ID = "4a1f663c-0621-0483-edd0-f852274f4b6b" FORBIDDEN_ENTITY_ID = "4a1f663c-0621-0483-edd0-f852274f4b6b"
MEMBER_ENTITY_ID = "f94b7c34-e151-30bb-b473-df3ccdbb9bf1"
FORBIDDEN_POLICIES = frozenset( FORBIDDEN_POLICIES = frozenset(
{ {
"default", "default",
@ -40,9 +39,9 @@ def assess(report: dict) -> list[str]:
"""Return the reasons a login report fails. An empty list is a pass. """Return the reasons a login report fails. An empty list is a pass.
``non-member`` passes only when login was refused. ``member`` passes only ``non-member`` passes only when login was refused. ``member`` passes only
when the token's policy set is exactly the workload policy, the token's when the token's policy set is exactly the workload policy, the token is
entity is the recorded member entity, the two exact paths are read-only, not the platform-admin entity, the two exact paths are read-only, the
the parent and a sibling workload are denied, and the token was revoked. parent and a sibling workload are denied, and the token was revoked.
""" """
mode = report.get("mode") mode = report.get("mode")
if mode not in {"member", "non-member"}: if mode not in {"member", "non-member"}:
@ -74,10 +73,8 @@ def assess(report: dict) -> list[str]:
failures.append( failures.append(
"token belongs to the platform-admin entity; do not attach this policy to it" "token belongs to the platform-admin entity; do not attach this policy to it"
) )
elif entity_id != MEMBER_ENTITY_ID: if not entity_id:
failures.append( failures.append("token lookup did not report an entity id")
f"token entity {entity_id or '<missing>'} is not the member entity {MEMBER_ENTITY_ID}"
)
for path in EXACT_READ: for path in EXACT_READ:
caps = _caps(report, path) caps = _caps(report, path)

View file

@ -1,7 +1,6 @@
from ops_mason.reuse_surface_hub_writer import ( from ops_mason.reuse_surface_hub_writer import (
DATA, DATA,
FORBIDDEN_ENTITY_ID, FORBIDDEN_ENTITY_ID,
MEMBER_ENTITY_ID,
METADATA, METADATA,
PARENT_DATA, PARENT_DATA,
POLICY, POLICY,
@ -16,7 +15,7 @@ def member(**overrides):
"login": "ok", "login": "ok",
"policies": [POLICY], "policies": [POLICY],
"identity_policies": [], "identity_policies": [],
"entity_id": MEMBER_ENTITY_ID, "entity_id": "11111111-1111-1111-1111-111111111111",
"capabilities": { "capabilities": {
DATA: ["read"], DATA: ["read"],
METADATA: ["read"], METADATA: ["read"],
@ -55,9 +54,8 @@ def test_admin_entity_and_broad_capabilities_fail():
assert any("not exactly" in item for item in failures) assert any("not exactly" in item for item in failures)
def test_other_entity_fails(): def test_missing_entity_fails():
failures = assess(member(entity_id="11111111-1111-1111-1111-111111111111")) assert any("entity id" in item for item in assess(member(entity_id="")))
assert any("not the member entity" in item for item in failures)
def test_missing_revoke_fails(): def test_missing_revoke_fails():

View file

@ -61,8 +61,10 @@ file is unchanged until that apply.
```task ```task
id: MASON-WP-0011-T02 id: MASON-WP-0011-T02
status: done status: wait
depends_on: [MASON-WP-0011-T01] depends_on: [MASON-WP-0011-T01]
blocked_on: human
blocking_reason: "f94b7c34-e151-30bb-b473-df3ccdbb9bf1 is not an OpenBao entity, and no entity is named bernd.worsch-3. The OpenBao entity is created on first login. It must not be 4a1f663c-0621-0483-edd0-f852274f4b6b."
priority: high priority: high
state_hub_task_id: "9863b4b8-fcff-5eec-86f9-7249b66c4700" state_hub_task_id: "9863b4b8-fcff-5eec-86f9-7249b66c4700"
``` ```
@ -74,23 +76,22 @@ member. On 2026-10-14 the founder enrolled a second factor for
`bernd.worsch-3` at privacyIDEA self-service `bernd.worsch-3` at privacyIDEA self-service
(`https://pink-account.coulomb.social/`, realm `coulomb`). A later login can (`https://pink-account.coulomb.social/`, realm `coulomb`). A later login can
carry `/assurance/level=aal2` only when that login is challenged for the carry `/assurance/level=aal2` only when that login is challenged for the
factor. The founder reported the OpenBao entity id factor. The founder reported uuid `f94b7c34-e151-30bb-b473-df3ccdbb9bf1`.
`f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. That id is not An attended OpenBao read on 2026-10-14 found no entity with that id and no
`4a1f663c-0621-0483-edd0-f852274f4b6b`. The member receipt must be this entity named `bernd.worsch-3`. The OpenBao entity is created on the first
entity, and its effective policies must be exactly login. The member receipt must not be
`workload-kv-read-reuse-surface-runtime`, which fails if the entity carries `4a1f663c-0621-0483-edd0-f852274f4b6b`, and its effective policies must be
`platform-admin` or `operator-custody`. This session did not read the exactly `workload-kv-read-reuse-surface-runtime`.
entity's policy names.
The automatic group path is identity-provisioner `POST /v1/groups/ensure`, The automatic group path is identity-provisioner `POST /v1/groups/ensure`,
not user-engine and not ops-mason. See `docs/directory-group-binding.md`. not user-engine and not ops-mason. See `docs/directory-group-binding.md`.
The LLDAP maintenance helper does not create this group name. The LLDAP maintenance helper does not create this group name.
`bound_claims_confirmed` stays false on the filed role. CCR-2026-0044 stays CCR-2026-0044 is approved in railiance-platform `8655857`. The group and
proposed until platform-operator and reuse-surface-owner approve. `aal2` binding are confirmed. The OpenBao entity id is still unknown.
Done 2026-10-14. Group, member, second factor, and entity id are recorded. 2026-10-14: group, member, and second factor are recorded. The OpenBao
The verifier pins `f94b7c34-e151-30bb-b473-df3ccdbb9bf1`. entity id is not. T02 stays wait until the member login reports it.
## Apply the role without a KV write ## Apply the role without a KV write