Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Policy Evaluation Logic in AWS IAM
📖 Scenario: You are managing access control in AWS. You want to understand how AWS evaluates IAM policies to allow or deny actions on resources.Imagine you have a user who tries to perform an action, and AWS checks multiple policies to decide if the action is allowed.
🎯 Goal: Build a simple AWS IAM policy evaluation logic using JSON objects to represent policies and a function to decide if an action is allowed or denied based on these policies.
📋 What You'll Learn
Create a list of policy dictionaries with exact keys and values
Add a variable to specify the action to evaluate
Write a function that checks policies and returns 'Allow' or 'Deny'
Add the final call to the function with the action and policies
Cloud engineers and security specialists must know how IAM policies are evaluated to prevent unauthorized access.
Progress0 / 4 steps
1
Create the initial list of IAM policies
Create a list called policies with two dictionaries. The first dictionary has "Effect": "Allow" and "Action": "s3:GetObject". The second dictionary has "Effect": "Deny" and "Action": "s3:DeleteObject".
AWS
Hint
Use a list with two dictionaries exactly as described.
2
Add the action to evaluate
Create a variable called action_to_check and set it to the string "s3:GetObject".
AWS
Hint
Set the variable exactly as shown.
3
Write the policy evaluation function
Define a function called evaluate_policies that takes action and policies as parameters. Inside, use a for loop with variables policy to iterate over policies. If policy["Action"] == action and policy["Effect"] == "Deny", return "Deny". After the loop, return "Allow".
AWS
Hint
Check for deny first, then allow by default.
4
Call the evaluation function
Call the function evaluate_policies with action_to_check and policies as arguments, and assign the result to a variable called result.
AWS
Hint
Assign the function call result to result.
Practice
(1/5)
1. What happens if an AWS IAM policy has both an explicit Allow and an explicit Deny for the same action?
easy
A. The explicit Deny always overrides the Allow.
B. The Allow always overrides the Deny.
C. The action is allowed only if the user is an administrator.
D. The action is denied only if there is a condition attached.
Solution
Step 1: Understand explicit Deny effect
In AWS IAM, an explicit Deny always takes priority over any Allow for the same action.
Step 2: Apply policy evaluation logic
Even if a policy allows an action, if another policy explicitly denies it, the Deny wins and the action is blocked.
Final Answer:
The explicit Deny always overrides the Allow. -> Option A
Quick Check:
Explicit Deny > Allow [OK]
Hint: Remember: Deny always beats Allow in AWS policies [OK]
Common Mistakes:
Thinking Allow can override Deny
Ignoring explicit Deny effect
Assuming conditions affect Deny priority
2. Which of the following is the correct JSON syntax to allow the s3:ListBucket action on a bucket named my-bucket?
easy
A. {\"Effect\": \"Deny\", \"Action\": \"s3:ListBucket\", \"Resource\": \"arn:aws:s3:::my-bucket\"}
B. {\"Effect\": \"Allow\", \"Action\": [\"s3:ListBucket\"], \"Resource\": \"arn:aws:s3:::my-bucket\"}
C. {\"Effect\": \"Allow\", \"Action\": \"s3:ListBucket\", \"Resource\": \"my-bucket\"}
D. {\"Effect\": \"Allow\", \"Action\": \"ListBucket\", \"Resource\": \"arn:aws:s3:::my-bucket\"}
Solution
Step 1: Check Action format
The Action field must be a string or an array of strings. Using an array is valid and recommended for multiple actions.
Step 2: Verify Resource ARN format
The Resource must be the full ARN: arn:aws:s3:::my-bucket for the bucket itself.
Final Answer:
Action as array and correct ARN Resource -> Option B
Quick Check:
Action array + correct ARN = D [OK]
Hint: Use full ARN and array for actions to avoid syntax errors [OK]
What happens if a user tries to start an EC2 instance from IP 198.51.100.10?
medium
A. The action is denied because the IP does not match the condition.
B. The action is allowed because the Effect is Allow.
C. The action is allowed only if the user has another policy allowing it.
D. The action is denied only if there is an explicit Deny policy.
Solution
Step 1: Understand Condition effect
The policy allows the action only if the request comes from IPs in 203.0.113.0/24 range.
Step 2: Check IP address
The user's IP 198.51.100.10 is outside the allowed range, so the condition fails.
Final Answer:
The action is denied because the IP does not match the condition. -> Option A
Quick Check:
Condition IP mismatch = Deny [OK]
Hint: Conditions restrict Allow; mismatch means Deny [OK]
Common Mistakes:
Ignoring condition and assuming Allow always works
Confusing explicit Deny with condition-based Deny
Assuming multiple policies needed to allow
4. You have two policies attached to a user: Policy 1: Allows s3:GetObject on bucket my-bucket. Policy 2: Denies s3:GetObject on bucket my-bucket if the request is from outside office IP range.
The user tries to get an object from home IP. What is the result?
medium
A. The request is allowed because Policy 1 allows it.
B. The request is allowed only if the user is in the admin group.
C. The request is denied only if there is a service outage.
D. The request is denied because Policy 2 explicitly denies it from outside IPs.
Solution
Step 1: Identify explicit Deny with condition
Policy 2 denies the action if the IP is outside the office range, which applies here.
Step 2: Apply evaluation logic
Explicit Deny overrides any Allow, so the request is denied.
Final Answer:
The request is denied because Policy 2 explicitly denies it from outside IPs. -> Option D
Quick Check:
Explicit Deny with condition blocks request [OK]
Hint: Explicit Deny with condition beats Allow always [OK]
Common Mistakes:
Ignoring condition in Deny policy
Assuming Allow always wins
Thinking user group affects Deny priority
5. You want to create a policy that allows ec2:StopInstances only during business hours (9 AM to 5 PM UTC) and denies it otherwise. Which policy logic correctly enforces this?
hard
A. Only use Deny with condition outside 9-17 UTC, no Allow needed.
B. Allow ec2:StopInstances with condition "DateGreaterThan": {"aws:CurrentTime": "09:00:00Z"}, no Deny needed.
C. Allow ec2:StopInstances unconditionally, and add a Deny with condition outside 9-17 UTC.
D. Allow ec2:StopInstances with condition for 9-17 UTC, and Deny unconditionally.
Solution
Step 1: Understand Deny override with time condition
Unconditional Allow permits ec2:StopInstances, but explicit Deny applies outside 9-17 UTC overriding the Allow.