我想创建一个具有完全控制台访问权限(也是 API)的用户,特别是对我们的 AWS 环境中的一个 VPC 具有访问权限。
结果应该是这样的,当点击 EC2 实例时,用户只会看到指定 VPC 中的机器。
我尝试了以下操作,但没有效果:
{
"Statement": [
{
"Sid": "Stmt1393948025170",
"Action": "ec2:*",
"Effect": "Allow",
"Resource": "arn:aws:ec2:*:*:vpc/<vpc-id>"
}
]
}
答案1
从亚马逊支持部门收到回复:
不幸的是,目前还没有办法做到这一点。虽然我们现在确实为 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”:“Allow”标记您的实例,并且不要在要附加到相关用户的策略中包含创建或删除标签权限。您的策略将如下所示:
{
"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"
}
}
}
]
}
然后,您可以使用以下方式限制用户仅在特定 VPC 中启动实例subnet-id
:
{
"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-*"
]
}
]
}
希望这可以帮助。