Using AWS Security for Developers
Rahul Singh
Technical Product Manager
The edit that changes nothing

Up to three layers
In your own account, either policy allowing is enough
Denied by any layer it meets

Identity-based policy

Identity-based policy
Resource-based policy

Two kinds of identity-based policies

Two kinds of identity-based policies
Convenience or precision

Why an account attaches one
Permissions boundary

Why an account attaches one
Permissions boundary
Why iam:CreateUser did nothing

Why an account attaches one
Permissions boundary
Why iam:CreateUser did nothing
Session policy: one AssumeRole session

Condition key
Narrows an allow to a request's context
aws:SourceIp: the network it came from

Condition key
Narrows an allow to a request's context
aws:SourceIp: the network it came from
aws:PrincipalTag: a tag on the callerABAC: attribute-based access control

One shared table

"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": ["${aws:PrincipalTag/tenant}"]
}
}
One shared table
One condition narrows it
ForAllValues: every key supplied must match"Action": ["dynamodb:Query", "dynamodb:GetItem", "dynamodb:Scan"],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": ["${aws:PrincipalTag/tenant}"]
}
}
One shared table
One condition narrows it
ForAllValues: every key supplied must matchdynamodb:Scan supplies none, so nothing can failUsing AWS Security for Developers