railiance-platform/scripts/keycape_factor_eso_metadata.py

17 lines
1.2 KiB
Python
Raw Normal View History

import json,os,sys
from pathlib import Path
from keycape_factor_metadata import call,normalized,policy_text
NAME="workload-kv-read-keycape-factor-read"
OLD='# Exact-path JWT delivery; no issuer password or sibling paths.\npath "platform/data/workloads/net-kingdom/keycape-factor-read" {\n capabilities = ["read"]\n}\npath "platform/metadata/workloads/net-kingdom/keycape-factor-read" {\n capabilities = ["read"]\n}\n\n# ESO validates its own short-lived workload session.\npath "auth/token/lookup-self" {\n capabilities = ["read"]\n}\n'
NEW=Path(__file__).resolve().parents[1].joinpath("openbao/policies/"+NAME+".hcl").read_text()
fd=os.open(sys.argv[1],os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
result={"success":False}
try:
current=policy_text(call("policy","read","-format=json",NAME))
if normalized(current) not in (normalized(OLD),normalized(NEW)):raise RuntimeError()
call("write","-format=json","sys/policies/acl/"+NAME,"-",payload={"policy":NEW})
if normalized(policy_text(call("policy","read","-format=json",NAME)))!=normalized(NEW):raise RuntimeError()
result={"success":True,"change":"ESO self-session lookup and revocation only","secret_values_read":False}
finally:
os.write(fd,json.dumps(result).encode());os.close(fd)