用于限制对一个 VPC 的访问的 IAM 策略

Sat*_*rma 5 amazon-web-services amazon-vpc amazon-iam

我正在尝试将用户限制为单个 VPC。我经历了控制对 Amazon VPC 资源的访问并提出了以下策略,但它不起作用。有人可以指出其中的错误吗?

我应该提到,在我在模拟设置中的条件键下设置 VPC ARN 后,IAM 策略模拟器似乎认为该策略很好。

(我已在我的策略中用实际值替换了区域、帐户和 vpc-id。)


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:*Vpc*",
                "ec2:*Subnet*",
                "ec2:*Gateway*",
                "ec2:*Vpn*",
                "ec2:*Route*",
                "ec2:*Address*",
                "ec2:*SecurityGroup*",
                "ec2:*NetworkAcl*",
                "ec2:*DhcpOptions*",
                "ec2:RunInstances",
                "ec2:StopInstances",
                "ec2:StartInstances",
                "ec2:TerminateInstances",
                "ec2:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-id"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud) 谢谢。

Ste*_*pel 5

您很可能需要按照示例5.在控制对 Amazon VPC 资源的访问中将实例启动到特定 VPC 中的方式重新编写IAM 策略

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:region:account:subnet/*",
        "Condition": {
         "StringEquals": {
            "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-1a2b3c4d"
            }
      }
   },
   ...
   ]
}
Run Code Online (Sandbox Code Playgroud)

也就是说,可用资源(及其粒度)特定于每个 API 操作,因此对于当前示例,RunInstances适用于特定子网中的 EC2 资源,而这又是 VPC 的一部分;因此,您需要定位子网,但可以通过如上所述的IAM 策略条件ec2:Vpc通过其属性进一步限制可能的子网集。