带有公有和私有子网的 VPC (NAT) - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

带有公有和私有子网的 VPC (NAT)

这个场景的配置包括一个有公有子网和私有子网的 Virtual Private Cloud (VPC)。如果您希望运行面向公众的 Web 应用程序,并同时保留不可公开访问的后端服务器,我们建议您使用此场景。常用例子是一个多层网站,其 Web 服务器位于公有子网之内,数据库服务器则位于私有子网之内。您可以设置安全性和路由,以使 Web 服务器能够与数据库服务器建立通信。

公有子网中的实例可以通过互联网网关直接连接到互联网。私有子网中的实例可以使用网络地址转换(NATI)网关连接到互联网,但不能接收来自互联网的未经请求的入站连接。

还可以选择为 IPv6 配置此场景。启动到子网中的实例可以接收 IPv6 地址并使用 IPv6 进行通信。私有子网中的实例可以使用仅出口 Internet 网关通过 IPv6 连接到 Internet,但 Internet 不能通过 IPv6 与私有实例建立连接。有关 IPv4 和 IPv6 寻址的更多信息,请参阅为 VPC 和子网分配 IP 地址

有关管理 EC2 实例软件的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的管理 Linux 实例上的软件

概览

下表展示了此场景配置的主要组成部分。


				场景示意图:具有公有子网和私有子网的 VPC

此情景的配置包括:

  • 具有 /16 IPv4 CIDR 块的 VPC (示例:10.0.0.0/16)。提供 65536 个私有 IPv4 地址。

  • 具有 /24 IPv4 CIDR 块的公有子网 (示例:10.0.0.0/24)。提供 256 个私有 IPv4 地址。公有子网是指与包含指向互联网网关的路由的路由表关联的子网。

  • 具有 /24 IPv4 CIDR 块的私有子网 (示例:10.0.1.0/24)。提供 256 个私有 IPv4 地址。

  • Internet 网关。它将 VPC 连接到互联网和其他 Amazon 服务。

  • 具有子网范围内私有 IPv4 地址 (示例:10.0.0.5、10.0.1.5) 的实例。这样实例之间可相互通信,也可与 VPC 中的其他实例通信。

  • 公有子网内具有弹性 IPv4 地址(示例:198.51.100.1)的实例,这些弹性 IP 地址是使其能够从 Internet 访问的公有 IPv4 地址。可在启动时为实例分配公有 IP 地址而不是弹性 IP 地址。私有子网中的实例是后端服务器,它们不需要接受来自 Internet 的传入流量,因此,没有公有 IP 地址;但是,它们可以使用 NAT 网关向 Internet 发送请求(请参阅下一要点)。

  • 具有自己的弹性 IPv4 地址的 NAT 网关。私有子网中的实例可使用 IPv4 通过 NAT 网关向 Internet 发送请求(例如,软件更新请求)。

  • 与公有子网关联的自定义路由表。此路由表中包含的一个条目允许子网中的实例通过 IPv4 与 VPC 中的其他实例通信,另一个条目则允许子网中的实例通过 IPv4 直接与 Internet 通信。

  • 与私有子网关联的主路由表。路由表中包含的一个条目使子网中的实例可通过 IPv4 与 VPC 中的其他实例通信,另一条目使子网中的实例可通过 NAT 网关和 IPv4 与 Internet 通信。

有关更多信息,请参阅子网。有关互联网网关的更多信息,请参阅 使用互联网网关连接到互联网。有关 NAT 网关的更多信息,请参阅 NAT 网关

IPv6 配置

您可以选择为此场景启用 IPv6。除了上面列出的组件外,还包括以下配置:

  • 与 VPC 关联的 /56 IPv6 CIDR 块 (示例:2001:db8:1234:1a00::/56)。Amazon 会自动分配 CIDR;您不能自选范围。

  • 与公有子网关联的 /64 IPv6 CIDR 块 (示例:2001:db8:1234:1a00::/64)。您可以从分配给 VPC 的范围内选择您的子网范围。您不能选择子网 IPv6 CIDR 块的大小。

  • 与私有子网关联的 /64 IPv6 CIDR 块 (示例:2001:db8:1234:1a01::/64)。您可以从分配给 VPC 的范围内选择您的子网范围。您不能选择子网 IPv6 CIDR 块的大小。

  • 子网范围内分配给实例的 IPv6 地址 (示例:2001:db8:1234:1a00::1a)。

  • 仅出口 Internet 网关。您可以使用网关通过 IPv6 处理私有子网中的实例发出的 Internet 请求(例如,软件更新请求)。如果您希望私有子网中的实例能够通过 IPv6 与 Internet 发起通信,则需要仅出口 Internet 网关。有关更多信息,请参阅 使用仅出口互联网网关允许出站 IPv6 流量

  • 自定义路由表中的路由表条目,允许公有子网中的实例使用 IPv6 相互通信和直接通过 Internet 通信。

  • 主路由表中的路由表条目,允许私有子网中的实例使用 IPv6 相互通信和通过仅出口 Internet 网关与 Internet 通信。

