我想创build一个具有完全控制台访问权限的用户(API也是),特别是在我们的AWS环境中只有一个VPC。
结果应该是,当点击EC2实例时,用户只能看到指定VPC中的机器。
我尝试了以下,但没有奏效:
{ "Statement": [ { "Sid": "Stmt1393948025170", "Action": "ec2:*", "Effect": "Allow", "Resource": "arn:aws:ec2:*:*:vpc/<vpc-id>" } ] }
从亚马逊支持回来:
不幸的是,目前还没有办法做到这一点。 虽然我们现在提供EC2资源的资源级权限,(更多信息在这里… http://aws.typepad.com/aws/2013/07/resource-permissions-for-ec2-and-rds-resources.html )不支持基于指定的VPC有条件地控制访问。
他们提到这是因为这个链接: http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html#ec2-supported-iam-actions-resources显示那里是支持的有限数量的EC2 API操作,它们都不支持VPC作为ARN。
“ec2:Describe *”也有一个限制,完全不能由资源ARN指定,并且不能被有条件地控制。
有一个解决方法是使用条件语句“ResourceTag / tag-key”,它可以被大多数API调用使用。 因此,您可以使用“Control”标记您的实例:“允许”,并且不要在要附加到相关用户的策略中包含创build或删除标记权限。 你的政策看起来像这样:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances", "ec2:TerminateInstances" ], "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Control": "Allow" } } } ] }
然后,您可以限制用户使用其subnet-id来在特定的VPC中启动实例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/SUBNET-ID-HERE", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region::image/ami-*" ] } ] }
希望这可以帮助。