AWS VPC 识别私有和公有子网

use*_*749 30 subnet amazon-web-services amazon-emr amazon-vpc

我在 AWS 账户中有一个 VPC,并且有 5 个与该 VPC 关联的子网。子网有 2 种类型 - 公共和私有。如何识别哪个子网是公共的,哪个是私有的?每个子网都有 CIDR 10.249.?.? 范围。

基本上,当我在该子网中使用 ec2SubnetIds 列表启动 EMR 时,它说 *** 子网配置无效:提供的子网列表包含公共和私有子网。只允许使用一种类型的子网。


如何纠正这个错误。

jar*_*mod 50

问题是如何识别公共子网与私有子网,答案在于 AWS 中 VPC 的子网是“公共”还是“私有”的含义。

公共子网具有到Internet 网关的默认路由;私有子网没有。

因此,要确定给定子网是公共子网还是私有子网,您需要描述与该子网关联的路由表。这将告诉您路由,您可以测试0.0.0.0/0网关 ID 为igw-xxxxxxxxxxxxxxxxx(而不是local)的路由。

您可以在 AWS VPC 控制台中通过查看子网的路由表来判断子网是否为公共子网,例如:

在此处输入图片说明

您还可以使用 awscli 对给定的子网 ID 执行以下操作:

aws ec2 describe-route-tables \
    --filter Name=association.subnet-id,Values=subnet-0a123fc414ad5b999 \
    --query "RouteTables[].Routes[]"
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

[
    {
        "DestinationCidrBlock": "10.0.0.0/16",
        "GatewayId": "local",
        "Origin": "CreateRouteTable",
        "State": "active"
    },
    {
        "DestinationCidrBlock": "0.0.0.0/0",
        "GatewayId": "igw-0fca21fadaa22a1b2",
        "Origin": "CreateRoute",
        "State": "active"
    }
]
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到目标路由 的0.0.0.0/0目标是 Internet 网关(其 GatewayId 是igw-xxxxxxxxxxxxxxxxx)。这确认您正在查看公共子网。

  • @themiDdlest 添加了一个使用 awscli 的示例。 (2认同)