#!/usr/bin/env python3 """Attended native reader/ESO verification; only closed booleans leave custody.""" import argparse import hashlib import importlib.util import json import os from pathlib import Path import sys HERE=Path(__file__).resolve().parent def load(name): spec=importlib.util.spec_from_file_location(name,HERE/(name+'.py')) m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m);return m setup=load('identity-credential-setup');runtime=load('identity-runtime') from state_hub_preflight_lane import bao,data,capabilities,revoke def verify(action,expected,receipt,kubeconfig): receipt['phase']='validate_approved_contract' ccr,lane=setup.contract(action,expected) receipt['phase']='verify_attended_identity' ident=data(bao(['token','lookup','-format=json']))['data'] if 'platform-admin' not in ident.get('policies',[]) or 'root' in ident.get('policies',[]) or not ident.get('path','').startswith('auth/netkingdom/'):raise setup.Refused() capture=runtime.capture;capture.KUBE=['kubectl','--kubeconfig',kubeconfig] receipt['phase']='verify_cluster_identity' if capture.get(None,'namespace','kube-system')['metadata']['uid']!=capture.prepare.CLUSTER_UID:raise setup.Refused() def login(sa,audience,negative=False,namespace='sso'): jwt=capture.command(['-n',namespace,'create','token',sa,'--audience='+audience,'--duration=10m']).decode().strip() result=bao(['write','-format=json','auth/kubernetes/login','-'],payload={'role':lane['role'],'jwt':jwt},allow_failure=negative) if negative: if result.returncode==0: revoke(data(result)['auth']['client_token']);raise setup.Refused() if b'403' not in result.stderr and b'400' not in result.stderr:raise setup.Refused() return None return data(result)['auth'] receipt['phase']='native_reader_login' auth=login(lane['service_account'],'openbao');token=auth['client_token'] receipt['native_reader_metadata']={k:auth.get(k) for k in ['token_policies','identity_policies','policies','lease_duration']} try: receipt['phase']='effective_reader_policy_ttl' if (auth['token_policies']!=[lane['policy']] or auth.get('identity_policies') or auth.get('policies',auth['token_policies'])!=[lane['policy']] or not 0