是否可以通过 IAM 限制 EC2 控制台对特定 VPC 内的机器的访问?

是否可以通过 IAM 限制 EC2 控制台对特定 VPC 内的机器的访问?

我想创建一个具有完全控制台访问权限(也是 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-*"
            ]
        }
    ]
}

希望这可以帮助。

相关内容