📖 Scenario: You are setting up permissions for a cloud application that uses DynamoDB to store user data. To keep the data safe, you need to create an IAM policy that allows only specific actions on a specific DynamoDB table.
🎯 Goal: Create an IAM policy JSON that grants permission to read and write items on a DynamoDB table named UserData.
📋 What You'll Learn
Create a policy document with version 2012-10-17.
Allow the actions dynamodb:GetItem, dynamodb:PutItem, and dynamodb:UpdateItem.
Restrict the permissions to the DynamoDB table named UserData.
Use the correct resource ARN format for the DynamoDB table.
💡 Why This Matters
🌍 Real World
IAM policies control who can access cloud resources and what actions they can perform. Creating precise policies helps keep data secure.
💼 Career
Cloud engineers and developers often write IAM policies to secure access to databases like DynamoDB in real projects.
Progress0 / 4 steps
1
Create the basic IAM policy structure
Create a dictionary called policy with a key Version set to the string "2012-10-17" and an empty list for the key Statement.
DynamoDB
Hint
Start by creating the main dictionary with the version and an empty statement list.
2
Add the resource ARN for the DynamoDB table
Create a variable called table_arn and set it to the string "arn:aws:dynamodb:*:*:table/UserData" which represents the ARN of the DynamoDB table named UserData.
DynamoDB
Hint
Use the correct ARN format for DynamoDB tables with wildcards for region and account.
3
Add the statement with allowed actions
Add a dictionary to policy["Statement"] with keys: Effect set to "Allow", Action set to a list containing "dynamodb:GetItem", "dynamodb:PutItem", and "dynamodb:UpdateItem", and Resource set to the variable table_arn.
DynamoDB
Hint
Make sure the statement dictionary is inside the Statement list and uses the variable table_arn for the resource.
4
Complete the IAM policy JSON
Ensure the policy dictionary is fully formed with the version, statement list containing the allow statement for the specified actions on table_arn. This is the final IAM policy JSON.
DynamoDB
Hint
Review the entire policy dictionary to confirm it matches the required structure and values.
Practice
(1/5)
1. What does the Action element specify in an IAM policy for DynamoDB?
easy
A. The allowed or denied DynamoDB operations
B. The AWS region where the table is located
C. The encryption method used by the table
D. The billing mode of the DynamoDB table
Solution
Step 1: Understand the role of Action in IAM policies
The Action element defines which DynamoDB operations (like read, write) are allowed or denied.
Step 2: Differentiate from other policy elements
Other elements like Resource specify the table, but Action controls what can be done.
Final Answer:
The allowed or denied DynamoDB operations -> Option A
Quick Check:
Action = Allowed/Deny operations [OK]
Hint: Action controls what operations are allowed or denied [OK]
Common Mistakes:
Confusing Action with Resource
Thinking Action specifies table location
Mixing Action with encryption or billing settings
2. Which of the following is the correct syntax to specify a DynamoDB table resource ARN in an IAM policy?
easy
A. "Resource": "arn:aws:s3:::mybucket"
B. "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
C. "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table"
D. "Resource": "arn:aws:dynamodb:us-east-1:123456789012:database/MyTable"
Solution
Step 1: Identify correct ARN format for DynamoDB table
The ARN format for a DynamoDB table is: arn:aws:dynamodb:<region>::table/.
Step 2: Compare options to the correct format
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable" matches the correct format exactly. "Resource": "arn:aws:s3:::mybucket" is for S3, C misses table name, D uses wrong resource type.
Final Answer:
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable" -> Option B
Quick Check:
Resource ARN for DynamoDB table = "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable" [OK]
Hint: DynamoDB table ARN ends with 'table/YourTableName' [OK]
Common Mistakes:
Using S3 ARN format instead of DynamoDB
Omitting the table name in ARN
Using 'database' instead of 'table' in ARN
3. Given this IAM policy snippet, what DynamoDB actions are allowed?
The ARN ends with 'table' but does not specify the table name, so it does not point to any specific table.
Step 2: Understand impact of incomplete ARN
Without a full ARN including the table name, the policy does not grant access to any resource.
Final Answer:
Resource ARN is incomplete; missing table name -> Option A
Quick Check:
Resource ARN must include table name [OK]
Hint: Resource ARN must specify full table name [OK]
Common Mistakes:
Thinking Action must be an array always
Confusing Effect Allow with Deny
Assuming Condition is required for access
5. You want to create an IAM policy that allows a user to read from any DynamoDB table in your account but only write to a specific table named 'Inventory'. Which policy setup is correct?