Amazon VPC 策略示例 - Amazon Virtual Private Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon VPC 策略示例

默认情况下,IAM 用户和角色没有创建或修改 VPC 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略,为用户和角色授予权限,以便对他们所需的指定资源执行特定的 API 操作。然后,管理员必须将这些策略附加到需要这些权限的 IAM 用户或组。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略,请参阅 IAM 用户指南 中的在 JSON 选项卡上创建策略

策略最佳实践

基于身份的策略非常强大。它们确定某个人是否可以创建、访问或删除您账户中的 Amazon VPC 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下准则和建议:

  • 开始使用 AWS 托管策略 – 要快速开始使用 Amazon VPC,请使用 AWS 托管策略,为您的员工授予他们所需的权限。这些策略已在您的账户中提供,并由 AWS 维护和更新。有关更多信息,请参阅 IAM 用户指南 中的利用 AWS 托管策略开始使用权限

  • 授予最低权限 – 创建自定义策略时,仅授予执行任务所需的许可。最开始只授予最低权限,然后根据需要授予其他权限。这样做比起一开始就授予过于宽松的权限而后再尝试收紧权限来说更为安全。有关更多信息,请参阅 IAM 用户指南 中的授予最小权限

  • 为敏感操作启用 MFA – 为增强安全性,要求 IAM 用户使用多重身份验证 (MFA) 来访问敏感资源或 API 操作。有关更多信息,请参阅 IAM 用户指南 中的在 AWS 中使用多重身份验证 (MFA)

  • 使用策略条件来增强安全性 – 在切实可行的范围内,定义基于身份的策略在哪些情况下允许访问资源。例如,您可编写条件来指定请求必须来自允许的 IP 地址范围。您也可以编写条件,以便仅允许指定日期或时间范围内的请求,或者要求使用 SSL 或 MFA。有关更多信息,请参阅 IAM 用户指南 中的 IAM JSON 策略元素:Condition

查看 Amazon VPC 控制台

要访问 Amazon VPC 控制台,您必须拥有一组最低的权限。这些权限必须允许您列出和查看有关您的 AWS 账户中的 Amazon VPC 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(IAM 用户或角色),控制台将无法按预期正常运行。

以下策略授予用户在 VPC 控制台中列出资源的权限,但不允许用户创建、更新或删除这些资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeClassicLinkInstances", "ec2:DescribeClientVpnEndpoints", "ec2:DescribeCustomerGateways", "ec2:DescribeDhcpOptions", "ec2:DescribeEgressOnlyInternetGateways", "ec2:DescribeFlowLogs", "ec2:DescribeInternetGateways", "ec2:DescribeManagedPrefixLists", "ec2:DescribeMovingAddresses", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaceAttribute", "ec2:DescribeNetworkInterfacePermissions", "ec2:DescribeNetworkInterfaces", "ec2:DescribePrefixLists", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroupReferences", "ec2:DescribeSecurityGroups", "ec2:DescribeStaleSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeTrafficMirrorFilters", "ec2:DescribeTrafficMirrorSessions", "ec2:DescribeTrafficMirrorTargets", "ec2:DescribeTransitGateways", "ec2:DescribeTransitGatewayVpcAttachments", "ec2:DescribeTransitGatewayRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcClassicLinkDnsSupport", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcEndpointConnectionNotifications", "ec2:DescribeVpcEndpointConnections", "ec2:DescribeVpcEndpointServiceConfigurations", "ec2:DescribeVpcEndpointServicePermissions", "ec2:DescribeVpcEndpointServices", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeVpcs", "ec2:DescribeVpnConnections", "ec2:DescribeVpnGateways", "ec2:GetManagedPrefixListAssociations", "ec2:GetManagedPrefixListEntries" ], "Resource": "*" } ] }

对于仅调用 AWS CLI 或 AWS API 的用户,您不需要允许最低控制台权限。相反,对于这些用户,只允许他们访问与所要执行的 API 操作相匹配的操作。

允许用户查看他们自己的权限

