SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Jeff Wierer, Senior Manager – AWS IAM
November 30, 2016
How to Become an IAM Policy Ninja
in 60 Minutes or Less
SAC303
What to Expect from the Session
• Know more about securing your AWS resources
• Deeper understanding of AWS IAM permissions
• Tips and tricks
• Debugging, testing, and other policy foo
• A lively session via demos
Amazon
S3
AWS
IAM
Amazon
EC2
Limit Amazon EC2 instance types
Demo
• Goal: Limit a user from starting an instance unless the
instance is t1.*, t2.*, m3.*
• Let’s try to:
– Create a managed policy that attempts to limit starting an EC2
instance except for these instance types.
– Attach that policy to an IAM user.
The policy language
• Provides authorization
• Two facets:
– Specification: Defining access policies
– Enforcement: Evaluating policies
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
<!-- EC2 action -->
"Action":"ec2:StartInstances"
<!-- IAM action -->
"Action":"iam:ChangePassword"
<!– Amazon S3 action -->
"Action":"s3:GetObject"
<!-- Specify multiple values for the Action element-->
"Action":["sqs:SendMessage","sqs:ReceiveMessage"]
<-- Wildcards (* or ?) in the action name. Below covers 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
{
"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.
Is there a
difference?
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/*"
<-- Amazon SQS queue-->
"Resource":"arn:aws:sqs:us-west-2:123456789012:queue1"
<-- Multiple Amazon 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)
• 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" : "2016-11-30T11:00:00Z"},
"DateLessThan": {"aws:CurrentTime" : "2016-11-30T15: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 11:00 A.M. on 11/30/2016 AND
• The time is before 3:00 P.M. on 11/30/2016 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
• Predefined variables based on service request context
– Existing keys (aws:SourceIP, aws:CurrentTime, etc.)
– Principal-specific keys (aws:username, aws:userid, aws:principaltype)
– Provider-specific keys (graph.facebook.com:id, www.amazon.com:user_id)
– SAML keys (saml:aud, saml:iss)
– See documentation for service-specific variables
• Benefits
– Simplifies policy management
– Reduces the need for hard-coded, user-specific policies
• Use cases we’ll look at
– Set up user access to “home folder” in S3
– Limit access to specific EC2 resources
{
"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
• IAM policies
– Managed policies
– Inline polices
• Resource-based 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"
}
}
Principal required here
Managed policies
apply only to users,
groups, and roles—
not resources
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.
Enough already…
Let’s look at some examples
S3 IAM EC2
Creating a home directory using S3
Demo
• Goal: Create a managed policy that:
– Limits access to a prefix in an S3 bucket
– For example, arn:aws:s3:::my_bucket/home/Bob/*
• We’ll examine how to:
– Create a managed policy that uses variables.
– Enable users to list buckets in the S3 console.
– Limit users’ access to specific folders in a bucket.
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}/*"]}
]
}
• Necessary to
access the
S3 console.
• Allows listing all
objects in a folder
and its subfolders.
• Allows modifying
objects in the folder
and subfolders.
Creating a “limited” IAM administrator
Demo
• Goal:
– Create a limited administrator who can use the IAM
console to manage users, but only using certain policies
• We’ll examine group policies that use variables to:
– Grant admin full access to Amazon DynamoDB and
read/write access to an S3 bucket.
– Grant admin access to the IAM console to be able to
create users and generate access keys.
– Limit admin to a well-defined set of managed policies.
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/reInvent_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.
• 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.
Production Account
Acct ID: 222222222222
my-role
{ "Statement": [
{
"Effect": "Allow",
"Action": "ACTIONS",
"Resource": "*"
}
]
}
My DEV Account
Acct ID: 111111111111
Authenticate as Bob
Assumes my-role
Switches to production
Account in the console
{ "Statement": [
{
"Effect": "Allow",
"Action": “sts:AssumeRole",
"Resource": "arn:aws:iam::222222222222:role/my-role"
}
]
}
{ "Statement": [
{
"Effect":"Allow",
"Principal":{"AWS":"arn:aws:iam::111111111111:root"},
"Action":"sts:AssumeRole"
}
]
}
Cross-Account Console Access
Policy assigned to my-role defining
who (trusted entities) can assume the role
Policy assigned to Bob granting him permission
to assume my-role in the production account
Permissions assigned to my-role
STS
Bob

Switch Console as Bob
• Goal: Create a managed policy that:
– Limits cross-account access to specific users.
– E.g., IAM users and federated users.
• We’ll examine how to:
– Create a managed policy that uses IAM/STS ARNs.
– Enable specific users to switch between AWS accounts.
– Deny switching between accounts to other users.
How to Grant Conditional Cross-Account Access
Demo
Grant cross-account conditional IAM user access
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": ["arn:aws:iam::790891838339:root"]
]
}
}]
}
This is what is put in by default
Grant cross-account conditional IAM user access
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": ["arn:aws:iam::111111111111:user/Bob"]
]
}
}]
} Specify the exact IAM user you want to
grant access.
Grant cross-account conditional federated access
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": ["arn:aws:sts::111111111111:assumed-role/ROLENAME/ROLESESSIONNAME"]
]
}
}]
}
This will grant access to the specified
federated user
Grant cross-account conditional federated access
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/Bob",
"arn:aws:sts::111111111111:assumed-role/ROLENAME/ROLESESSIONNAME"
]
}
}]
}
You can
even mix
and match!
• Previously, policies applied to all EC2 resources
• Permissions can be set per resource
• Ex: assign which users can stop, start, or terminate a
particular instance
EC2 resource-level permissions
{
"Statement": [{
"Effect": "Allow",
"Action": ["ec2:TerminateInstances"],
"Resource":"*"
}
]
}
That’s not very
Ninja-like!
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,
GetConsoleScreenshot
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 11/16/2016
Categorize your EC2 resources
Use tags as a resource attribute
• Allows user-defined models
• “Prod”/”Dev”
• “Cost Center X”
• “Department Y”
• “Project reInvent”
EC2 resource-level permissions
Demo
• Goal: Limit a user from starting, stopping, or
terminating an instance unless the instance is owned
by the user.
• We’ll examine:
– Adding an owner tag to an EC2 instance.
– A policy that grants a user access to the EC2 console.
– A policy that uses variables to limit access based on an owner tag.
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "elasticloadbalancing:Describe*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics","cloudwatch:Describe*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "autoscaling:Describe*",
"Resource": "*"
}]
}
Allows seeing everything from
the EC2 console
This is the AWS managed policy named AmazonEC2ReadOnlyAccess
Locking down access to EC2 instances
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "THISLIMITSACCESSTOOWNINSTANCES",
"Effect": "Allow",
"Action": ["ec2:RebootInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:*: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
Limit EC2 instance types
Demo
• Goal: Limit a user from starting an instance unless the
instance is t1.*, t2.*, m3.*
• We’ll do the following:
– Create a new IAM group.
– Create a managed policy that limits starting EC2 instances to specific
instance types.
– Attach that managed policy to the IAM group.
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-2:012345678912:instance/*",
"arn:aws:ec2:eu-west-1:012345678912:instance/*"]},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-2: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 (in other words, access denied).
• You can add IfExists at the end of any condition
operator except the Null condition (for example,
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.*"
]
}
}
}
]
}
Only apply this condition if this
InstanceType key exists
Explicitly deny access to
RunInstances, for all regions
and resources if condition is met
Granting access to all EC2
actions on all resources in all
regions
That sounds
great. What if I
get stuck? Can I
call you?
Magic: Testing and debugging
• Authoring – Policy editor
• Testing – Policy simulator
• Debugging – Encoded authorization message
(EC2)
Policy editor
Policy validation checks:
• JSON errors
• Policy grammar errors
Policy formatting:
• On-demand
• Autoformatting
Policy simulator
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.
• Requires permissions to call
sts:DecodeAuthorizationMessage
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
• Goal: Determine what caused an EC2 authorization
failure
• We’ll do the following:
– Try to call an EC2 action
– Capture the EC2 Authorization Failure in JSON format
– Remove the DecodeMessage “wrapper”
– Format the message to identify the missing permission
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!
• Use managed policies: they make life easier.
• Keep in mind which EC2 actions or
resources are currently supported.
AWS IAM Policy Ninja
Disclaimer: Not really. This is not a real certification, but thank you for sticking around until the end.

Remember to complete
your evaluations!
Additional resources
• AWS IAM home page: http://aws.amazon.com/iam
• Documentation
• http://aws.amazon.com/documentation/iam/
• http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-
permissions.html
• AWS Security Blog
• https://aws.amazon.com/blogs/security/demystifying-ec2-resource-level-permissions/
• https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-
amazon-ec2-console/
• https://aws.amazon.com/blogs/security/how-to-create-a-limited-iam-administrator-by-
using-managed-policies/
• IAM forum: https://forums.aws.amazon.com/forum.jspa?forumID=76
• Twitter: @AWSIdentity
Thank you!

Contenu connexe

Tendances

Tendances (20)

AWS Security Best Practices and Design Patterns
AWS Security Best Practices and Design PatternsAWS Security Best Practices and Design Patterns
AWS Security Best Practices and Design Patterns
 
AWS Connectivity, VPC Design and Security Pro Tips
AWS Connectivity, VPC Design and Security Pro TipsAWS Connectivity, VPC Design and Security Pro Tips
AWS Connectivity, VPC Design and Security Pro Tips
 
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
 
Become an AWS IAM Policy Ninja
Become an AWS IAM Policy NinjaBecome an AWS IAM Policy Ninja
Become an AWS IAM Policy Ninja
 
AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...
AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...
AWS IAM Tutorial | Identity And Access Management (IAM) | AWS Training Videos...
 
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
Amazon GuardDuty: Intelligent Threat Detection and Continuous Monitoring to P...
 
VPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPCVPC Design and New Capabilities for Amazon VPC
VPC Design and New Capabilities for Amazon VPC
 
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
 
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 Control Tower를 통한 클라우드 보안 및 거버넌스 설계 - 김학민 :: AWS 클라우드 마이그레이션 온라인
AWS Control Tower를 통한 클라우드 보안 및 거버넌스 설계 - 김학민 :: AWS 클라우드 마이그레이션 온라인AWS Control Tower를 통한 클라우드 보안 및 거버넌스 설계 - 김학민 :: AWS 클라우드 마이그레이션 온라인
AWS Control Tower를 통한 클라우드 보안 및 거버넌스 설계 - 김학민 :: AWS 클라우드 마이그레이션 온라인
 
AWS Technical Essentials Day
AWS Technical Essentials DayAWS Technical Essentials Day
AWS Technical Essentials Day
 
Webinar AWS 201 - Using Amazon Virtual Private Cloud (VPC)
Webinar AWS 201 - Using Amazon Virtual Private Cloud (VPC)Webinar AWS 201 - Using Amazon Virtual Private Cloud (VPC)
Webinar AWS 201 - Using Amazon Virtual Private Cloud (VPC)
 
Plan Advanced AWS Networking Architectures - SRV323 - Chicago AWS Summit
Plan Advanced AWS Networking Architectures - SRV323 - Chicago AWS SummitPlan Advanced AWS Networking Architectures - SRV323 - Chicago AWS Summit
Plan Advanced AWS Networking Architectures - SRV323 - Chicago AWS Summit
 
Deep Dive on AWS Lambda
Deep Dive on AWS LambdaDeep Dive on AWS Lambda
Deep Dive on AWS Lambda
 
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
 
AWS IAM과 친해지기 – 조이정, AWS 솔루션즈 아키텍트:: AWS Builders Online Series
AWS IAM과 친해지기 – 조이정, AWS 솔루션즈 아키텍트:: AWS Builders Online Series AWS IAM과 친해지기 – 조이정, AWS 솔루션즈 아키텍트:: AWS Builders Online Series
AWS IAM과 친해지기 – 조이정, AWS 솔루션즈 아키텍트:: AWS Builders Online Series
 
Landing Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS MigrationsLanding Zones - Creating a Foundation for Your AWS Migrations
Landing Zones - Creating a Foundation for Your AWS Migrations
 
Deep Dive into AWS SAM
Deep Dive into AWS SAMDeep Dive into AWS SAM
Deep Dive into AWS SAM
 
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
 
AWS Storage - S3 Fundamentals
AWS Storage - S3 FundamentalsAWS Storage - S3 Fundamentals
AWS Storage - S3 Fundamentals
 

Similaire à AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC303)

Similaire à AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC303) (20)

Becoming an IAM Policy Ninja
Becoming an IAM Policy NinjaBecoming an IAM Policy Ninja
Becoming an IAM Policy Ninja
 
Mastering Access Control Policies
Mastering Access Control PoliciesMastering Access Control Policies
Mastering Access Control Policies
 
Policy Ninja
Policy NinjaPolicy Ninja
Policy Ninja
 
Policy Ninja
Policy NinjaPolicy Ninja
Policy Ninja
 
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
 
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
 
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
 
(SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less
(SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less(SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less
(SEC305) How to Become an IAM Policy Ninja in 60 Minutes or Less
 
How to Become an IAM Policy Ninja
How to Become an IAM Policy NinjaHow to Become an IAM Policy Ninja
How to Become an 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
 
SID314_IAM Policy Ninja
SID314_IAM Policy NinjaSID314_IAM Policy Ninja
SID314_IAM Policy Ninja
 
Controlling Access to your Resources
Controlling Access to your ResourcesControlling Access to your Resources
Controlling Access to your Resources
 
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
 
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
 
Become an IAM Policy Ninja
Become an IAM Policy NinjaBecome an IAM Policy Ninja
Become an IAM Policy Ninja
 
Deep Dive on Amazon S3 Security and Management (E2471STG303-R1) - AWS re:Inve...
Deep Dive on Amazon S3 Security and Management (E2471STG303-R1) - AWS re:Inve...Deep Dive on Amazon S3 Security and Management (E2471STG303-R1) - AWS re:Inve...
Deep Dive on Amazon S3 Security and Management (E2471STG303-R1) - AWS re:Inve...
 
Security Day IAM Recommended Practices
Security Day IAM Recommended PracticesSecurity Day IAM Recommended Practices
Security Day IAM Recommended Practices
 
Masting Access Control Policies
Masting Access Control PoliciesMasting Access Control Policies
Masting Access Control Policies
 
IAM Best Practices to Live By - Pop-up Loft Tel Aviv
IAM Best Practices to Live By - Pop-up Loft Tel AvivIAM Best Practices to Live By - Pop-up Loft Tel Aviv
IAM Best Practices to Live By - Pop-up Loft Tel Aviv
 
AWS IAM Introduction
AWS IAM IntroductionAWS IAM Introduction
AWS IAM Introduction
 

Plus de 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
 

Plus de 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
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Dernier (20)

Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 

AWS re:Invent 2016: Become an AWS IAM Policy Ninja in 60 Minutes or Less (SAC303)

  • 1. © 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Jeff Wierer, Senior Manager – AWS IAM November 30, 2016 How to Become an IAM Policy Ninja in 60 Minutes or Less SAC303
  • 2. What to Expect from the Session • Know more about securing your AWS resources • Deeper understanding of AWS IAM permissions • Tips and tricks • Debugging, testing, and other policy foo • A lively session via demos Amazon S3 AWS IAM Amazon EC2
  • 3. Limit Amazon EC2 instance types Demo • Goal: Limit a user from starting an instance unless the instance is t1.*, t2.*, m3.* • Let’s try to: – Create a managed policy that attempts to limit starting an EC2 instance except for these instance types. – Attach that policy to an IAM user.
  • 4. The policy language • Provides authorization • Two facets: – Specification: Defining access policies – Enforcement: Evaluating policies
  • 5. 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
  • 6. 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" <!– Amazon S3 action --> "Action":"s3:GetObject" <!-- Specify multiple values for the Action element--> "Action":["sqs:SendMessage","sqs:ReceiveMessage"] <-- Wildcards (* or ?) in the action name. Below covers create/delete/list/update--> "Action":"iam:*AccessKey*"
  • 7. 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. Is there a difference?
  • 8. 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/*" <-- Amazon SQS queue--> "Resource":"arn:aws:sqs:us-west-2:123456789012:queue1" <-- Multiple Amazon 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/*"
  • 9. 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
  • 10. Condition example "Condition" : { "DateGreaterThan" : {"aws:CurrentTime" : "2016-11-30T11:00:00Z"}, "DateLessThan": {"aws:CurrentTime" : "2016-11-30T15: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 11:00 A.M. on 11/30/2016 AND • The time is before 3:00 P.M. on 11/30/2016 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?
  • 11. Policy variables • Predefined variables based on service request context – Existing keys (aws:SourceIP, aws:CurrentTime, etc.) – Principal-specific keys (aws:username, aws:userid, aws:principaltype) – Provider-specific keys (graph.facebook.com:id, www.amazon.com:user_id) – SAML keys (saml:aud, saml:iss) – See documentation for service-specific variables • Benefits – Simplifies policy management – Reduces the need for hard-coded, user-specific policies • Use cases we’ll look at – Set up user access to “home folder” in S3 – Limit access to specific EC2 resources
  • 12. { "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
  • 13. Managing your policies • IAM policies – Managed policies – Inline polices • Resource-based policies
  • 14. 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)
  • 15. 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
  • 16. 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.
  • 17. Enough already… Let’s look at some examples S3 IAM EC2
  • 18. Creating a home directory using S3 Demo • Goal: Create a managed policy that: – Limits access to a prefix in an S3 bucket – For example, arn:aws:s3:::my_bucket/home/Bob/* • We’ll examine how to: – Create a managed policy that uses variables. – Enable users to list buckets in the S3 console. – Limit users’ access to specific folders in a bucket.
  • 19. 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}/*"]} ] } • Necessary to access the S3 console. • Allows listing all objects in a folder and its subfolders. • Allows modifying objects in the folder and subfolders.
  • 20. Creating a “limited” IAM administrator Demo • Goal: – Create a limited administrator who can use the IAM console to manage users, but only using certain policies • We’ll examine group policies that use variables to: – Grant admin full access to Amazon DynamoDB and read/write access to an S3 bucket. – Grant admin access to the IAM console to be able to create users and generate access keys. – Limit admin to a well-defined set of managed policies.
  • 21. 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/reInvent_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. • Limits attaching only these two policies.
  • 22. 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.
  • 23. Production Account Acct ID: 222222222222 my-role { "Statement": [ { "Effect": "Allow", "Action": "ACTIONS", "Resource": "*" } ] } My DEV Account Acct ID: 111111111111 Authenticate as Bob Assumes my-role Switches to production Account in the console { "Statement": [ { "Effect": "Allow", "Action": “sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/my-role" } ] } { "Statement": [ { "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::111111111111:root"}, "Action":"sts:AssumeRole" } ] } Cross-Account Console Access Policy assigned to my-role defining who (trusted entities) can assume the role Policy assigned to Bob granting him permission to assume my-role in the production account Permissions assigned to my-role STS Bob  Switch Console as Bob
  • 24. • Goal: Create a managed policy that: – Limits cross-account access to specific users. – E.g., IAM users and federated users. • We’ll examine how to: – Create a managed policy that uses IAM/STS ARNs. – Enable specific users to switch between AWS accounts. – Deny switching between accounts to other users. How to Grant Conditional Cross-Account Access Demo
  • 25. Grant cross-account conditional IAM user access { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": ["arn:aws:iam::790891838339:root"] ] } }] } This is what is put in by default
  • 26. Grant cross-account conditional IAM user access { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": ["arn:aws:iam::111111111111:user/Bob"] ] } }] } Specify the exact IAM user you want to grant access.
  • 27. Grant cross-account conditional federated access { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": ["arn:aws:sts::111111111111:assumed-role/ROLENAME/ROLESESSIONNAME"] ] } }] } This will grant access to the specified federated user
  • 28. Grant cross-account conditional federated access { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": [ "arn:aws:iam::111111111111:user/Bob", "arn:aws:sts::111111111111:assumed-role/ROLENAME/ROLESESSIONNAME" ] } }] } You can even mix and match!
  • 29. • Previously, policies applied to all EC2 resources • Permissions can be set per resource • Ex: assign which users can stop, start, or terminate a particular instance EC2 resource-level permissions
  • 30. { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource":"*" } ] } That’s not very Ninja-like! EC2 policies before resource-level permissions
  • 31. { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-abc12345" } ] } EC2 policies after resource-level permissions
  • 32. EC2 policies after resource-level permissions { "Statement": [{ "Effect": "Allow", "Action": ["ec2:TerminateInstances"], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*" } ] }
  • 33. 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"} } } ] }
  • 34. 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:
  • 35. 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, GetConsoleScreenshot 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 11/16/2016
  • 36. Categorize your EC2 resources Use tags as a resource attribute • Allows user-defined models • “Prod”/”Dev” • “Cost Center X” • “Department Y” • “Project reInvent”
  • 37. EC2 resource-level permissions Demo • Goal: Limit a user from starting, stopping, or terminating an instance unless the instance is owned by the user. • We’ll examine: – Adding an owner tag to an EC2 instance. – A policy that grants a user access to the EC2 console. – A policy that uses variables to limit access based on an owner tag.
  • 38. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": "elasticloadbalancing:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:ListMetrics","cloudwatch:GetMetricStatistics","cloudwatch:Describe*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "autoscaling:Describe*", "Resource": "*" }] } Allows seeing everything from the EC2 console This is the AWS managed policy named AmazonEC2ReadOnlyAccess
  • 39. Locking down access to EC2 instances { "Version": "2012-10-17", "Statement": [{ "Sid": "THISLIMITSACCESSTOOWNINSTANCES", "Effect": "Allow", "Action": ["ec2:RebootInstances", "ec2:StartInstances", "ec2:StopInstances", "ec2:TerminateInstances" ], "Resource": "arn:aws:ec2:*: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
  • 40. Limit EC2 instance types Demo • Goal: Limit a user from starting an instance unless the instance is t1.*, t2.*, m3.* • We’ll do the following: – Create a new IAM group. – Create a managed policy that limits starting EC2 instances to specific instance types. – Attach that managed policy to the IAM group.
  • 41. 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-2:012345678912:instance/*", "arn:aws:ec2:eu-west-1:012345678912:instance/*"]}, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:us-east-2: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
  • 42. 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 (in other words, access denied). • You can add IfExists at the end of any condition operator except the Null condition (for example, StringLikeIfExists). • Allows you to create policies that “don’t care” if the key is not present.
  • 43. 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 Explicitly deny access to RunInstances, for all regions and resources if condition is met Granting access to all EC2 actions on all resources in all regions
  • 44. That sounds great. What if I get stuck? Can I call you?
  • 45. Magic: Testing and debugging • Authoring – Policy editor • Testing – Policy simulator • Debugging – Encoded authorization message (EC2)
  • 46. Policy editor Policy validation checks: • JSON errors • Policy grammar errors Policy formatting: • On-demand • Autoformatting
  • 48. 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. • Requires permissions to call sts:DecodeAuthorizationMessage 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
  • 49. Decoding the EC2 authorization message Demo • Goal: Determine what caused an EC2 authorization failure • We’ll do the following: – Try to call an EC2 action – Capture the EC2 Authorization Failure in JSON format – Remove the DecodeMessage “wrapper” – Format the message to identify the missing permission
  • 50. 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! • Use managed policies: they make life easier. • Keep in mind which EC2 actions or resources are currently supported.
  • 51. AWS IAM Policy Ninja Disclaimer: Not really. This is not a real certification, but thank you for sticking around until the end. 
  • 53. Additional resources • AWS IAM home page: http://aws.amazon.com/iam • Documentation • http://aws.amazon.com/documentation/iam/ • http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api- permissions.html • AWS Security Blog • https://aws.amazon.com/blogs/security/demystifying-ec2-resource-level-permissions/ • https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the- amazon-ec2-console/ • https://aws.amazon.com/blogs/security/how-to-create-a-limited-iam-administrator-by- using-managed-policies/ • IAM forum: https://forums.aws.amazon.com/forum.jspa?forumID=76 • Twitter: @AWSIdentity