Policy evaluation for requests within a single account
How AWS evaluates policies depends on the types of policies that apply to the request context. The following policy types, listed in order of frequency, are available for use within a single AWS account. For more information about these policy types, see Policies and permissions in AWS Identity and Access Management. To learn how AWS evaluates policies for cross-account access, see Cross-account policy evaluation logic.
-
Identity-based policies – Identity-based policies are attached to an IAM identity (user, group of users, or role) and grant permissions to IAM entities (users and roles). If only identity-based policies apply to a request, then AWS checks all of those policies for at least one
Allow
. -
Resource-based policies – Resource-based policies grant permissions for principals specified in the policy. The permissions define what the principal can do with the resource to which the policy is attached.
-
IAM permissions boundaries – Permissions boundaries are a feature that sets the maximum permissions that an identity-based policy can grant to an IAM entity (user or role). When you set a permissions boundary for an entity, the entity can perform only the actions that are allowed by both its identity-based policies and its permissions boundary. In some cases, an implicit deny in a permissions boundary can limit the permissions granted by a resource-based policy. To learn more, see How AWS enforcement code logic evaluates requests to allow or deny access.
-
AWS Organizations service control policies (SCPs) – Organizations SCPs specify the maximum available permissions for principals within accounts in an organization or organizational unit (OU). SCPs apply to principals in member accounts, including each AWS account root user. If an SCP is present, permissions granted by identity-based and resource-based policies to principals in your member accounts are only effective if the SCP allows the action. The only exceptions are principals in the organization management account and service-linked roles.
-
AWS Organizations resource control policies (RCPs) – Organizations RCPs specify the maximum available permissions for resources within accounts in an organization or organizational unit (OU). RCPs apply to resources in member accounts and impact the effective permissions for principals, including the AWS account root user, regardless of whether the principals belong to your organization. RCPs don't apply to resources in the organization management account and to calls made by service-linked roles.
-
Session policies – Session policies are policies that you pass as parameters when you programmatically create a temporary session for a role or federated user. To create a role session programmatically, use one of the
AssumeRole*
API operations. When you do this and pass session policies, the resulting session's permissions are the intersection of the IAM entity's identity-based policy and the session policies. To create a federated user session, you use the IAM user access keys to programmatically call theGetFederationToken
API operation. For more information, see Session policies.
Remember, an explicit deny in any of these policies overrides the allow.
Evaluating identity-based policies with resource-based policies
Identity-based policies and resource-based policies grant permissions to the identities or resources to which they are attached. When an IAM entity (user or role) requests access to a resource within the same account, AWS evaluates all the permissions granted by the identity-based and resource-based policies. The resulting permissions are the union of the permissions of the two types. If an action is allowed by an identity-based policy, a resource-based policy, or both, then AWS allows the action. An explicit deny in either of these policies overrides the allow.
Evaluating identity-based policies with permissions boundaries
When AWS evaluates the identity-based policies and permissions boundary for a user, the resulting permissions are the intersection of the two categories. That means that when you add a permissions boundary to a user with existing identity-based policies, you might reduce the actions that the user can perform. Alternatively, when you remove a permissions boundary from a user, you might increase the actions they can perform. An explicit deny in either of these policies overrides the allow. To view information about how other policy types are evaluated with permissions boundaries, see Evaluating effective permissions with boundaries.
Evaluating identity-based policies with Organizations SCPs or RCPs
When a user belongs to an account that is a member of an organization and accesses a resource that doesn't have a resource-based policy configured, the resulting permissions are the intersection of the user's policies, service control policies (SCPs), and resource control policy (RCP). This means that an action must be allowed by all three policy types. An explicit deny in the identity-based policy, an SCP, or an RCP overrides the allow.
You can learn whether your account is a member of an organization in AWS Organizations.
Organization members might be affected by an SCP or RCP. To view this data using the
AWS CLI command or AWS API operation, you must have permissions for the
organizations:DescribeOrganization
action for your Organizations entity. You
must have additional permissions to perform the operation in the Organizations console. To learn
whether an SCP or RCP is denying access to a specific request, or to change your
effective permissions, contact your AWS Organizations administrator.
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, AWS 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.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3ListRead", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowS3Self", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*", "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar" ] }, { "Sid": "DenyS3Logs", "Effect": "Deny", "Action": "s3:*", "Resource": "arn:aws:s3:::*log*" } ] }
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.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/carlossalazar" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*", "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar" ] } ] }
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, AWS 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.
AWS 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. AWS 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, AWS 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.