公有子网中的 Web 服务器具有以下地址。

服务器 IPv4 地址 弹性 IP 地址 IPv6 地址

1

10.0.0.5

198.51.100.1 2001:db8:1234:1a00::1a

2

10.0.0.6

198.51.100.2 2001:db8:1234:1a00::2b
3 10.0.0.7 198.51.100.3 2001:db8:1234:1a00::3c

私有子网中的数据库服务器具有以下地址。

服务器 IPv4 地址 IPv6 地址

1

10.0.1.5

2001:db8:1234:1a01::1a

2

10.0.1.6

2001:db8:1234:1a01::2b
3 10.0.1.7 2001:db8:1234:1a01::3c

路由

在这个情景中,Amazon VPC 更新了使用私有子网的主路由表,并创建了一个自定义路由表并将其与公有子网关联。

在这个情景中,从每个子网前往 Amazon(例如,到 Amazon EC2 或 Amazon S3 终端节点)的所有流量都会经过互联网网关。私有子网中的数据库服务器无法直接接收来自 Internet 的数据流,因为它们没有弹性 IP 地址。但是,数据库服务器可以通过公有子网中的 NAT 设备发送和接收 Internet 数据流。

任何您使用默认主路由表创建的额外子网,也就是默认的私有子网。如果您希望将子网设置为公有子网,您可以随时更改与其相关的路由表。

下表描述了此场景的路由表。

主路由表

主路由表与私有子网关联。第一个条目是 VPC 中本地路由的默认条目;这项条目允许 VPC 中的实例在彼此之间进行通信。第二个条目将所有其他子网流量发送到 NAT 网关 (例如 nat-12345678901234567)。

目的地 目标
10.0.0.0/16 本地
0.0.0.0/0 nat-gateway-id

自定义路由表

自定义路由表与公有子网关联。第一个条目是 VPC 中本地路由的默认条目;这项条目允许该 VPC 中的实例在彼此之间进行通信。第二个条目将所有其他子网流量通过互联网网关(例如 igw-1a2b3d4d)路由到 Internet。

目的地 目标
10.0.0.0/16 本地
0.0.0.0/0 igw-id

IPv6 路由

如果您将 IPv6 CIDR 块与您的 VPC 和子网关联,则您的路由表必须包含适用于 IPv6 流量的单独路由。下面的表显示了当您选择在 VPC 中启用 IPv6 通信时此场景的自定义路由表。

主路由表

第二个条目是自动为 VPC 中通过 IPv6 的本地路由添加的默认路由。第四个条目将所有其他 IPv6 子网流量路由到仅出口互联网网关。

目的地 目标
10.0.0.0/16 本地
2001:db8:1234:1a00::/56 本地
0.0.0.0/0 nat-gateway-id
::/0 egress-only-igw-id

自定义路由表

第二个条目是自动为 VPC 中通过 IPv6 的本地路由添加的默认路由。第四个条目将所有其他 IPv6 子网流量路由到互联网网关。

目的地 目标
10.0.0.0/16 本地
2001:db8:1234:1a00::/56 本地
0.0.0.0/0 igw-id
::/0 igw-id

安全性

Amazon 提供了多种可以用于提高 VPC 中资源安全性的功能。安全组用于允许关联资源(例如 EC2 实例)的入站和出站流量。网络 ACL 用于允许或拒绝子网级别的入站和出站流量。在大多数情况下,使用安全组即可满足您的需求。不过,如需为 VPC 增加额外的安全保护,您可以使用网络 ACL。有关更多信息,请参阅比较安全组和网络 ACL

在此场景中,您将使用安全组,而不使用网络 ACL。如果希望使用网络 ACL,请参阅 推荐网络 ACL 规则

您的 VPC 带有默认的安全组。如果您在启动期间没有指定其他安全组,在该 VPC 中启动的实例会与默认安全组自动关联。在这个情景中,我们建议您创建以下安全组,而不是使用默认安全组:

  • WebServerSG:在公有子网中启动 Web 服务器时指定该安全组。

  • DBServerSG:在私有子网中启动数据库服务器时指定该安全组。

分配到同一个安全组的实例可以位于不同的子网之中。但是,在这个场景中,每个安全组都对应一项实例承担的角色类型,每个角色则要求实例处于特定的子网内。因此,在这个场景中,所有分配到一个安全组的实例都位于相同的子网之中。

下表描述了 WebServerSG 安全组的推荐规则,这些规则允许 Web 服务器接收 Internet 流量,以及来自您的网络的 SSH 和 RDP 流量。Web 服务器也可发起对私有子网中的数据库服务器的读取和写入请求,并向 Internet 发送数据流;例如获取软件更新。由于 Web 服务器不发起任何其他出站通信,因此将删除默认出站规则。

注意

这些建议包括 SSH 和 RDP 访问,以及 Microsoft SQL Server 和 MySQL 访问。根据您的情况,您可能仅需要 Linux (SSH 和 MySQL) 或 Windows (RDP 和 Microsoft SQL Server) 规则。

入站
协议 端口范围 注释

0.0.0.0/0

TCP

80

允许从任意 IPv4 地址对 Web 服务器进行入站 HTTP 访问。

0.0.0.0/0

TCP

443

允许从任意 IPv4 地址对 Web 服务器进行入站 HTTPS 访问。

您的家庭网络的公有 IPv4 地址范围

TCP

22

允许从您的家庭网络对 Linux 实例进行入站 SSH 访问(通过互联网网关)。您可以使用 http://checkip.amazonaws.comhttps://checkip.amazonaws.com 等服务获取本地计算机的公有 IPv4 地址。如果您正通过 ISP 或从防火墙后面连接,没有静态 IP 地址,您需要找出客户端计算机使用的 IP 地址范围。

您的家庭网络的公有 IPv4 地址范围

TCP

3389

允许从您的家庭网络对 Windows 实例进行入站 RDP 访问(通过互联网网关)。

出站

目的地 协议 端口范围 注释

您的 DBServerSG 安全组 ID

TCP

1433

允许对归属于 DBServerSG 安全组的数据库服务器进行出站 Microsoft SQL Server 访问。

您的 DBServerSG 安全组 ID

TCP

3306

允许对归属于 DBServerSG 安全组的数据库服务器进行出站 MySQL 访问。

0.0.0.0/0

TCP

80

允许对任意 IPv4 地址进行出站 HTTP 访问。

0.0.0.0/0

TCP

443

允许对任意 IPv4 地址进行出站 HTTPS 访问。

下表描述了 DBServerSG 安全组的推荐规则,即允许从 Web 服务器读取或写入数据库请求。数据库服务器还可以启动到 Internet 的流量(路由表将流量发送到 NAT 网关,NAT 网关随后通过互联网网关将流量转发至 Internet)。

入站
协议 端口范围 注释

您的 WebServerSG 安全组 ID

TCP

1433

允许与 WebServerSG 安全组关联的 Web 服务器进行入站 Microsoft SQL Server 访问。

您的 WebServerSG 安全组 ID

TCP

3306

允许与 WebServerSG 安全组关联的 Web 服务器进行入站 MySQL Server 访问。

出站

目的地 协议 端口范围 注释

0.0.0.0/0

TCP

80

允许通过 IPv4 对 Internet 进行出站 HTTP 访问(例如,进行软件更新)。

0.0.0.0/0

TCP

443

允许通过 IPv4 对 Internet 进行出站 HTTPS 访问(例如,进行软件更新)。

(可选) VPC 的安全组带有默认规则,可自动允许指定实例在彼此之间建立通信。要允许自定义安全组进行此类通信,您必须添加下列规则:

入站
协议 端口范围 注释

安全组 ID

All

All

允许来自分配到此安全组的其他实例的入站数据流.

出站
目的地 协议 端口范围 注释
The ID of the security group All All Allow outbound traffic to other instances assigned to this security group.

(可选) 如果您启动公有子网中的堡垒主机来用作从家庭网络到私有子网的 SSH 或 RDP 流量的代理,请向 DBServerSG 安全组添加一个规则,以允许来自堡垒实例或其关联安全组的入站 SSH 或 RDP 流量。

IPv6 的安全组规则

如果您将 IPv6 CIDR 块与您的 VPC 和子网关联,则必须向 WebServerSG 和 DBServerSG 安全组添加单独的规则来控制您的实例的入站和出站 IPv6 流量。在此场景中,Web 服务器能够接收通过 IPv6 的所有 Internet 流量以及来自您的本地网络的通过 IPv6 的 SSH 或 RDP 流量。它们也可以发起到 Internet 的出站 IPv6 流量。数据库服务器可以发起到 Internet 的出站 IPv6 流量。

以下是针对 WebServerSG 安全组的特定于 IPv6 的规则 (是上面所列规则的补充)。

