IAM Policy Evaluation
π 1. IAM Permission Boundaries¶
Permission boundaries are like a "maximum allowed boundary" for what a user or role can do, even if their policies allow more.
π§ Think of it like:¶
π "Even if your policy allows you to enter any room, you can only enter rooms in this building."
β Use Case:¶
Say you want a developer to create EC2 instances, but only in us-east-1, even if they attach policies that allow global EC2 use.
π οΈ Example: Permission Boundary¶
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "us-east-1"
}
}
}
]
}
π This boundary limits all permissions to EC2 actions only in us-east-1, no matter what policies are attached to the role.
π 2. IAM Policy Evaluation Logic¶
IAM evaluates permissions in 5 steps:
π¦ Step-by-Step Policy Evaluation¶

| Step | Description |
|---|---|
| 1οΈβ£ | Combine all policies (IAM, SCPs, session, permission boundaries, resource-based) |
| 2οΈβ£ | Start with implicit deny (no access unless allowed) |
| 3οΈβ£ | Look for explicit allow ("Effect": "Allow") |
| 4οΈβ£ | Check for explicit deny ("Effect": "Deny") β this always wins |
| 5οΈβ£ | Apply conditions (aws:RequestedRegion, aws:SourceIp, etc.) |
π§ͺ Example Flow¶
Letβs say a user tries to delete an S3 object.
-
β User Policy:
"s3:DeleteObject"is allowed -
π« Permission Boundary: only allows
"s3:GetObject" -
β Final Decision: Access denied (permission boundary blocks it)
π Visualization¶
+--------------------------+
| Step 1: Combine policies |
+-----------+--------------+
|
v
+--------------------------+
| Step 2: Implicit Deny |
+--------------------------+
|
+--------------------------+
| Step 3: Is Allow present?|
+--------------------------+
|
v
+--------------------------+
| Step 4: Is Deny present? | ---> Yes? => β Denied
+--------------------------+
|
+--------------------------+
| Step 5: Evaluate Conditions |
+--------------------------+
|
v
β
Final Answer
π Quick Summary¶
| Concept | What it does |
|---|---|
| Permission boundary | Sets a maximum limit on what a role/user can do |
| Policy evaluation logic | IAM checks all policies and explicit deny always wins |
| Conditions | Used to fine-tune access like region, IP, tags |