Amazon Verified Permissions separates authorization policy from application code. An application submits a principal, action, resource, and optional context to the service, which evaluates the request against policies in a specified policy store. The application then uses the returned authorization decision to allow or reject the operation. Verified Permissions does not intercept application traffic or enforce its decisions automatically; enforcement must occur in the API handler, authorizer, or another trusted application component.
Policies use Cedar, a language designed for authorization. Cedar policies can express permissions based on identities, group membership, resource attributes, and contextual conditions. A permit policy grants access when its scope and conditions match. A matching forbid policy overrides matching permit policies, and requests without a matching permit are denied. This supports explicit restrictions alongside role-based and attribute-based access rules.
A policy store contains policies, policy templates, and an optional schema describing the application's entity types, actions, and context structures. Configure strict policy validation to check policies against the schema when they are created or updated. Treat schema changes as application interface changes: coordinate them with policy deployments and the code that constructs authorization requests. Templates provide a reusable policy structure that can be instantiated with particular principals or resources.
Verified Permissions is not a general-purpose directory or resource database. For entity-based authorization requests, the application supplies the relevant entity attributes and relationships needed for evaluation. For example, a document service might supply the document's owner and tenant, along with the requesting user's group memberships. Build this information from trusted records rather than accepting authorization attributes directly from an untrusted client. Keep the supplied entity graph limited to the relationships necessary for the decision.
Authentication remains a separate concern. An identity source can connect a policy store to Amazon Cognito or a supported OpenID Connect provider, allowing token-based authorization requests. The application still needs to provide resource information and any additional context required by its policies. Token-based authorization does not remove the need to check tenant boundaries, ownership, or action-specific conditions.
For production workloads, place authorization checks before protected side effects and define fail-closed behavior for service errors, timeouts, and malformed requests. Inspect evaluation errors during testing and observability rather than treating every denied request as a simple policy mismatch. Batch authorization can evaluate multiple related access checks, but applications must handle each decision independently. If caching decisions, explicitly account for policy changes, entity changes, token expiry, and context-sensitive conditions.
Design policy-store boundaries around isolation, administration, and deployment requirements. A shared store can support multiple tenants when policies and trusted attributes enforce separation, while separate stores can provide stronger administrative boundaries. Test both allowed and denied scenarios, including cross-tenant requests, before deploying policy changes.