入站
协议 端口范围 注释

::/0

TCP

80

允许从任意 IPv6 地址对 Web 服务器进行入站 HTTP 访问。

::/0

TCP

443

允许从任意 IPv6 地址对 Web 服务器进行入站 HTTPS 访问。

您的网络的 IPv6 地址范围

TCP

22

(Linux 实例) 允许您的网络通过 IPv6 进行入站 SSH 访问。

您的网络的 IPv6 地址范围

TCP

3389

(Windows 实例) 允许您的网络通过 IPv6 进行入站 RDP 访问。

出站
目的地 协议 端口范围 注释
::/0 TCP HTTP Allow outbound HTTP access to any IPv6 address.
::/0 TCP HTTPS Allow outbound HTTPS access to any IPv6 address.

以下是针对 DBServerSG 安全组的特定于 IPv6 的规则 (是上面所列规则的补充)。

出站

目的地 协议 端口范围 注释

::/0

TCP

80

允许对任意 IPv6 地址进行出站 HTTP 访问。

::/0

TCP

443

允许对任意 IPv6 地址进行出站 HTTPS 访问。

实现此场景

您可以使用 Amazon VPC 创建 VPC、子网、NAT 网关和仅出口互联网网关(可选)。必须为 NAT 网关指定一个弹性 IP 地址;如果没有弹性 IP 地址,则您必须先为自己的账户分配一个。如果需要使用现有的弹性 IP 地址,请确保它当前不与其他实例或网络接口关联。NAT 网关是在您的 VPC 的公有子网中自动创建的。

推荐网络 ACL 规则

在此场景中,您可以为公有子网创建网络 ACL,并为私有子网创建一个单独的网络 ACL。下表显示了我们为每个网络 ACL 推荐的规则。除非明确要求,否则它们会阻止所有流量。它们大多会在场景中模拟安全组规则。

Inbound
规则 # 源 IP 协议 端口 允许/拒绝 注释

100

0.0.0.0/0

TCP

80

允许

允许来自任意 IPv4 地址的入站 HTTP 流量。

110

0.0.0.0/0

TCP

443

允许

允许来自任意 IPv4 地址的入站 HTTPS 流量。

120

您家庭网络的公共 IP 地址范围

TCP

22

允许

允许来自您的家庭网络的入站 SSH 流量(通过互联网网关)。

130

您家庭网络的公共 IP 地址范围

TCP

3389

允许

允许来自您的家庭网络的入站 RDP 流量(通过互联网网关)。

140

0.0.0.0/0

TCP

1024-65535

允许

允许来自 Internet 上的主机的入站返回流量,这些流量对应于源自子网的请求。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

*

0.0.0.0/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv4 流量。

Outbound
规则 # 目的 IP 协议 端口 允许/拒绝 注释

100

0.0.0.0/0

TCP

80

允许

允许出站 HTTP 流量从子网流向 Internet。

110

0.0.0.0/0

TCP

443

允许

允许出站 HTTPS 流量从子网流向 Internet。

120

10.0.1.0/24

TCP

1433

允许

允许对私有子网中的数据库服务器进行出站 MS SQL 访问.

此端口号仅为示例。其他示例包括用于访问 MySQL/Aurora 的 3306、用于访问 PostgreSQL 的 5432、用于访问 Amazon Redshift 的 5439 和用于访问 Oracle 的 1521。

140

0.0.0.0/0

TCP

32768-65535

允许

允许对 Internet 客户端进行出站响应(例如,向访问子网中的 Web 服务器的人员提供网页)。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

150

10.0.1.0/24

TCP

22

允许

允许对您的私有子网中的实例 (从 SSH 堡垒实例,如果有) 进行出站 SSH 访问。

*

0.0.0.0/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv4 流量。

Inbound
规则 # 源 IP 协议 端口 允许/拒绝 注释

100

10.0.0.0/24

TCP

1433

允许

允许公有子网中的 Web 服务器读写私有子网中的 MySQL 服务器.

此端口号仅为示例。其他示例包括用于访问 MySQL/Aurora 的 3306、用于访问 PostgreSQL 的 5432、用于访问 Amazon Redshift 的 5439 和用于访问 Oracle 的 1521。

120

10.0.0.0/24

TCP

22

允许

允许来自公有子网的 SSH 堡垒实例的入站 SSH 流量 (如果有)。

130

10.0.0.0/24

TCP

3389

允许

允许公有子网的 Microsoft Terminal Services 网关的入站 RDP 数据流 (通过虚拟私有网关)。

140

0.0.0.0/0

TCP

1024-65535

允许

允许从公有子网中的 NAT 设备返回的入站流量,以处理源于私有子网的请求。

有关如何指定正确的临时端口的信息,请参阅本主题开始部分的重要说明。

*

0.0.0.0/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的 IPv4 入站流量。

Outbound
规则 # 目的 IP 协议 端口 允许/拒绝 注释

100

0.0.0.0/0

TCP

80

允许

允许出站 HTTP 流量从子网流向 Internet。

110

0.0.0.0/0

TCP

443

允许

允许出站 HTTPS 流量从子网流向 Internet。

120

10.0.0.0/24

TCP

32768-65535

允许

允许对公有子网的出站响应 (例如,响应与私有子网中的数据库服务器通信的公有子网中的 Web 服务器)。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

*

0.0.0.0/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv4 流量。

适用于 IPv6 的推荐网络 ACL 规则

如果您实施了支持 IPv6 的场景 3 并创建了具有关联 IPv6 CIDR 块的 VPC 和子网,则必须向网络 ACL 添加单独的规则,以控制入站和出站 IPv6 流量。

以下是您的网络 ACL 的 IPv6 特定规则(对上文列出的规则的补充)。

Inbound
规则 # 源 IP 协议 端口 允许/拒绝 注释

150

::/0

TCP

80

允许

允许来自任意 IPv6 地址的入站 HTTP 流量。

160

::/0

TCP

443

允许

允许来自任意 IPv6 地址的入站 HTTPS 流量。

170

您的家庭网络的 IPv6 地址范围

TCP

22

允许

允许来自您的家庭网络的通过 IPv6 的入站 SSH 流量(通过互联网网关)。

180

您的家庭网络的 IPv6 地址范围

TCP

3389

允许

允许来自您的家庭网络的通过 IPv6 的入站 RDP 流量(通过互联网网关)。

190

::/0

TCP

1024-65535

允许

允许来自 Internet 上的主机的入站返回流量,这些流量对应于源自子网的请求。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

*

::/0

all

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv6 流量。

Outbound
规则 # 目的 IP 协议 端口 允许/拒绝 注释

160

::/0

TCP

80

允许

允许出站 HTTP 流量从子网流向 Internet。

170

::/0

TCP

443

允许

允许出站 HTTPS 流量从子网流向 Internet。

180

2001:db8:1234:1a01::/64

TCP

1433

允许

允许对私有子网中的数据库服务器进行出站 MS SQL 访问.

此端口号仅为示例。其他示例包括用于访问 MySQL/Aurora 的 3306、用于访问 PostgreSQL 的 5432、用于访问 Amazon Redshift 的 5439 和用于访问 Oracle 的 1521。

200

::/0

TCP

32768-65535

允许

允许对 Internet 客户端进行出站响应(例如,向访问子网中的 Web 服务器的人员提供网页)。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

210

2001:db8:1234:1a01::/64

TCP

22

允许

允许对您的私有子网中的实例 (从 SSH 堡垒实例,如果有) 进行出站 SSH 访问。

*

::/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv6 流量。

Inbound
规则 # 源 IP 协议 端口 允许/拒绝 注释

150

2001:db8:1234:1a00::/64

TCP

1433

允许

允许公有子网中的 Web 服务器读写私有子网中的 MySQL 服务器.

此端口号仅为示例。其他示例包括用于访问 MySQL/Aurora 的 3306、用于访问 PostgreSQL 的 5432、用于访问 Amazon Redshift 的 5439 和用于访问 Oracle 的 1521。

170

2001:db8:1234:1a00::/64

TCP

22

允许

允许来自公有子网的 SSH 堡垒实例的入站 SSH 流量 (如果适用)。

180

2001:db8:1234:1a00::/64

TCP

3389

允许

允许公有子网的 Microsoft Terminal Services 网关的入站 RDP 流量 (如果适用)。

190

::/0

TCP

1024-65535

允许

允许从仅出口互联网网关返回的入站流量,以处理源于私有子网的请求。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

*

::/0

全部

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv6 流量。

Outbound
规则 # 目的 IP 协议 端口 允许/拒绝 注释

130

::/0

TCP

80

允许

允许出站 HTTP 流量从子网流向 Internet。

140

::/0

TCP

443

允许

允许出站 HTTPS 流量从子网流向 Internet。

150

2001:db8:1234:1a00::/64

TCP

32768-65535

允许

允许对公有子网的出站响应 (例如,响应与私有子网中的数据库服务器通信的公有子网中的 Web 服务器)。

此范围仅为示例。有关为您的配置选择正确的临时端口的信息,请参阅临时端口

*

::/0

all

全部

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv6 流量。