我如何使用IAM pollicies来限制用户只启动具有一组特定AMI的实例?

我有AMI我想允许用“types”标签标记。

这是我尝试的政策:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:StartInstances" ], "Condition": { "StringEquals": { "ec2:ResourceTag/type": "permitted_amis" } }, "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:CreateTags" ], "Resource": [ "*" ] } ] } 

当我尝试从其中一个AMI启动实例时,我被拒绝了权限。

问题在于你没有ec2:RunInstances权限,因为你已经将该权限和条件一起添加了,所以它将覆盖 – 它将查找带有该标签的EC2实例; 看到你在Resource上只有“ec2:DescribeInstances”:[“*”];

添加两个单独的语句,并为每个语句指定确切的资源:

  • 一个用于资源AMI:[“arn:aws:ec2:region :: image / ami- *”]
  • 一个用于ec2:带资源的RunInstances:[“arn:aws:ec2:region:account:instance / *”]

示例:(摘自http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#ex5

以下策略允许用户仅使用具有与其关联的指定标签“department = dev”的AMI来启动实例。 用户无法启动使用其他AMI的实例,因为第一个语句的Condition元素要求用户指定具有此标记的AMI。 用户也无法启动到子网中,因为策略不会授予子网和networking接口资源的权限。 然而,他们可以推出EC2-Classic。 第二条语句使用通配符来使用户能够创build实例资源,并要求用户指定密钥对project_keypair和安全组sg-1a2b3c4d。 用户仍然能够在没有密钥对的情况下启动实例。

 { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/project_keypair", "arn:aws:ec2:region:account:security-group/sg-1a2b3c4d" ] } ] }