此示例显示您可以如何创建策略,以便允许 IAM 用户查看附加到其用户身份的内联和托管策略。此策略包括在控制台上完成此操作或者以编程方式使用 AWS CLI 或 AWS API 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws-cn:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

创建带公有子网的 VPC

以下示例允许用户创建 VPC、子网、路由表和互联网网关。用户还可以将互联网网关连接到 VPC 并在路由表中创建路由。该 ec2:ModifyVpcAttribute 操作允许用户为 VPC 启用 DNS 主机名,使得在 VPC 中启动的每个实例都会收到一个 DNS 主机名。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute" ], "Resource": "*" } ] }

上述策略还允许用户在 Amazon VPC 控制台中,使用第一个 VPC 向导配置选项创建。要查看 VPC 向导,用户还必须具有使用 ec2:DescribeVpcEndpointServices 的权限。这可确保 VPC 向导的 VPC 终端节点部分正确加载。

修改和删除 VPC 资源

您可能需要控制用户可以修改或删除哪些 VPC 资源。例如,以下策略允许用户使用和删除具有标签 Purpose=Test 的路由表。该策略还指定用户只能删除具有标签 Purpose=Test 的互联网网关。用户无法处理没有此标签的路由表或互联网网关。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteInternetGateway", "Resource": "arn:aws:ec2:*:*:internet-gateway/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Test" } } }, { "Effect": "Allow", "Action": [ "ec2:DeleteRouteTable", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DeleteRoute" ], "Resource": "arn:aws:ec2:*:*:route-table/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Test" } } } ] }

管理安全组

以下策略允许用户创建和删除特定 VPC 内任何安全组的入站和出站规则。此策略通过将条件密钥 (ec2:Vpc) 应用于 AuthorizeRevoke 操作的安全组资源,来实现此目的。

第二条语句授予用户描述所有安全组的权限。这使用户能够查看安全组规则以便对其进行修改。

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } }, { "Effect": "Allow", "Action": "ec2:DescribeSecurityGroups", "Resource": "*" } ] }

要在 Amazon VPC 控制台中的 Security Groups (安全组) 页面上查看安全组,用户必须拥有使用 ec2:DescribeSecurityGroups 操作的权限。要使用创建安全组页面,用户必须具有使用 ec2:DescribeVpcsec2:CreateSecurityGroup 操作的权限。

以下策略允许用户查看和创建安全组。它还允许用户对与 vpc-11223344556677889 关联的任何安全组添加和删除入站和出站规则。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs", "ec2:CreateSecurityGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress" ], "Resource": "arn:aws:ec2:*:*:security-group/*", "Condition":{ "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:*:*:vpc/vpc-11223344556677889" } } } ] }

要允许用户更改与实例关联的安全组,请将 ec2:ModifyInstanceAttribute 操作添加到策略中。或者,要使用户能够更改网络接口的安全组,请将 ec2:ModifyNetworkInterfaceAttribute 操作添加到策略中。

在特定子网中启动实例

以下策略允许用户在特定子网中启动实例,以及在请求中使用特定安全组。该策略通过为 subnet-11223344556677889sg-11223344551122334 指定 ARN 实现上述目的。如果用户尝试在其他子网中启动实例或使用其他的安全组,请求将失败 (除非其他策略或声明授予用户相应的权限)。

该策略还授予使用网络接口资源的权限。在子网中启动时,RunInstances 请求会默认创建一个主网络接口,因此,用户在启动实例时需要有创建此资源的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/subnet-11223344556677889", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/sg-11223344551122334" ] } ] }

在特定 VPC 中启动实例

以下策略允许用户在特定 VPC 中的任意子网中启动实例。此策略通过将条件密钥 (ec2:Vpc) 应用于子网资源来实现上述目的。

该策略还授予用户仅使用具有标签“department=dev”的 AMI 启动实例的权限。

{ "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-11223344556677889" } } }, { "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:network-interface/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

其他 Amazon VPC 策略示例

您可以在下列主题中,找到与 Amazon VPC 相关的其他示例 IAM 策略: