Skip to main content
An access-request agent grants roles from tickets. Read-only roles are routine, write roles need a person, and admin is never granted by an agent. The hazard is the one this recipe shows last: a human approves reader and the agent, re-planning or told to by a ticket’s text, tries to execute admin with that approval.

The policy

runnable

The code

runnable file=main.py

What the agent sees

admin is refused by the policy before the approval is even considered. Had the policy allowed it with approval, the approval for editor would still not have matched: it is bound to the hash of editor, and admin hashes differently.

The receipt

runnable

When an AMBIGUOUS appears

An IAM call that timed out may have bound the role. Read the binding back from the provider, then ctrlrun resolve grant:ana@example.com:editor --committed or --failed. Granting a role twice is usually idempotent at the provider, but the receipt should say what happened, not what was assumed.

Next