Policy evaluation for requests within a single account
Policy evaluation for an IAM role
The following flow chart provides details about how a policy evaluation decision is made for an IAM role within a single account.
Policy evaluation for an IAM user
The following flow chart provides details about how a policy evaluation decision is made for an IAM user within a single account.
Example identity-based and resource-based policy evaluation
The most common types of policies are identity-based policies and resource-based policies. When access to a resource is requested, Amazon evaluates all the permissions granted by the policies for at least one Allow within the same account. An explicit deny in any of the policies overrides the allow.
Important
If either the identity-based policy or the resource-based policy within the same account allows the request and the other doesn't, the request is still allowed.
Assume that Carlos has the user name carlossalazar and he tries to save a
file to the amzn-s3-demo-bucket-carlossalazar-logs Amazon S3 bucket.
Also assume that the following policy is attached to the carlossalazar
IAM user.
The AllowS3ListRead statement in this policy allows Carlos to view a list
of all of the buckets in the account. The AllowS3Self statement allows
Carlos full access to the bucket with the same name as his user name. The
DenyS3Logs statement denies Carlos access to any S3 bucket with
log in its name.
Additionally, the following resource-based policy (called a bucket policy) is attached
to the amzn-s3-demo-bucket-carlossalazar bucket.
This policy specifies that only the carlossalazar user can access the
amzn-s3-demo-bucket-carlossalazar bucket.
When Carlos makes his request to save a file to the
amzn-s3-demo-bucket-carlossalazar-logs bucket, Amazon determines what
policies apply to the request. In this case, only the identity-based policy and the
resource-based policy apply. These are both permissions policies. Because no permissions
boundaries apply, the evaluation logic is reduced to the following logic.
Amazon first checks for a Deny statement that applies to the context of
the request. It finds one, because the identity-based policy explicitly denies Carlos
access to any S3 buckets used for logging. Carlos is denied access.
Assume that he then realizes his mistake and tries to save the file to the
amzn-s3-demo-bucket-carlossalazar bucket. Amazon checks for a
Deny statement and does not find one. It then checks the permissions
policies. Both the identity-based policy and the resource-based policy allow the
request. Therefore, Amazon allows the request. If either of them explicitly denied the
statement, the request would have been denied. If one of the policy types allows the
request and the other doesn't, the request is still allowed.