Resources & naming
A resource is the thing an action targets — a free-form string you define; the engine enforces it by pattern matching.
Namespace as scheme:identifier, or use a URL:
vendor:acme invoice:9001 marketplace:cloud
db:prod-orders s3:exports list:lifecycle
https://api.openai.com/v1/chatMatching is glob-based (allowed/denied resources, policy match):
*matches any run of characters, including.,:and/.- Matching is case-insensitive and fully anchored (the whole string must match).
- An empty allow-list means "any resource" (within the action-type scope); the deny-list wins when both match.
Best practices
Use a consistent
scheme: prefix per resource class; encode sensitivity in the name (db:prod-* vs db:staging-*) so one policy can protect production; keep identifiers stable — they appear verbatim in the ledger and exports.