WARDEN-WP-0031 T04: prove ops-warden's caller identity against the live pin
flex-auth's binding names system:serviceaccount:ops-warden:ops-warden, and that ServiceAccount did not exist. deploy/kubernetes/caller-identity.yaml creates it plus its namespace — no RBAC, automount off; it is never used to call the Kubernetes API, only to be TokenReviewed. Applied to the railiance01 cluster. Operator warden.yaml now uses caller_auth mode: command (kubectl create token, audience flex-auth, 10m). Gate exits 0 live against a port-forward of the pin: HTTP 200, effect=allow, decision:f3f7c88f9585582a. The evidence is not that allow — warn allows anonymous callers too. It is that the pin's "caller authentication warning" count held at 4 across two authenticated runs. That is the ADHOC-2026-08-17-T01 condition. Also gives the readiness probe a structurally complete context, so a deny means the policy said no rather than the probe being malformed. policy.enabled stays false. T05 waits on flex-auth setting callerAuth.mode: enforce (their FLEX-WP-0016 T03). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
9b9bfe565a
commit
654c05dece
5 changed files with 166 additions and 3 deletions
|
|
@ -97,7 +97,11 @@ def run_checks(config_path: Optional[Path], url: Optional[str]) -> List[Check]:
|
|||
import httpx # local import: the offline checks above must not need it
|
||||
|
||||
probe = {
|
||||
"subject": {"id": "readiness", "type": "agt", "tenant": policy.tenant},
|
||||
"subject": {
|
||||
"id": "agt-state-hub-bridge",
|
||||
"type": "agt",
|
||||
"tenant": policy.tenant,
|
||||
},
|
||||
"action": "sign",
|
||||
"resource": {
|
||||
"id": "ssh-cert:actor/agt-state-hub-bridge",
|
||||
|
|
@ -105,7 +109,17 @@ def run_checks(config_path: Optional[Path], url: Optional[str]) -> List[Check]:
|
|||
"system": policy.system,
|
||||
"tenant": policy.tenant,
|
||||
},
|
||||
"context": {"readiness_probe": True},
|
||||
"context": {
|
||||
# A structurally complete context, so a deny means the policy said
|
||||
# no — not that the probe was malformed. What is under test here is
|
||||
# the caller identity, and that is answered by the HTTP status.
|
||||
"actor_name": "agt-state-hub-bridge",
|
||||
"actor_type": "agt",
|
||||
"principals": ["agt-task-bridge"],
|
||||
"ttl_hours": 24,
|
||||
"pubkey_fingerprint": "sha256:" + "0" * 64,
|
||||
"readiness_probe": True,
|
||||
},
|
||||
}
|
||||
try:
|
||||
response = httpx.post(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue