SlideShare a Scribd company logo
1 of 113
Download to read offline
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Jeff Wierer, Senior AWS IAM Manager
October 2015
SEC305
How to Become an IAM Policy
Ninja in 60 Minutes or Less
What to expect from this session
• Know more about securing your AWS resources
• Get a deeper understanding of the policy language
• Tips and tricks for common use cases
• Debugging and testing policies
• Keep this a lively session via demos
• Amazon S3
• AWS Identity and Access Management (IAM)
• Amazon EC2
Limit Amazon EC2 instance types
Demo
Limit Amazon EC2 instance types
Demo
•
•
–
–
Limit Amazon EC2 instance types
Demo
•
•
–
–
The policy language
The policy language
Policy specification basics
JSON-formatted documents
Contain a statement (permissions)
that specifies:
• Which actions a principal can
perform
• Which resources can be accessed
{
"Statement":[{
"Effect":"effect",
"Principal":"principal",
"Action":"action",
"Resource":"arn",
"Condition":{
"condition":{
"key":"value" }
}
}
]
}
Principal
Action
Resource
Condition
You can have multiple statements and
each statement is comprised of PARC.
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!-- Individual IAM user -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!-- Individual IAM user -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
<!-- Federated user (using web identity federation) -->
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!-- Individual IAM user -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
<!-- Federated user (using web identity federation) -->
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
<!-- Specific role -->
"Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"}
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!-- Individual IAM user -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
<!-- Federated user (using web identity federation) -->
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
<!-- Specific role -->
"Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"}
<!-- Specific service -->
"Principal":{"Service":"ec2.amazonaws.com"}
Principal – Examples
• An entity that is allowed or denied access to a resource
• Indicated by an Amazon Resource Name (ARN)
• With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
<!-- Everyone (anonymous users) -->
"Principal":"AWS":"*.*"
<!-- Specific account or accounts -->
"Principal":{"AWS":"arn:aws:iam::123456789012:root" }
"Principal":{"AWS":"123456789012"}
<!-- Individual IAM user -->
"Principal":"AWS":"arn:aws:iam::123456789012:user/username"
<!-- Federated user (using web identity federation) -->
"Principal":{"Federated":"www.amazon.com"}
"Principal":{"Federated":"graph.facebook.com"}
"Principal":{"Federated":"accounts.google.com"}
<!-- Specific role -->
"Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"}
<!-- Specific service -->
"Principal":{"Service":"ec2.amazonaws.com"}
Replace
with your
account
number
Action – Examples
• Describes the type of access that should be allowed or denied
• You can find these in the docs or use the policy editor to get a drop-down list
• Statements must include either an Action or NotAction element
Action – Examples
• Describes the type of access that should be allowed or denied
• You can find these in the docs or use the policy editor to get a drop-down list
• Statements must include either an Action or NotAction element
<!-- EC2 action -->
"Action":"ec2:StartInstances"
<!-- IAM action -->
"Action":"iam:ChangePassword"
<!-- S3 action -->
"Action":"s3:GetObject"
Action – Examples
• Describes the type of access that should be allowed or denied
• You can find these in the docs or use the policy editor to get a drop-down list
• Statements must include either an Action or NotAction element
<!-- EC2 action -->
"Action":"ec2:StartInstances"
<!-- IAM action -->
"Action":"iam:ChangePassword"
<!-- S3 action -->
"Action":"s3:GetObject"
<!-- Specify multiple values for the Action element-->
"Action":["sqs:SendMessage","sqs:ReceiveMessage"]
Action – Examples
• Describes the type of access that should be allowed or denied
• You can find these in the docs or use the policy editor to get a drop-down list
• Statements must include either an Action or NotAction element
<!-- EC2 action -->
"Action":"ec2:StartInstances"
<!-- IAM action -->
"Action":"iam:ChangePassword"
<!-- S3 action -->
"Action":"s3:GetObject"
<!-- Specify multiple values for the Action element-->
"Action":["sqs:SendMessage","sqs:ReceiveMessage"]
<--Use wildcards (* or ?) as part of the action name. This would cover Create/Delete/List/Update-->
"Action":"iam:*AccessKey*"
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
or
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
or
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
or
Is there a
difference?
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
or
This is not a Deny. A user could still have a
separate policy that grants IAM:*
Understanding NotAction
• Lets you specify an exception to a list of actions
• Could result in shorter policies than using Action and denying many actions
• Example: Let’s say you want to allow everything but IAM APIs
{
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "iam:*",
"Resource": "*"
}
]
}
or
This is not a Deny. A user could still have a
separate policy that grants IAM:*
If you want to prevent the user from ever being
able to call IAM APIs, use an explicit deny.
Resource – Examples
• The object or objects that are being requested
• Statements must include either a Resource or a NotResource element
Resource – Examples
• The object or objects that are being requested
• Statements must include either a Resource or a NotResource element
<-- S3 Bucket -->
"Resource":"arn:aws:s3:::my_corporate_bucket/*"
<-- SQS queue-->
"Resource":"arn:aws:sqs:us-west-2:123456789012:queue1"
<-- Multiple DynamoDB tables -->
"Resource":["arn:aws:dynamodb:us-west-2:123456789012:table/books_table",
"arn:aws:dynamodb:us-west-2:123456789012:table/magazines_table"]
<-- All EC2 instances for an account in a region -->
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
Conditions
• Optional criteria that must evaluate to
true for the policy to evaluate as true
(ex: restrict to an IP address range)
Condition element
Conditions
Condition element
Condition 1:
Key1: Value1A
Condition 2:
Key3: Value3A
• Optional criteria that must evaluate to true
for the policy to evaluate as true
• Ex: restrict to an IP address range
• Can contain multiple conditions
Conditions
• Optional criteria that must evaluate to true
for the policy to evaluate as true
• Ex: restrict to an IP address range
• Can contain multiple conditions
• Condition keys can contain multiple values
Condition element
Condition 1:
Key1: Value1A
Condition 2:
Key3: Value3A
Key1: Value1A Value1B Value 1C
Conditions
• Optional criteria that must evaluate to true
for the policy to evaluate as true
• Ex: restrict to an IP address range
• Can contain multiple conditions
• Condition keys can contain multiple values
• If a single condition includes multiple
values for one key, the condition is
evaluated using logical OR
•
Condition element
Condition 1:
Key1: Value1A
Condition 2:
Key3: Value3A
OR ORKey1: Value1A Value1B Value 1C
Conditions
• Optional criteria that must evaluate to true
for the policy to evaluate as true
• Ex: restrict to an IP address range
• Can contain multiple conditions
• Condition keys can contain multiple values
• If a single condition includes multiple
values for one key, the condition is
evaluated using logical OR
• Multiple conditions (or multiple keys in a
single condition): the conditions are
evaluated using logical AND
Condition element
Condition 1:
Key1: Value1A
Condition 2:
Key3: Value3A
AND
AND
Key2: Value2A OR Value2B
OR ORKey1: Value1A Value1B Value 1C
Condition example
"Condition" : {
"DateGreaterThan" : {"aws:CurrentTime" : "2015-10-08T12:00:00Z"},
"DateLessThan": {"aws:CurrentTime" : "2015-10-08T15:00:00Z"},
"IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]}
}
• Allows a user to access a resource under the following conditions:
• The time is after 12:00 P.M. on 10/8/2015 AND
• The time is before 3:00 P.M. on 10/8/2015 AND
• The request comes from an IP address in the 192.0.2.0 /24 OR 203.0.113.0 /24
range
All of these conditions must be met in order for the statement to evaluate to TRUE.
AND
OR
What if you wanted to restrict access to a time frame and IP address range?
Policy variables
Policy variables
•
–
–
–
–
–
•
–
–
•
–
–
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":
{"StringLike":
{"s3:prefix":["home/${aws:username}/*"]}
}
},
{
"Effect":"Allow",
"Action":["s3:*"],
"Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
"arn:aws:s3:::myBucket/home/${aws:username}/*"]
}
]
}
The anatomy of a policy with variables
Grants a user access to a home directory in S3 that can be accessed programmatically
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":
{"StringLike":
{"s3:prefix":["home/${aws:username}/*"]}
}
},
{
"Effect":"Allow",
"Action":["s3:*"],
"Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
"arn:aws:s3:::myBucket/home/${aws:username}/*"]
}
]
}
The anatomy of a policy with variables
Version is required
Grants a user access to a home directory in S3 that can be accessed programmatically
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":
{"StringLike":
{"s3:prefix":["home/${aws:username}/*"]}
}
},
{
"Effect":"Allow",
"Action":["s3:*"],
"Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
"arn:aws:s3:::myBucket/home/${aws:username}/*"]
}
]
}
The anatomy of a policy with variables
Version is required
Variable in conditions
Grants a user access to a home directory in S3 that can be accessed programmatically
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":
{"StringLike":
{"s3:prefix":["home/${aws:username}/*"]}
}
},
{
"Effect":"Allow",
"Action":["s3:*"],
"Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
"arn:aws:s3:::myBucket/home/${aws:username}/*"]
}
]
}
The anatomy of a policy with variables
Version is required
Variable in conditions
Variable in resource ARNs
Grants a user access to a home directory in S3 that can be accessed programmatically
Managing your policies
Managing your policies
IAM policies
• Managed policies (newer way)
• Can be attached to multiple users, groups, and roles
• AWS managed policies: Created and maintained by AWS
• Customer managed policies: Created and maintained by you
• Up to 5K per policy
• Up to 5 versions of a policy so you can roll back to a prior version
• You can attach 10 managed policies per user, group, or role
• You can limit who can attach which managed policies
• Inline policies (older way)
• You create and embed directly in a single user, group, or role
• Variable policy size (2K per user, 5K per group, 10K per role)
Resource-based policies
IAM policies live with:
• IAM users
• IAM groups
• IAM roles
Some services allow storing policy
with resources:
• S3 (bucket policy)
• Amazon Glacier (vault policy)
• Amazon SNS (topic policy)
• Amazon SQS (queue policy)
{
"Statement":
{
"Effect": "Allow",
"Principal": {"AWS": "111122223333"},
"Action": "sqs:SendMessage",
"Resource":
"arn:aws:sqs:us-east-1:444455556666:queue1"
}
}
Resource-based policies
IAM policies live with:
• IAM users
• IAM groups
• IAM roles
Some services allow storing policy
with resources:
• S3 (bucket policy)
• Amazon Glacier (vault policy)
• Amazon SNS (topic policy)
• Amazon SQS (queue policy)
{
"Statement":
{
"Effect": "Allow",
"Principal": {"AWS": "111122223333"},
"Action": "sqs:SendMessage",
"Resource":
"arn:aws:sqs:us-east-1:444455556666:queue1"
}
}
Principal required here
Resource-based policies
IAM policies live with:
• IAM users
• IAM groups
• IAM roles
Some services allow storing policy
with resources:
• S3 (bucket policy)
• Amazon Glacier (vault policy)
• Amazon SNS (topic policy)
• Amazon SQS (queue policy)
{
"Statement":
{
"Effect": "Allow",
"Principal": {"AWS": "111122223333"},
"Action": "sqs:SendMessage",
"Resource":
"arn:aws:sqs:us-east-1:444455556666:queue1"
}
}
Principal required here
Managed policies
apply only to users,
groups, and roles—
not resources
Resource-based policies
IAM policies live with:
• IAM users
• IAM groups
• IAM roles
Some services allow storing policy
with resources:
• S3 (bucket policy)
• Amazon Glacier (vault policy)
• Amazon SNS (topic policy)
• Amazon SQS (queue policy)
{
"Statement":
{
"Effect": "Allow",
"Principal": {"AWS": "111122223333"},
"Action": "sqs:SendMessage",
"Resource":
"arn:aws:sqs:us-east-1:444455556666:queue1"
}
}
Principal required here
Enough already…
Let’s look at some examples
Enough already…
Let’s look at some examples
Creating a home directory using S3
Demo
Creating a home directory using S3
Demo
•
–
–
•
–
–
–
Giving a user a home directory from the S3 console
{
"Version": "2012-10-17",
]
}
Giving a user a home directory from the S3 console
{
"Version": "2012-10-17",
"Statement": [
{"Sid": "AllowGroupToSeeBucketListInTheManagementConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]},
{"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}},
]
}
• Necessary to
access the
S3 console.
Giving a user a home directory from the S3 console
{
"Version": "2012-10-17",
"Statement": [
{"Sid": "AllowGroupToSeeBucketListInTheManagementConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]},
{"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}},
{"Sid": "AllowListBucketofASpecificUserPrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}},
]
}
• Allows listing all
objects in a folder
and its
subfolders.
Giving a user a home directory from the S3 console
{
"Version": "2012-10-17",
"Statement": [
{"Sid": "AllowGroupToSeeBucketListInTheManagementConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]},
{"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}},
{"Sid": "AllowListBucketofASpecificUserPrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::myBucket"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}},
{"Sid":"AllowUserFullAccesstoJustSpecificUserPrefix",
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::myBucket/home/${aws:username}",
"arn:aws:s3:::myBucket/home/${aws:username}/*"]}
]
}
• Allows modifying
objects in the
folder and
subfolders.
Creating a “limited” IAM administrator
Demo
Creating a “limited” IAM administrator
Demo
•
–
Creating a “limited” IAM administrator
Demo
•
–
•
–
– Grant admin access to the IAM console to be able to
create users and generate access keys.
–
Create a “limited” IAM administrator
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "ManageUsersPermissions",
"Effect": "Allow",
"Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile",
"iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile",
"iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies",
"iam:ListPolicies"],
"Resource": "*"
},
{
"Sid": "LimitedAttachmentPermissions",
"Effect": "Allow",
"Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"],
"Resource": "*",
"Condition": {
"ArnEquals": {
"iam:PolicyArn": [
"arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder",
"arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
]
}
}
}
]
}
See AWS Security Blog post http://amzn.to/1Hf2XRl
Create a “limited” IAM administrator
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "ManageUsersPermissions",
"Effect": "Allow",
"Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile",
"iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile",
"iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies",
"iam:ListPolicies"],
"Resource": "*"
},
{
"Sid": "LimitedAttachmentPermissions",
"Effect": "Allow",
"Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"],
"Resource": "*",
"Condition": {
"ArnEquals": {
"iam:PolicyArn": [
"arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder",
"arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
]
}
}
}
]
}
See AWS Security Blog post http://amzn.to/1Hf2XRl
• Allows creating
users, managing
keys, and setting
passwords.
Create a “limited” IAM administrator
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "ManageUsersPermissions",
"Effect": "Allow",
"Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile",
"iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile",
"iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies",
"iam:ListPolicies"],
"Resource": "*"
},
{
"Sid": "LimitedAttachmentPermissions",
"Effect": "Allow",
"Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"],
"Resource": "*",
"Condition": {
"ArnEquals": {
"iam:PolicyArn": [
"arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder",
"arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
]
}
}
}
]
}
See AWS Security Blog post http://amzn.to/1Hf2XRl
• Limits attaching
only these two
policies.
Grant a user access to the IAM console
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "ViewListOfAllUsers",
"Action": "iam:ListUsers",
"Effect": "Allow",
"Resource": "arn:aws:iam::123456789012:user/*"
},
{
"Sid": "AllowAdmintoAccessUser",
"Effect": "Allow",
"Action": ["iam:GetUser","iam:GetLoginProfile",
"iam:ListGroupsForUser","iam:ListAccessKeys"],
"Resource": "arn:aws:iam::123456789012:user/${aws:username}"
}
]
}
• Underneath the covers, the
IAM console calls these
APIs to view user settings.
• The user will be able to view
details about all users.
• Doesn’t enable
adding/removing MFA.
EC2 resource-level permissions
•
•
•
EC2 resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":"*"
}
]
}
EC2 policies before resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":"*"
}
]
}
Tell me there is
a better way.
EC2 policies before resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":
"arn:aws:ec2:us-east-1:123456789012:instance/i-abc12345"
}
]
}
EC2 policies after resource-level permissions
EC2 policies after resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":
"arn:aws:ec2:us-east-1:123456789012:instance/*"
}
]
}
EC2 policies after resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":
"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {
"StringEquals": {"ec2:ResourceTag/department": "dev"}
}
}
]
}
Supported EC2 resource types
• Customer
gateway
• DHCP options
set
• Image
• Instance
• Instance profile
• Internet gateway
• Key pair
• Network ACL
• Network
interface
• Placement group
• Route table
• Security group
• Snapshot
• Subnet
• Volume
• VPC
• VPC peering
connection
Supports many different resource types, including:
Supported EC2 actions Note: This is only a subset of all possible EC2 actions.
Type of Resource Actions
EC2 instances RebootInstances, RunInstance, StartInstances, StopInstances, TerminateInstances,
AttachClassicLinkVpc, AttachVolume, DetachClassicLinkVpc, DetachVolume,
Customer gateway DeleteCustomerGateway
DHCP options sets DeleteDhcpOptions
Internet gateways DeleteInternetGateway
Network ACLs DeleteNetworkAcl, DeleteNetworkAclEntry
Route tables DeleteRoute, DeleteRouteTable
Security groups AuthorizeSecurityGroupEgress, AuthorizeSecurityGroupIngress,
DeleteSecurityGroup, RevokeSecurityGroupEgress, RevokeSecurityGroupIngress,
AttachClassicLinkVpc, RunInstances
Volumes AttachVolume, DeleteVolume, DetachVolume, RunInstances
VPC peering
connections
AcceptVpcPeeringConnection, CreateVpcPeeringConnection,
DeleteVpcPeeringConnection, RejectVpcPeeringConnection,
DisableVpcClassicLink, EnableVpcClassicLink
Accurate as of 10/1/2015
Categorize your EC2 resources
Use tags as a resource attribute
EC2 resource-level permissions
Demo
EC2 resource-level permissions
Demo
•
•
EC2 resource-level permissions
Demo
•
•
–
–
–
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "THISALLOWSEC2READACCESS",
"Effect": "Allow",
"Action": ["ec2:Describe*","elasticloadbalancing:Describe*",
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*","autoscaling:Describe*"],
"Resource": "*"
},
{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances","ec2:StartInstances",
"ec2:StopInstances","ec2:TerminateInstances"],
"Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {"StringEquals":
{"ec2:ResourceTag/Owner": "${aws:username}"}}
}
]
}
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "THISALLOWSEC2READACCESS",
"Effect": "Allow",
"Action": ["ec2:Describe*","elasticloadbalancing:Describe*",
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*","autoscaling:Describe*"],
"Resource": "*"
},
{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances","ec2:StartInstances",
"ec2:StopInstances","ec2:TerminateInstances"],
"Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {"StringEquals":
{"ec2:ResourceTag/Owner": "${aws:username}"}}
}
]
}
Version is required here
because we’re using variables
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "THISALLOWSEC2READACCESS",
"Effect": "Allow",
"Action": ["ec2:Describe*","elasticloadbalancing:Describe*",
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*","autoscaling:Describe*"],
"Resource": "*"
},
{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances","ec2:StartInstances",
"ec2:StopInstances","ec2:TerminateInstances"],
"Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {"StringEquals":
{"ec2:ResourceTag/Owner": "${aws:username}"}}
}
]
}
Version is required here
because we’re using variables
Allows seeing everything from
the EC2 console
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "THISALLOWSEC2READACCESS",
"Effect": "Allow",
"Action": ["ec2:Describe*","elasticloadbalancing:Describe*",
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*","autoscaling:Describe*"],
"Resource": "*"
},
{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances","ec2:StartInstances",
"ec2:StopInstances","ec2:TerminateInstances"],
"Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {"StringEquals":
{"ec2:ResourceTag/Owner": "${aws:username}"}}
}
]
}
Version is required here
because we’re using variables
Only allowed if this tag
condition is true
Allows seeing everything from
the EC2 console
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "THISALLOWSEC2READACCESS",
"Effect": "Allow",
"Action": ["ec2:Describe*","elasticloadbalancing:Describe*",
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*","autoscaling:Describe*"],
"Resource": "*"
},
{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances","ec2:StartInstances",
"ec2:StopInstances","ec2:TerminateInstances"],
"Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*",
"Condition": {"StringEquals":
{"ec2:ResourceTag/Owner": "${aws:username}"}}
}
]
}
Version is required here
because we’re using variables
Only allowed if this tag
condition is true
Specify the tag key and value
here
Allows seeing everything from
the EC2 console
Limit EC2 instance types
Demo
Limit EC2 instance types
Demo
•
Limit EC2 instance types
Demo
•
•
–
–
–
Locking down access to instance types
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"NotAction": ["iam:*","ec2:RunInstances"],
"Resource": "*"},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"NotResource": [
"arn:aws:ec2:us-east-1:012345678912:instance/*",
"arn:aws:ec2:eu-west-1:012345678912:instance/*"]},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-1:012345678912:instance/*",
"arn:aws:ec2:eu-west-1:012345678912:instance/*"],
"Condition": {
"StringLike": {"ec2:InstanceType": ["t1.*","t2.*","m3.*"]}
}
}
]
}
Include all services/actions you
want to exclude!
Grants access to everything
you need to launch an
instance, except the actual
instance
Lock down types here
Take advantage of IfExists conditional operator
• Many condition keys only exist for certain resource
types.
• If you test for a nonexistent key, your policy will fail to
evaluate (i.e., access denied).
• You can add IfExists at the end of any condition
operator except the Null condition (e.g.,
StringLikeIfExists).
• Allows you to create policies that “don’t care” if the key is
not present.
StringNotLikeIfExists Example
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:012345678901:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": ["t1.*", "t2.*", "m3.*"]
}
}
}
]
}
StringNotLikeIfExists Example
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:012345678901:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": ["t1.*", "t2.*", "m3.*"]
}
}
}
]
}
For all instances in all regions
StringNotLikeIfExists Example
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:012345678901:instance/*",
"Condition": {
"StringNotLikeIfExists": {
"ec2:InstanceType": ["t1.*", "t2.*", "m3.*"]
}
}
}
]
}
Only apply this condition if this
InstanceType key exists
For all instances in all regions
Testing and debugging
Testing and debugging
•
•
•
Policy editor
Policy validation checks:
• JSON errors
• Policy grammar errors
Policy formatting:
• On-demand
• Autoformatting
Policy simulator
Decoding the EC2 authorization message
• Additional information about the authorization status of a request
Decoding the EC2 authorization message
• The decoded message includes:
– Whether the request was denied due
to an explicit deny or absence of an
explicit allow.
– The principal who made the request.
– The requested action.
– The requested resource.
– The values of condition keys in the
context of the user's request.
• Additional information about the authorization status of a request
Output
Decoding the EC2 authorization message
• The decoded message includes:
– Whether the request was denied due
to an explicit deny or absence of an
explicit allow.
– The principal who made the request.
– The requested action.
– The requested resource.
– The values of condition keys in the
context of the user's request.
The message is encoded because the details of the
authorization status can constitute privileged information!
• Additional information about the authorization status of a request
Output
Decoding the EC2 authorization message
Demo
Decoding the EC2 authorization message
Demo
•
•
–
–
–
–
Policy enforcement
Policy enforcement
Policy enforcement
Decision
starts at Deny
1
Policy enforcement
Decision
starts at Deny
1
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
Policy enforcement
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
Policy enforcement
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
Is there an
explicit
deny?
3
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
Policy enforcement
Final decision =“deny”
(explicit deny)
Yes
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
Is there an
explicit
deny?
3
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
• If a policy statement
has a deny, it trumps
all other policy
statements.
Policy enforcement
Final decision =“deny”
(explicit deny)
Yes
No Is there an
Allow?
4
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
Is there an
explicit
deny?
3
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
• If a policy statement
has a deny, it trumps
all other policy
statements.
Policy enforcement
Final decision =“deny”
(explicit deny)
Yes
Final decision =“allow”
Yes
No Is there an
Allow?
4
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
Is there an
explicit
deny?
3
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
• If a policy statement
has a deny, it trumps
all other policy
statements.
• Access is granted
if there is an
explicit allow and
no deny.
Policy enforcement
Final decision =“deny”
(explicit deny)
Yes
Final decision =“allow”
Yes
No Is there an
Allow?
4
Decision
starts at Deny
1
Evaluate all
applicable
policies
2
Is there an
explicit
deny?
3
No Final decision =“deny”
(default deny)
5
• AWS retrieves all policies
associated with the user and
resource.
• Only policies that match the action
and conditions are evaluated.
• If a policy statement
has a deny, it trumps
all other policy
statements.
• Access is granted
if there is an
explicit allow and
no deny.
• By default, an
implicit (default)
deny is returned.
Summary
• IAM provides access control for your AWS account.
• The policy language authorizes that access.
• All applicable policies are evaluated.
• Users are denied access by default.
• A deny always trumps an allow.
• Use policy variables and remember the version!
• Keep in mind which EC2 actions or
resources are currently supported.
Additional resources
• Documentation
• http://aws.amazon.com/documentation/iam/
• http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-
permissions.html
• AWS Security Blog (blogs.aws.amazon.com/security)
• http://blogs.aws.amazon.com/security/post/Tx2KPWZJJ4S26H6/Demystifying-
EC2-Resource-Level-Permissions
• http://blogs.aws.amazon.com/security/post/Tx29ZC3VE9SQGQM/Granting-
Users-Permission-to-Work-in-the-Amazon-EC2-Console
• http://aws.amazon.com/iam
• https://forums.aws.amazon.com/forum.jspa?forumID=76
• Twitter: @AWSIdentity
Related sessions
Wednesday, 1:30–2:30 P.M.
SEC302 – IAM Best Practices to Live By
Thursday, 1:30–2:30 P.M.
SEC307 – A Progressive Journey Through AWS IAM
Federation Options: From Roles to SAML to Custom
Identity Brokers
Remember to complete
your evaluations!
Thank you!

More Related Content

What's hot

AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDSAWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
Amazon Web Services
 

What's hot (20)

How to use IAM roles grant access to AWS
How to use IAM roles grant access to AWSHow to use IAM roles grant access to AWS
How to use IAM roles grant access to AWS
 
AWS Route53
AWS Route53AWS Route53
AWS Route53
 
Introduction to AWS Organizations
Introduction to AWS OrganizationsIntroduction to AWS Organizations
Introduction to AWS Organizations
 
Introduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best PracticesIntroduction to AWS VPC, Guidelines, and Best Practices
Introduction to AWS VPC, Guidelines, and Best Practices
 
Deep dive into AWS IAM
Deep dive into AWS IAMDeep dive into AWS IAM
Deep dive into AWS IAM
 
Using AWS Key Management Service for Secure Workloads
Using AWS Key Management Service for Secure WorkloadsUsing AWS Key Management Service for Secure Workloads
Using AWS Key Management Service for Secure Workloads
 
AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDSAWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
AWSome Day 2016 - Module 4: Databases: Amazon DynamoDB and Amazon RDS
 
AWS networking fundamentals
AWS networking fundamentalsAWS networking fundamentals
AWS networking fundamentals
 
Encryption and Key Management in AWS
Encryption and Key Management in AWSEncryption and Key Management in AWS
Encryption and Key Management in AWS
 
Containers on AWS: An Introduction
Containers on AWS: An IntroductionContainers on AWS: An Introduction
Containers on AWS: An Introduction
 
Aws VPC
Aws VPCAws VPC
Aws VPC
 
AWS Security Week: AWS Secrets Manager
AWS Security Week: AWS Secrets ManagerAWS Security Week: AWS Secrets Manager
AWS Security Week: AWS Secrets Manager
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
Intro to Amazon S3
Intro to Amazon S3Intro to Amazon S3
Intro to Amazon S3
 
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
[REPEAT 1] Elastic Load Balancing: Deep Dive and Best Practices (NET404-R1) -...
 
AWS EC2
AWS EC2AWS EC2
AWS EC2
 
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
 
(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep Dive(SEC318) AWS CloudTrail Deep Dive
(SEC318) AWS CloudTrail Deep Dive
 
Amazon S3 Masterclass
Amazon S3 MasterclassAmazon S3 Masterclass
Amazon S3 Masterclass
 
ElastiCache & Redis
ElastiCache & RedisElastiCache & Redis
ElastiCache & Redis
 

Viewers also liked

63 Requirements for CASB
63 Requirements for CASB63 Requirements for CASB
63 Requirements for CASB
Kyle Watson
 

Viewers also liked (20)

Secure Amazon EC2 Environment with AWS IAM & Resource-Based Permissions (CPN2...
Secure Amazon EC2 Environment with AWS IAM & Resource-Based Permissions (CPN2...Secure Amazon EC2 Environment with AWS IAM & Resource-Based Permissions (CPN2...
Secure Amazon EC2 Environment with AWS IAM & Resource-Based Permissions (CPN2...
 
(SEC307) A Progressive Journey Through AWS IAM Federation Options
(SEC307) A Progressive Journey Through AWS IAM Federation Options(SEC307) A Progressive Journey Through AWS IAM Federation Options
(SEC307) A Progressive Journey Through AWS IAM Federation Options
 
(SEC302) IAM Best Practices To Live By
(SEC302) IAM Best Practices To Live By(SEC302) IAM Best Practices To Live By
(SEC302) IAM Best Practices To Live By
 
AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC...
AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC...AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC...
AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC...
 
Identity and Access Management (IAM)
Identity and Access Management (IAM)Identity and Access Management (IAM)
Identity and Access Management (IAM)
 
The Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity ModelThe Gartner IAM Program Maturity Model
The Gartner IAM Program Maturity Model
 
Introduction to Identity and Access Management (IAM)
Introduction to Identity and Access Management (IAM)Introduction to Identity and Access Management (IAM)
Introduction to Identity and Access Management (IAM)
 
In Depth: AWS IAM and VPC
In Depth: AWS IAM and VPCIn Depth: AWS IAM and VPC
In Depth: AWS IAM and VPC
 
Identity Access Management 101
Identity Access Management 101Identity Access Management 101
Identity Access Management 101
 
IAM Methods 2.0 Presentation Michael Nielsen Deloitte
IAM Methods 2.0 Presentation Michael Nielsen DeloitteIAM Methods 2.0 Presentation Michael Nielsen Deloitte
IAM Methods 2.0 Presentation Michael Nielsen Deloitte
 
Identity and Access Management 101
Identity and Access Management 101Identity and Access Management 101
Identity and Access Management 101
 
63 Requirements for CASB
63 Requirements for CASB63 Requirements for CASB
63 Requirements for CASB
 
Identity as a Service: a missing gap for moving enterprise applications in In...
Identity as a Service: a missing gap for moving enterprise applications in In...Identity as a Service: a missing gap for moving enterprise applications in In...
Identity as a Service: a missing gap for moving enterprise applications in In...
 
AWS re:Invent 2016: Introduction to Amazon CloudFront (CTD205)
AWS re:Invent 2016: Introduction to Amazon CloudFront (CTD205)AWS re:Invent 2016: Introduction to Amazon CloudFront (CTD205)
AWS re:Invent 2016: Introduction to Amazon CloudFront (CTD205)
 
Access Control for the Cloud: AWS Identity and Access Management (IAM) (SEC20...
Access Control for the Cloud: AWS Identity and Access Management (IAM) (SEC20...Access Control for the Cloud: AWS Identity and Access Management (IAM) (SEC20...
Access Control for the Cloud: AWS Identity and Access Management (IAM) (SEC20...
 
AWS re:Invent 2016: IAM Best Practices to Live By (SAC317)
AWS re:Invent 2016: IAM Best Practices to Live By (SAC317)AWS re:Invent 2016: IAM Best Practices to Live By (SAC317)
AWS re:Invent 2016: IAM Best Practices to Live By (SAC317)
 
(STG205) Secure Content Delivery Using Amazon CloudFront
(STG205) Secure Content Delivery Using Amazon CloudFront(STG205) Secure Content Delivery Using Amazon CloudFront
(STG205) Secure Content Delivery Using Amazon CloudFront
 
(SEC315) AWS Directory Service Deep Dive
(SEC315) AWS Directory Service Deep Dive (SEC315) AWS Directory Service Deep Dive
(SEC315) AWS Directory Service Deep Dive
 
IAM Best Practices
IAM Best PracticesIAM Best Practices
IAM Best Practices
 
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems ManagerAWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
AWS Black Belt Online Seminar 2017 Amazon EC2 Systems Manager
 

Similar to (SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less

Similar to (SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less (20)

SID314_IAM Policy Ninja
SID314_IAM Policy NinjaSID314_IAM Policy Ninja
SID314_IAM Policy Ninja
 
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS OrganizationsSEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
 
Policy Ninja
Policy NinjaPolicy Ninja
Policy Ninja
 
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS OrganizationsSEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
 
Become an IAM Policy Ninja
Become an IAM Policy NinjaBecome an IAM Policy Ninja
Become an IAM Policy Ninja
 
Mastering Access Control Policies (SEC302) | AWS re:Invent 2013
Mastering Access Control Policies (SEC302) | AWS re:Invent 2013Mastering Access Control Policies (SEC302) | AWS re:Invent 2013
Mastering Access Control Policies (SEC302) | AWS re:Invent 2013
 
Mastering Access Control Policies
Mastering Access Control PoliciesMastering Access Control Policies
Mastering Access Control Policies
 
Policy Ninja
Policy NinjaPolicy Ninja
Policy Ninja
 
Becoming an IAM Policy Ninja
Becoming an IAM Policy NinjaBecoming an IAM Policy Ninja
Becoming an IAM Policy Ninja
 
Masting Access Control Policies
Masting Access Control PoliciesMasting Access Control Policies
Masting Access Control Policies
 
Becoming an AWS Policy Ninja using AWS IAM - AWS Summit Tel Aviv 2017
Becoming an AWS Policy Ninja using AWS IAM - AWS Summit Tel Aviv 2017Becoming an AWS Policy Ninja using AWS IAM - AWS Summit Tel Aviv 2017
Becoming an AWS Policy Ninja using AWS IAM - AWS Summit Tel Aviv 2017
 
Windsor AWS UG Deep dive IAM 2 - no json101
Windsor AWS UG   Deep dive IAM 2 - no json101Windsor AWS UG   Deep dive IAM 2 - no json101
Windsor AWS UG Deep dive IAM 2 - no json101
 
best aws training in bangalore
best aws training in bangalorebest aws training in bangalore
best aws training in bangalore
 
Identify and Access Management: The First Step in AWS Security
Identify and Access Management: The First Step in AWS SecurityIdentify and Access Management: The First Step in AWS Security
Identify and Access Management: The First Step in AWS Security
 
(SEC303) Mastering Access Control Policies | AWS re:Invent 2014
(SEC303) Mastering Access Control Policies | AWS re:Invent 2014(SEC303) Mastering Access Control Policies | AWS re:Invent 2014
(SEC303) Mastering Access Control Policies | AWS re:Invent 2014
 
Identity and Access Management: The First Step in AWS Security
Identity and Access Management: The First Step in AWS SecurityIdentity and Access Management: The First Step in AWS Security
Identity and Access Management: The First Step in AWS Security
 
AWS Technical Day Riyadh Nov 2019 - The art of mastering data protection on aws
AWS Technical Day Riyadh Nov 2019 - The art of mastering data protection on awsAWS Technical Day Riyadh Nov 2019 - The art of mastering data protection on aws
AWS Technical Day Riyadh Nov 2019 - The art of mastering data protection on aws
 
Best Practices for Managing Security Operations in AWS - AWS July 2016 Webina...
Best Practices for Managing Security Operations in AWS - AWS July 2016 Webina...Best Practices for Managing Security Operations in AWS - AWS July 2016 Webina...
Best Practices for Managing Security Operations in AWS - AWS July 2016 Webina...
 
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS OrganizationsSEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
SEC302 Becoming an AWS Policy Ninja using AWS IAM and AWS Organizations
 
(SEC402) Intrusion Detection in the Cloud | AWS re:Invent 2014
(SEC402) Intrusion Detection in the Cloud | AWS re:Invent 2014(SEC402) Intrusion Detection in the Cloud | AWS re:Invent 2014
(SEC402) Intrusion Detection in the Cloud | AWS re:Invent 2014
 

More from Amazon Web Services

Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
Amazon Web Services
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
Amazon Web Services
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
Amazon Web Services
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
Amazon Web Services
 

More from Amazon Web Services (20)

Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
Come costruire servizi di Forecasting sfruttando algoritmi di ML e deep learn...
 
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
Big Data per le Startup: come creare applicazioni Big Data in modalità Server...
 
Esegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS FargateEsegui pod serverless con Amazon EKS e AWS Fargate
Esegui pod serverless con Amazon EKS e AWS Fargate
 
Costruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWSCostruire Applicazioni Moderne con AWS
Costruire Applicazioni Moderne con AWS
 
Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot Come spendere fino al 90% in meno con i container e le istanze spot
Come spendere fino al 90% in meno con i container e le istanze spot
 
Open banking as a service
Open banking as a serviceOpen banking as a service
Open banking as a service
 
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
Rendi unica l’offerta della tua startup sul mercato con i servizi Machine Lea...
 
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...OpsWorks Configuration Management: automatizza la gestione e i deployment del...
OpsWorks Configuration Management: automatizza la gestione e i deployment del...
 
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows WorkloadsMicrosoft Active Directory su AWS per supportare i tuoi Windows Workloads
Microsoft Active Directory su AWS per supportare i tuoi Windows Workloads
 
Computer Vision con AWS
Computer Vision con AWSComputer Vision con AWS
Computer Vision con AWS
 
Database Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatareDatabase Oracle e VMware Cloud on AWS i miti da sfatare
Database Oracle e VMware Cloud on AWS i miti da sfatare
 
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJSCrea la tua prima serverless ledger-based app con QLDB e NodeJS
Crea la tua prima serverless ledger-based app con QLDB e NodeJS
 
API moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e webAPI moderne real-time per applicazioni mobili e web
API moderne real-time per applicazioni mobili e web
 
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatareDatabase Oracle e VMware Cloud™ on AWS: i miti da sfatare
Database Oracle e VMware Cloud™ on AWS: i miti da sfatare
 
Tools for building your MVP on AWS
Tools for building your MVP on AWSTools for building your MVP on AWS
Tools for building your MVP on AWS
 
How to Build a Winning Pitch Deck
How to Build a Winning Pitch DeckHow to Build a Winning Pitch Deck
How to Build a Winning Pitch Deck
 
Building a web application without servers
Building a web application without serversBuilding a web application without servers
Building a web application without servers
 
Fundraising Essentials
Fundraising EssentialsFundraising Essentials
Fundraising Essentials
 
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
AWS_HK_StartupDay_Building Interactive websites while automating for efficien...
 
Introduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container ServiceIntroduzione a Amazon Elastic Container Service
Introduzione a Amazon Elastic Container Service
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

(SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less

  • 1. © 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Jeff Wierer, Senior AWS IAM Manager October 2015 SEC305 How to Become an IAM Policy Ninja in 60 Minutes or Less
  • 2. What to expect from this session • Know more about securing your AWS resources • Get a deeper understanding of the policy language • Tips and tricks for common use cases • Debugging and testing policies • Keep this a lively session via demos • Amazon S3 • AWS Identity and Access Management (IAM) • Amazon EC2
  • 3. Limit Amazon EC2 instance types Demo
  • 4. Limit Amazon EC2 instance types Demo • • – –
  • 5. Limit Amazon EC2 instance types Demo • • – –
  • 8. Policy specification basics JSON-formatted documents Contain a statement (permissions) that specifies: • Which actions a principal can perform • Which resources can be accessed { "Statement":[{ "Effect":"effect", "Principal":"principal", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] } Principal Action Resource Condition You can have multiple statements and each statement is comprised of PARC.
  • 9. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached)
  • 10. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*"
  • 11. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"}
  • 12. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!-- Individual IAM user --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username"
  • 13. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!-- Individual IAM user --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username" <!-- Federated user (using web identity federation) --> "Principal":{"Federated":"www.amazon.com"} "Principal":{"Federated":"graph.facebook.com"} "Principal":{"Federated":"accounts.google.com"}
  • 14. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!-- Individual IAM user --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username" <!-- Federated user (using web identity federation) --> "Principal":{"Federated":"www.amazon.com"} "Principal":{"Federated":"graph.facebook.com"} "Principal":{"Federated":"accounts.google.com"} <!-- Specific role --> "Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"}
  • 15. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!-- Individual IAM user --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username" <!-- Federated user (using web identity federation) --> "Principal":{"Federated":"www.amazon.com"} "Principal":{"Federated":"graph.facebook.com"} "Principal":{"Federated":"accounts.google.com"} <!-- Specific role --> "Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"} <!-- Specific service --> "Principal":{"Service":"ec2.amazonaws.com"}
  • 16. Principal – Examples • An entity that is allowed or denied access to a resource • Indicated by an Amazon Resource Name (ARN) • With IAM policies, the principal element is implicit (i.e., the user, group, or role attached) <!-- Everyone (anonymous users) --> "Principal":"AWS":"*.*" <!-- Specific account or accounts --> "Principal":{"AWS":"arn:aws:iam::123456789012:root" } "Principal":{"AWS":"123456789012"} <!-- Individual IAM user --> "Principal":"AWS":"arn:aws:iam::123456789012:user/username" <!-- Federated user (using web identity federation) --> "Principal":{"Federated":"www.amazon.com"} "Principal":{"Federated":"graph.facebook.com"} "Principal":{"Federated":"accounts.google.com"} <!-- Specific role --> "Principal":{"AWS":"arn:aws:iam::123456789012:role/rolename"} <!-- Specific service --> "Principal":{"Service":"ec2.amazonaws.com"} Replace with your account number
  • 17. Action – Examples • Describes the type of access that should be allowed or denied • You can find these in the docs or use the policy editor to get a drop-down list • Statements must include either an Action or NotAction element
  • 18. Action – Examples • Describes the type of access that should be allowed or denied • You can find these in the docs or use the policy editor to get a drop-down list • Statements must include either an Action or NotAction element <!-- EC2 action --> "Action":"ec2:StartInstances" <!-- IAM action --> "Action":"iam:ChangePassword" <!-- S3 action --> "Action":"s3:GetObject"
  • 19. Action – Examples • Describes the type of access that should be allowed or denied • You can find these in the docs or use the policy editor to get a drop-down list • Statements must include either an Action or NotAction element <!-- EC2 action --> "Action":"ec2:StartInstances" <!-- IAM action --> "Action":"iam:ChangePassword" <!-- S3 action --> "Action":"s3:GetObject" <!-- Specify multiple values for the Action element--> "Action":["sqs:SendMessage","sqs:ReceiveMessage"]
  • 20. Action – Examples • Describes the type of access that should be allowed or denied • You can find these in the docs or use the policy editor to get a drop-down list • Statements must include either an Action or NotAction element <!-- EC2 action --> "Action":"ec2:StartInstances" <!-- IAM action --> "Action":"iam:ChangePassword" <!-- S3 action --> "Action":"s3:GetObject" <!-- Specify multiple values for the Action element--> "Action":["sqs:SendMessage","sqs:ReceiveMessage"] <--Use wildcards (* or ?) as part of the action name. This would cover Create/Delete/List/Update--> "Action":"iam:*AccessKey*"
  • 21. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs
  • 22. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] }
  • 23. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } or
  • 24. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "iam:*", "Resource": "*" } ] } or
  • 25. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "iam:*", "Resource": "*" } ] } or Is there a difference?
  • 26. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "iam:*", "Resource": "*" } ] } or This is not a Deny. A user could still have a separate policy that grants IAM:*
  • 27. Understanding NotAction • Lets you specify an exception to a list of actions • Could result in shorter policies than using Action and denying many actions • Example: Let’s say you want to allow everything but IAM APIs { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Deny", "Action": "iam:*", "Resource": "*" } ] } or This is not a Deny. A user could still have a separate policy that grants IAM:* If you want to prevent the user from ever being able to call IAM APIs, use an explicit deny.
  • 28. Resource – Examples • The object or objects that are being requested • Statements must include either a Resource or a NotResource element
  • 29. Resource – Examples • The object or objects that are being requested • Statements must include either a Resource or a NotResource element <-- S3 Bucket --> "Resource":"arn:aws:s3:::my_corporate_bucket/*" <-- SQS queue--> "Resource":"arn:aws:sqs:us-west-2:123456789012:queue1" <-- Multiple DynamoDB tables --> "Resource":["arn:aws:dynamodb:us-west-2:123456789012:table/books_table", "arn:aws:dynamodb:us-west-2:123456789012:table/magazines_table"] <-- All EC2 instances for an account in a region --> "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
  • 30. Conditions • Optional criteria that must evaluate to true for the policy to evaluate as true (ex: restrict to an IP address range) Condition element
  • 31. Conditions Condition element Condition 1: Key1: Value1A Condition 2: Key3: Value3A • Optional criteria that must evaluate to true for the policy to evaluate as true • Ex: restrict to an IP address range • Can contain multiple conditions
  • 32. Conditions • Optional criteria that must evaluate to true for the policy to evaluate as true • Ex: restrict to an IP address range • Can contain multiple conditions • Condition keys can contain multiple values Condition element Condition 1: Key1: Value1A Condition 2: Key3: Value3A Key1: Value1A Value1B Value 1C
  • 33. Conditions • Optional criteria that must evaluate to true for the policy to evaluate as true • Ex: restrict to an IP address range • Can contain multiple conditions • Condition keys can contain multiple values • If a single condition includes multiple values for one key, the condition is evaluated using logical OR • Condition element Condition 1: Key1: Value1A Condition 2: Key3: Value3A OR ORKey1: Value1A Value1B Value 1C
  • 34. Conditions • Optional criteria that must evaluate to true for the policy to evaluate as true • Ex: restrict to an IP address range • Can contain multiple conditions • Condition keys can contain multiple values • If a single condition includes multiple values for one key, the condition is evaluated using logical OR • Multiple conditions (or multiple keys in a single condition): the conditions are evaluated using logical AND Condition element Condition 1: Key1: Value1A Condition 2: Key3: Value3A AND AND Key2: Value2A OR Value2B OR ORKey1: Value1A Value1B Value 1C
  • 35. Condition example "Condition" : { "DateGreaterThan" : {"aws:CurrentTime" : "2015-10-08T12:00:00Z"}, "DateLessThan": {"aws:CurrentTime" : "2015-10-08T15:00:00Z"}, "IpAddress" : {"aws:SourceIp" : ["192.0.2.0/24", "203.0.113.0/24"]} } • Allows a user to access a resource under the following conditions: • The time is after 12:00 P.M. on 10/8/2015 AND • The time is before 3:00 P.M. on 10/8/2015 AND • The request comes from an IP address in the 192.0.2.0 /24 OR 203.0.113.0 /24 range All of these conditions must be met in order for the statement to evaluate to TRUE. AND OR What if you wanted to restrict access to a time frame and IP address range?
  • 38. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix":["home/${aws:username}/*"]} } }, { "Effect":"Allow", "Action":["s3:*"], "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}", "arn:aws:s3:::myBucket/home/${aws:username}/*"] } ] } The anatomy of a policy with variables Grants a user access to a home directory in S3 that can be accessed programmatically
  • 39. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix":["home/${aws:username}/*"]} } }, { "Effect":"Allow", "Action":["s3:*"], "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}", "arn:aws:s3:::myBucket/home/${aws:username}/*"] } ] } The anatomy of a policy with variables Version is required Grants a user access to a home directory in S3 that can be accessed programmatically
  • 40. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix":["home/${aws:username}/*"]} } }, { "Effect":"Allow", "Action":["s3:*"], "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}", "arn:aws:s3:::myBucket/home/${aws:username}/*"] } ] } The anatomy of a policy with variables Version is required Variable in conditions Grants a user access to a home directory in S3 that can be accessed programmatically
  • 41. { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix":["home/${aws:username}/*"]} } }, { "Effect":"Allow", "Action":["s3:*"], "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}", "arn:aws:s3:::myBucket/home/${aws:username}/*"] } ] } The anatomy of a policy with variables Version is required Variable in conditions Variable in resource ARNs Grants a user access to a home directory in S3 that can be accessed programmatically
  • 44. IAM policies • Managed policies (newer way) • Can be attached to multiple users, groups, and roles • AWS managed policies: Created and maintained by AWS • Customer managed policies: Created and maintained by you • Up to 5K per policy • Up to 5 versions of a policy so you can roll back to a prior version • You can attach 10 managed policies per user, group, or role • You can limit who can attach which managed policies • Inline policies (older way) • You create and embed directly in a single user, group, or role • Variable policy size (2K per user, 5K per group, 10K per role)
  • 45. Resource-based policies IAM policies live with: • IAM users • IAM groups • IAM roles Some services allow storing policy with resources: • S3 (bucket policy) • Amazon Glacier (vault policy) • Amazon SNS (topic policy) • Amazon SQS (queue policy) { "Statement": { "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:444455556666:queue1" } }
  • 46. Resource-based policies IAM policies live with: • IAM users • IAM groups • IAM roles Some services allow storing policy with resources: • S3 (bucket policy) • Amazon Glacier (vault policy) • Amazon SNS (topic policy) • Amazon SQS (queue policy) { "Statement": { "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:444455556666:queue1" } } Principal required here
  • 47. Resource-based policies IAM policies live with: • IAM users • IAM groups • IAM roles Some services allow storing policy with resources: • S3 (bucket policy) • Amazon Glacier (vault policy) • Amazon SNS (topic policy) • Amazon SQS (queue policy) { "Statement": { "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:444455556666:queue1" } } Principal required here Managed policies apply only to users, groups, and roles— not resources
  • 48. Resource-based policies IAM policies live with: • IAM users • IAM groups • IAM roles Some services allow storing policy with resources: • S3 (bucket policy) • Amazon Glacier (vault policy) • Amazon SNS (topic policy) • Amazon SQS (queue policy) { "Statement": { "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:444455556666:queue1" } } Principal required here
  • 49. Enough already… Let’s look at some examples
  • 50. Enough already… Let’s look at some examples
  • 51. Creating a home directory using S3 Demo
  • 52. Creating a home directory using S3 Demo • – – • – – –
  • 53. Giving a user a home directory from the S3 console { "Version": "2012-10-17", ] }
  • 54. Giving a user a home directory from the S3 console { "Version": "2012-10-17", "Statement": [ {"Sid": "AllowGroupToSeeBucketListInTheManagementConsole", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"]}, {"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::myBucket"], "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}}, ] } • Necessary to access the S3 console.
  • 55. Giving a user a home directory from the S3 console { "Version": "2012-10-17", "Statement": [ {"Sid": "AllowGroupToSeeBucketListInTheManagementConsole", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"]}, {"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::myBucket"], "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}}, {"Sid": "AllowListBucketofASpecificUserPrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::myBucket"], "Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}}, ] } • Allows listing all objects in a folder and its subfolders.
  • 56. Giving a user a home directory from the S3 console { "Version": "2012-10-17", "Statement": [ {"Sid": "AllowGroupToSeeBucketListInTheManagementConsole", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"]}, {"Sid": "AllowRootLevelListingOfThisBucketAndHomePrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::myBucket"], "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}}, {"Sid": "AllowListBucketofASpecificUserPrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::myBucket"], "Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}}, {"Sid":"AllowUserFullAccesstoJustSpecificUserPrefix", "Action":["s3:*"], "Effect":"Allow", "Resource": ["arn:aws:s3:::myBucket/home/${aws:username}", "arn:aws:s3:::myBucket/home/${aws:username}/*"]} ] } • Allows modifying objects in the folder and subfolders.
  • 57. Creating a “limited” IAM administrator Demo
  • 58. Creating a “limited” IAM administrator Demo • –
  • 59. Creating a “limited” IAM administrator Demo • – • – – Grant admin access to the IAM console to be able to create users and generate access keys. –
  • 60. Create a “limited” IAM administrator { "Version": "2012-10-17", "Statement": [{ "Sid": "ManageUsersPermissions", "Effect": "Allow", "Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies", "iam:ListPolicies"], "Resource": "*" }, { "Sid": "LimitedAttachmentPermissions", "Effect": "Allow", "Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"], "Resource": "*", "Condition": { "ArnEquals": { "iam:PolicyArn": [ "arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder", "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess" ] } } } ] } See AWS Security Blog post http://amzn.to/1Hf2XRl
  • 61. Create a “limited” IAM administrator { "Version": "2012-10-17", "Statement": [{ "Sid": "ManageUsersPermissions", "Effect": "Allow", "Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies", "iam:ListPolicies"], "Resource": "*" }, { "Sid": "LimitedAttachmentPermissions", "Effect": "Allow", "Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"], "Resource": "*", "Condition": { "ArnEquals": { "iam:PolicyArn": [ "arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder", "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess" ] } } } ] } See AWS Security Blog post http://amzn.to/1Hf2XRl • Allows creating users, managing keys, and setting passwords.
  • 62. Create a “limited” IAM administrator { "Version": "2012-10-17", "Statement": [{ "Sid": "ManageUsersPermissions", "Effect": "Allow", "Action": ["iam:ChangePasword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:DeleteUser", "iam:UpdateAccessKey", "iam:ListAttachedUserPolicies", "iam:ListPolicies"], "Resource": "*" }, { "Sid": "LimitedAttachmentPermissions", "Effect": "Allow", "Action": ["iam:AttachUserPolicy","iam:DetachUserPolicy"], "Resource": "*", "Condition": { "ArnEquals": { "iam:PolicyArn": [ "arn:aws:iam::123456789012:policy/reInvent2015_S3_Home_Folder", "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess" ] } } } ] } See AWS Security Blog post http://amzn.to/1Hf2XRl • Limits attaching only these two policies.
  • 63. Grant a user access to the IAM console { "Version": "2012-10-17", "Statement": [{ "Sid": "ViewListOfAllUsers", "Action": "iam:ListUsers", "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/*" }, { "Sid": "AllowAdmintoAccessUser", "Effect": "Allow", "Action": ["iam:GetUser","iam:GetLoginProfile", "iam:ListGroupsForUser","iam:ListAccessKeys"], "Resource": "arn:aws:iam::123456789012:user/${aws:username}" } ] } • Underneath the covers, the IAM console calls these APIs to view user settings. • The user will be able to view details about all users. • Doesn’t enable adding/removing MFA.
  • 66. { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource":"*" } ] } EC2 policies before resource-level permissions
  • 67. { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource":"*" } ] } Tell me there is a better way. EC2 policies before resource-level permissions
  • 68. { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-abc12345" } ] } EC2 policies after resource-level permissions
  • 69. EC2 policies after resource-level permissions { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*" } ] }
  • 70. EC2 policies after resource-level permissions { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": {"ec2:ResourceTag/department": "dev"} } } ] }
  • 71. Supported EC2 resource types • Customer gateway • DHCP options set • Image • Instance • Instance profile • Internet gateway • Key pair • Network ACL • Network interface • Placement group • Route table • Security group • Snapshot • Subnet • Volume • VPC • VPC peering connection Supports many different resource types, including:
  • 72. Supported EC2 actions Note: This is only a subset of all possible EC2 actions. Type of Resource Actions EC2 instances RebootInstances, RunInstance, StartInstances, StopInstances, TerminateInstances, AttachClassicLinkVpc, AttachVolume, DetachClassicLinkVpc, DetachVolume, Customer gateway DeleteCustomerGateway DHCP options sets DeleteDhcpOptions Internet gateways DeleteInternetGateway Network ACLs DeleteNetworkAcl, DeleteNetworkAclEntry Route tables DeleteRoute, DeleteRouteTable Security groups AuthorizeSecurityGroupEgress, AuthorizeSecurityGroupIngress, DeleteSecurityGroup, RevokeSecurityGroupEgress, RevokeSecurityGroupIngress, AttachClassicLinkVpc, RunInstances Volumes AttachVolume, DeleteVolume, DetachVolume, RunInstances VPC peering connections AcceptVpcPeeringConnection, CreateVpcPeeringConnection, DeleteVpcPeeringConnection, RejectVpcPeeringConnection, DisableVpcClassicLink, EnableVpcClassicLink Accurate as of 10/1/2015
  • 73. Categorize your EC2 resources Use tags as a resource attribute
  • 77. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [ { "Sid": "THISALLOWSEC2READACCESS", "Effect": "Allow", "Action": ["ec2:Describe*","elasticloadbalancing:Describe*", "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics", "cloudwatch:Describe*","autoscaling:Describe*"], "Resource": "*" }, { "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances","ec2:StartInstances", "ec2:StopInstances","ec2:TerminateInstances"], "Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"}} } ] }
  • 78. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [ { "Sid": "THISALLOWSEC2READACCESS", "Effect": "Allow", "Action": ["ec2:Describe*","elasticloadbalancing:Describe*", "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics", "cloudwatch:Describe*","autoscaling:Describe*"], "Resource": "*" }, { "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances","ec2:StartInstances", "ec2:StopInstances","ec2:TerminateInstances"], "Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"}} } ] } Version is required here because we’re using variables
  • 79. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [ { "Sid": "THISALLOWSEC2READACCESS", "Effect": "Allow", "Action": ["ec2:Describe*","elasticloadbalancing:Describe*", "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics", "cloudwatch:Describe*","autoscaling:Describe*"], "Resource": "*" }, { "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances","ec2:StartInstances", "ec2:StopInstances","ec2:TerminateInstances"], "Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"}} } ] } Version is required here because we’re using variables Allows seeing everything from the EC2 console
  • 80. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [ { "Sid": "THISALLOWSEC2READACCESS", "Effect": "Allow", "Action": ["ec2:Describe*","elasticloadbalancing:Describe*", "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics", "cloudwatch:Describe*","autoscaling:Describe*"], "Resource": "*" }, { "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances","ec2:StartInstances", "ec2:StopInstances","ec2:TerminateInstances"], "Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"}} } ] } Version is required here because we’re using variables Only allowed if this tag condition is true Allows seeing everything from the EC2 console
  • 81. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [ { "Sid": "THISALLOWSEC2READACCESS", "Effect": "Allow", "Action": ["ec2:Describe*","elasticloadbalancing:Describe*", "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics", "cloudwatch:Describe*","autoscaling:Describe*"], "Resource": "*" }, { "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances","ec2:StartInstances", "ec2:StopInstances","ec2:TerminateInstances"], "Resource":"arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/Owner": "${aws:username}"}} } ] } Version is required here because we’re using variables Only allowed if this tag condition is true Specify the tag key and value here Allows seeing everything from the EC2 console
  • 82. Limit EC2 instance types Demo
  • 83. Limit EC2 instance types Demo •
  • 84. Limit EC2 instance types Demo • • – – –
  • 85. Locking down access to instance types { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "NotAction": ["iam:*","ec2:RunInstances"], "Resource": "*"}, { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": [ "arn:aws:ec2:us-east-1:012345678912:instance/*", "arn:aws:ec2:eu-west-1:012345678912:instance/*"]}, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:us-east-1:012345678912:instance/*", "arn:aws:ec2:eu-west-1:012345678912:instance/*"], "Condition": { "StringLike": {"ec2:InstanceType": ["t1.*","t2.*","m3.*"]} } } ] } Include all services/actions you want to exclude! Grants access to everything you need to launch an instance, except the actual instance Lock down types here
  • 86. Take advantage of IfExists conditional operator • Many condition keys only exist for certain resource types. • If you test for a nonexistent key, your policy will fail to evaluate (i.e., access denied). • You can add IfExists at the end of any condition operator except the Null condition (e.g., StringLikeIfExists). • Allows you to create policies that “don’t care” if the key is not present.
  • 87. StringNotLikeIfExists Example { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:012345678901:instance/*", "Condition": { "StringNotLikeIfExists": { "ec2:InstanceType": ["t1.*", "t2.*", "m3.*"] } } } ] }
  • 88. StringNotLikeIfExists Example { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:012345678901:instance/*", "Condition": { "StringNotLikeIfExists": { "ec2:InstanceType": ["t1.*", "t2.*", "m3.*"] } } } ] } For all instances in all regions
  • 89. StringNotLikeIfExists Example { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*" }, { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:012345678901:instance/*", "Condition": { "StringNotLikeIfExists": { "ec2:InstanceType": ["t1.*", "t2.*", "m3.*"] } } } ] } Only apply this condition if this InstanceType key exists For all instances in all regions
  • 92. Policy editor Policy validation checks: • JSON errors • Policy grammar errors Policy formatting: • On-demand • Autoformatting
  • 94. Decoding the EC2 authorization message • Additional information about the authorization status of a request
  • 95. Decoding the EC2 authorization message • The decoded message includes: – Whether the request was denied due to an explicit deny or absence of an explicit allow. – The principal who made the request. – The requested action. – The requested resource. – The values of condition keys in the context of the user's request. • Additional information about the authorization status of a request Output
  • 96. Decoding the EC2 authorization message • The decoded message includes: – Whether the request was denied due to an explicit deny or absence of an explicit allow. – The principal who made the request. – The requested action. – The requested resource. – The values of condition keys in the context of the user's request. The message is encoded because the details of the authorization status can constitute privileged information! • Additional information about the authorization status of a request Output
  • 97. Decoding the EC2 authorization message Demo
  • 98. Decoding the EC2 authorization message Demo • • – – – –
  • 102. Policy enforcement Decision starts at Deny 1 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated.
  • 103. Policy enforcement Decision starts at Deny 1 Evaluate all applicable policies 2 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated.
  • 104. Policy enforcement Decision starts at Deny 1 Evaluate all applicable policies 2 Is there an explicit deny? 3 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated.
  • 105. Policy enforcement Final decision =“deny” (explicit deny) Yes Decision starts at Deny 1 Evaluate all applicable policies 2 Is there an explicit deny? 3 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated. • If a policy statement has a deny, it trumps all other policy statements.
  • 106. Policy enforcement Final decision =“deny” (explicit deny) Yes No Is there an Allow? 4 Decision starts at Deny 1 Evaluate all applicable policies 2 Is there an explicit deny? 3 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated. • If a policy statement has a deny, it trumps all other policy statements.
  • 107. Policy enforcement Final decision =“deny” (explicit deny) Yes Final decision =“allow” Yes No Is there an Allow? 4 Decision starts at Deny 1 Evaluate all applicable policies 2 Is there an explicit deny? 3 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated. • If a policy statement has a deny, it trumps all other policy statements. • Access is granted if there is an explicit allow and no deny.
  • 108. Policy enforcement Final decision =“deny” (explicit deny) Yes Final decision =“allow” Yes No Is there an Allow? 4 Decision starts at Deny 1 Evaluate all applicable policies 2 Is there an explicit deny? 3 No Final decision =“deny” (default deny) 5 • AWS retrieves all policies associated with the user and resource. • Only policies that match the action and conditions are evaluated. • If a policy statement has a deny, it trumps all other policy statements. • Access is granted if there is an explicit allow and no deny. • By default, an implicit (default) deny is returned.
  • 109. Summary • IAM provides access control for your AWS account. • The policy language authorizes that access. • All applicable policies are evaluated. • Users are denied access by default. • A deny always trumps an allow. • Use policy variables and remember the version! • Keep in mind which EC2 actions or resources are currently supported.
  • 110. Additional resources • Documentation • http://aws.amazon.com/documentation/iam/ • http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api- permissions.html • AWS Security Blog (blogs.aws.amazon.com/security) • http://blogs.aws.amazon.com/security/post/Tx2KPWZJJ4S26H6/Demystifying- EC2-Resource-Level-Permissions • http://blogs.aws.amazon.com/security/post/Tx29ZC3VE9SQGQM/Granting- Users-Permission-to-Work-in-the-Amazon-EC2-Console • http://aws.amazon.com/iam • https://forums.aws.amazon.com/forum.jspa?forumID=76 • Twitter: @AWSIdentity
  • 111. Related sessions Wednesday, 1:30–2:30 P.M. SEC302 – IAM Best Practices to Live By Thursday, 1:30–2:30 P.M. SEC307 – A Progressive Journey Through AWS IAM Federation Options: From Roles to SAML to Custom Identity Brokers
  • 112. Remember to complete your evaluations!