Bird
Raised Fist0
DynamoDBquery~10 mins

Fine-grained access control in DynamoDB - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to specify the partition key in the DynamoDB query.

DynamoDB
KeyConditionExpression = Key('[1]').eq('User123')
Drag options to blanks, or click blank then click option'
AUserId
BTimestamp
CEmail
DStatus
Attempts:
3 left
💡 Hint
Common Mistakes
Using a non-key attribute in the KeyConditionExpression causes errors.
Confusing sort key with partition key.
2fill in blank
medium

Complete the code to add a filter expression that restricts access to items with status 'active'.

DynamoDB
FilterExpression = Attr('status').[1]('active')
Drag options to blanks, or click blank then click option'
Aneq
Bcontains
Ceq
Dbegins_with
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'neq' will exclude active items instead of including them.
Using 'contains' or 'begins_with' is for partial matches, not exact.
3fill in blank
hard

Fix the error in the condition expression to check if the attribute 'role' is 'admin'.

DynamoDB
KeyConditionExpression = Key('UserId').eq('User123') & Key('[1]').eq('admin')
Drag options to blanks, or click blank then click option'
Arole
BRole
CuserRole
Dstatus
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect case for attribute names causes the query to fail.
Using a non-key attribute in KeyConditionExpression causes errors.
4fill in blank
hard

Fill in the blanks to create a filter expression that allows only items where 'department' is 'sales' and 'accessLevel' is greater than 3.

DynamoDB
FilterExpression = Attr('[1]').eq('sales') & Attr('[2]').[3](3)
Drag options to blanks, or click blank then click option'
Adepartment
BaccessLevel
Cgt
Dlt
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'lt' instead of 'gt' reverses the intended condition.
Mixing attribute names or using incorrect case.
5fill in blank
hard

Fill in the blanks to build a filter expression that filters items where 'UserId' equals 'User123', 'status' is 'active', and 'lastLogin' is after 2023-01-01.

DynamoDB
FilterExpression = Attr('[1]').eq('User123') & Attr('[2]').eq('active') & Attr('[3]').[4]('2023-01-01')
Drag options to blanks, or click blank then click option'
AUserId
Bstatus
ClastLogin
Dgt
Attempts:
3 left
💡 Hint
Common Mistakes
Using Key instead of Attr for partition key causes errors.
Using 'lt' instead of 'gt' for date comparison reverses logic.

Practice

(1/5)
1. What is the main purpose of fine-grained access control in DynamoDB?
easy
A. To automatically backup data
B. To speed up query performance
C. To restrict access to specific items based on keys
D. To encrypt data at rest

Solution

  1. Step 1: Understand fine-grained access control concept

    Fine-grained access control limits access to individual items or attributes in a DynamoDB table.
  2. Step 2: Identify the main purpose

    This control is used to restrict access based on keys, ensuring users see only their data.
  3. Final Answer:

    To restrict access to specific items based on keys -> Option C
  4. Quick Check:

    Fine-grained access control = restrict by keys [OK]
Hint: Focus on access control by keys, not performance or encryption [OK]
Common Mistakes:
  • Confusing access control with encryption
  • Thinking it improves query speed
  • Assuming it manages backups
2. Which IAM policy condition key is used to enforce fine-grained access control in DynamoDB?
easy
A. dynamodb:LeadingKeys
B. dynamodb:TableName
C. dynamodb:Attributes
D. dynamodb:EncryptionEnabled

Solution

  1. Step 1: Identify IAM condition keys for DynamoDB

    DynamoDB uses specific condition keys in IAM policies to control access.
  2. Step 2: Match condition key for fine-grained access

    The key dynamodb:LeadingKeys restricts access based on partition key values.
  3. Final Answer:

    dynamodb:LeadingKeys -> Option A
  4. Quick Check:

    Fine-grained access uses dynamodb:LeadingKeys [OK]
Hint: Remember 'LeadingKeys' controls item-level access [OK]
Common Mistakes:
  • Choosing TableName which controls table-level access
  • Confusing Attributes with keys
  • Selecting unrelated encryption keys
3. Given this IAM policy snippet, which items can the user access?
{
  "Effect": "Allow",
  "Action": "dynamodb:GetItem",
  "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
  "Condition": {
    "ForAllValues:StringEquals": {
      "dynamodb:LeadingKeys": ["user123"]
    }
  }
}
medium
A. All items in the Orders table
B. Only items with partition key 'user123'
C. Items with any partition key except 'user123'
D. No items, because the policy is invalid

Solution

  1. Step 1: Analyze the IAM policy condition

    The condition restricts access to items where the partition key matches 'user123'.
  2. Step 2: Determine accessible items

    Only items with partition key 'user123' are accessible; others are denied.
  3. Final Answer:

    Only items with partition key 'user123' -> Option B
  4. Quick Check:

    Condition limits to 'user123' keys [OK]
Hint: Check the LeadingKeys value to find accessible items [OK]
Common Mistakes:
  • Assuming access to all items
  • Thinking policy denies all access
  • Ignoring the condition block
4. You wrote this IAM policy to restrict access to items with partition key 'user456', but users still access other items:
{
  "Effect": "Allow",
  "Action": "dynamodb:GetItem",
  "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
  "Condition": {
    "StringEquals": {
      "dynamodb:LeadingKeys": "user456"
    }
  }
}

What is the likely error?
medium
A. Action should be dynamodb:Query instead of GetItem
B. Resource ARN is incorrect
C. Effect should be Deny instead of Allow
D. Condition should use ForAllValues:StringEquals with an array

Solution

  1. Step 1: Check condition syntax for dynamodb:LeadingKeys

    The condition expects an array with ForAllValues:StringEquals, not a single string with StringEquals.
  2. Step 2: Understand impact of incorrect condition

    Using StringEquals with a string causes the condition to be ignored, allowing broader access.
  3. Final Answer:

    Condition should use ForAllValues:StringEquals with an array -> Option D
  4. Quick Check:

    Use ForAllValues:StringEquals and array for LeadingKeys [OK]
Hint: Use ForAllValues:StringEquals with array for LeadingKeys [OK]
Common Mistakes:
  • Using StringEquals with a string instead of array
  • Incorrect ARN format
  • Confusing action types
  • Changing Effect to Deny unnecessarily
5. You want to allow users to read only their own orders in a DynamoDB table where the partition key is 'UserId'. Which IAM policy condition correctly enforces this fine-grained access control for user 'alice'?
hard
A. { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["alice"] } }
B. { "StringEquals": { "dynamodb:Attributes": ["alice"] } }
C. { "ForAnyValue:StringEquals": { "dynamodb:LeadingKeys": ["alice"] } }
D. { "StringLike": { "dynamodb:LeadingKeys": "alice*" } }

Solution

  1. Step 1: Identify correct condition operator for exact key match

    For fine-grained access, ForAllValues:StringEquals with an array ensures all keys match exactly.
  2. Step 2: Evaluate options for correct syntax and semantics

    { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["alice"] } } uses correct operator and array format; others use wrong keys or operators.
  3. Final Answer:

    { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["alice"] } } -> Option A
  4. Quick Check:

    Exact key match needs ForAllValues:StringEquals with array [OK]
Hint: Use ForAllValues:StringEquals with array for exact user keys [OK]
Common Mistakes:
  • Using dynamodb:Attributes instead of LeadingKeys
  • Using StringEquals without array
  • Using StringLike which allows wildcards
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard