使用网络 ACL 控制指向子网的流量 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用网络 ACL 控制指向子网的流量

网络访问控制列表 (ACL) 在子网级别允许或拒绝特定的入站或出站流量。您可以使用 VPC 的默认网络 ACL,也可以为 VPC 创建自定义网络 ACL,使其规则与您安全组的规则相似,以便为您的 VPC 添加额外安全层。

使用网络 ACL 不会产生任何额外的费用。

以下示意图显示了具有两个子网的 VPC。每个子网都有网络 ACL。当流量(例如,来自对等 VPC、VPN 连接或互联网)进入 VPC 时,路由器会将流量发送到其目的地。网络 ACL A 确定哪些发往子网 1 的流量可以进入子网 1,哪些发往子网 1 位置以外的流量可以离开子网 1。同样,网络 ACL B 确定哪些流量可以进入和离开子网 2。


      具有两个子网的 VPC 和每个子网的网络 ACL。

有关安全组和网络 ACL 之间区别的更多信息,请参阅 比较安全组和网络 ACL

网络 ACL 基础知识

以下是您需要了解的有关网络 ACL 的基本信息:

  • 您的 VPC 自动带有可修改的默认网络 ACL。默认情况下,它允许所有入站和出站 IPv4 流量以及 IPv6 流量(如果适用)。

  • 您可以创建自定义网络 ACL 并将其与子网相关联,以允许或拒绝子网级别的特定入站或出站流量。

  • 您的 VPC 中的每个子网都必须与一个网络 ACL 相关联。如果您没有明确地将子网与网络 ACL 相关联,则子网将自动与默认网络 ACL 关联。

  • 您可以将网络 ACL 与多个子网关联。但是,一个子网一次只能与一个网络 ACL 关联。当您将一个网络 ACL 与一个子网关联时,将删除之前的关联。

  • 网络 ACL 具有入站规则和出站规则。每条规则都可以接受或拒绝流量。每条规则都有介于 1 到 32766 之间的数字。在决定是否接受或拒绝流量时,我们按顺序评估规则,从编号最低的规则开始。如果流量与规则匹配,则应用该规则,并且我们不会评估其他任何规则。我们建议您首先以增量方式创建规则(例如,以 10 或 100 的增量增加),以便日后需要时插入新的规则。

  • 在流量进入和离开子网时,我们会评估网络 ACL 规则,而不是在子网内路由流量时进行评估。

  • NACL 无状态,这意味着不会保存有关先前发送或接收的流量的信息。例如,如果您创建了 NACL 规则,允许流向子网的特定入站流量,则不会自动允许对该流量做出响应。这与安全组的工作原理截然不同。安全组有状态,这意味着会保存有关先前发送或接收的流量的信息。例如,如果安全组允许流向 EC2 实例的入站流量,则将自动允许响应,不受任何出站安全组规则的影响。

  • 网络 ACL 无法阻止发往或发出 Route 53 解析器(也称为 VPC+2 IP 地址或 DNS)的 DNS 请求。 AmazonProvided要筛选通过 Route 53 Resolver 的 DNS 请求,请根据《Amazon Route 53 开发人员指南》中的说明,启用 Route 53 Resolver DNS Firewall

  • 网络 ACL 无法阻止访问实例元数据服务(IMDS)的流量。要管理对 IMDS 的访问权限,请参阅《Amazon EC2 用户指南》中的 配置实例元数据选项

  • 网络 ACL 不会筛选发往和来自以下位置的流量:

    • Amazon 域名服务 (DNS)

    • Amazon 动态主机配置协议 (DHCP)

    • Amazon EC2 实例元数据

    • Amazon ECS 任务元数据端点

    • Windows 实例的许可证激活

    • Amazon Time Sync Service

    • 默认 VPC 路由器使用的预留 IP 地址

  • 对每个 VPC 的网络 ACL 数和每个网络 ACL 的规则数设定了限额(也称作限制)。有关更多信息,请参阅 Amazon VPC 配额

网络 ACL 规则

您可以在默认网络 ACL 中添加或删除规则,或为您的 VPC 创建额外网络 ACL。当您在网络 ACL 中添加或删除规则时,更改也会自动应用到与其相关联的子网。

以下为部分网络 ACL 规则:

  • 规则编号。规则评估从编号最低的规则起开始进行。只要有一条规则与流量匹配,即应用该规则,并忽略与之冲突的任意更大编号的规则。

  • 类型。流量的类型,例如 SSH。您也可以指定所有流量或自定义范围。

  • 协议。您可以指定任何有标准协议编号的协议。有关更多信息,请参阅 Protocol Numbers。如果您指定 ICMP 作为协议,您可以指定任意或全部 ICMP 类型和代码。

  • 端口范围。流量的侦听端口或端口范围。例如,80 用于 HTTP 流量。

  • 。[仅限入站规则]流量的源(CIDR 范围)。

  • 目的地。[仅限出站规则]流量的目的地(CIDR 范围)。

  • 允许/拒绝允许还是拒绝指定的流量。

如果您使用命令行工具或 Amazon EC2 API 添加规则,则系统会自动将 CIDR 范围修改为其规范形式。例如,如果您为 CIDR 范围指定 100.68.0.18/18,我们将创建一个 CIDR 范围为 100.68.0.0/18 的规则。

默认网络 ACL

默认网络 ACL 配置为让所有流量流进和流出与其关联的子网。每个网络 ACL 还包含一条以星号为规则编号的规则。此规则确保在数据包不匹配任何其他编号规则时拒绝该数据包。您可以修改或删除此规则。

下面是一个仅支持 IPv4 的 VPC 的示例默认网络 ACL。

入站
规则 # 类型 协议 端口范围 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

*

所有 IPv4 流量

全部

全部

0.0.0.0/0

DENY

出站
规则 # 类型 协议 端口范围 目的地 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

*

所有 IPv4 流量

全部

全部

0.0.0.0/0

DENY

如果您创建具有 IPv6 CIDR 块的 VPC 或将 IPv6 CIDR 块与您的现有 VPC 关联,我们会自动添加允许所有 IPv6 流量流入和流出您的子网的规则。我们还会添加规则编号为星号的规则,该规则可确保拒绝与任何其他编号规则不符的数据包。您不能修改或删除这些规则。下面是一个支持 IPv4 和 IPv6 的 VPC 的示例默认网络 ACL。

注意

如果您修改了默认网络 ACL 的入站规则,在将 IPv6 块与您的 VPC 关联时,我们不会为入站 IPv6 流量自动添加 ALLOW 规则。同样,如果您修改了出站规则,我们不会为出站 IPv6 流量自动添加 ALLOW 规则。

入站
规则 # 类型 协议 端口范围 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

101

所有 IPv6 流量

All

All

::/0

允许

*

所有流量

All

全部

0.0.0.0/0

DENY

*

所有 IPv6 流量

All

All

::/0

拒绝

出站
规则 # 类型 协议 端口范围 目的地 允许/拒绝

100

所有流量

All

全部

0.0.0.0/0

允许

101

所有 IPv6 流量

All

All

::/0

允许

*

所有流量

All

全部

0.0.0.0/0

DENY

*

所有 IPv6 流量

All

All

::/0

拒绝

自定义网络 ACL

以下示例显示了一个仅支持 IPv4 的 VPC 的自定义网络 ACL。其中包括允许 HTTP 和 HTTPS 流量的入站规则(100 和 110)。此外还存在一个允许响应该入站流量的对应出站规则(140),该规则适用于临时端口 32768-65535。有关如何选择适当的临时端口的更多信息,请参见 临时端口

网络 ACL 还包括允许 SSH 和 RDP 数据流进入子网的入站规则。出站规则 120 允许响应传出子网。

网络 ACL 出站规则(100 和 110)允许离开子网的 HTTP 和 HTTPS 数据流。此外还存在一个允许响应该出站流量的对应入站规则(140),该规则适用于临时端口 32768-65535。

每个网络 ACL 都包含一个默认规则,其规则编号是星号。此规则会确保在数据包不匹配任何其他规则时拒绝此数据包。您可以修改或删除此规则。

入站
规则 # 类型 协议 端口范围 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

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

110

HTTPS

TCP

443

0.0.0.0/0

允许

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

120

SSH

TCP

22

192.0.2.0/24

允许

允许来自您的家庭网络的公有 IPv4 地址范围的入站 SSH 流量(通过互联网网关)。

130

RDP

TCP

3389

192.0.2.0/24

允许

允许从您的家庭网络的公有 IPv4 地址范围到 Web 服务器的入站 RDP 流量(通过互联网网关)。

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许来自 Internet 的入站返回 IPv4 流量(即源自子网的请求)。

此范围仅为示例。

*

所有流量

All

全部

0.0.0.0/0

拒绝

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

出站
规则 # 类型 协议 端口范围 目的地 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

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

110

HTTPS

TCP

443

0.0.0.0/0

允许

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

120 SSH

TCP

1024-65535

192.0.2.0/24

允许

允许来自您的家庭网络的公有 IPv4 地址范围的出站 SSH 流量(通过互联网网关)。

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

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

此范围仅为示例。

*

所有流量

All

全部

0.0.0.0/0

DENY

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

随着数据包流向子网,我们会根据与子网关联的 ACL 的入站规则评估数据包(从规则列表的顶端开始向下移动)。当数据包目标为 HTTPS 端口 (443) 时,评估过程如下。数据包不匹配第一项评估规则(规则 100)。它匹配第二条规则 (110),即允许数据包进入子网。如果数据包的目的地已经指定为端口 139 (NetBIOS),则它与任何规则均不匹配,而且“*”规则最终会拒绝这个数据包。

在您需要开放一系列端口、同时在此部分端口内您想拒绝部分端口,您可能希望添加一项拒绝规则。您只需确保将拒绝规则放在表的较前端,先于一系列的端口数据流的规则。

您可以根据您的用例添加允许规则。例如,您可以添加一个规则,允许端口 53 上的出站 TCP 和 UDP 访问以进行 DNS 解析。对于您添加的每个规则,请确保存在允许响应流量的相应入站或出站规则。

以下示例显示了一个关联有 IPv6 CIDR 块的 VPC 的自定义网络 ACL。此网络 ACL 包含适用于所有 IPv6 HTTP 和 HTTPS 流量的规则。在这种情况下,在 IPv4 流量的现有规则之间插入新规则。您也可以使用大于 IPv4 规则的编号添加规则。IPv4 和 IPv6 流量是独立的,因此,所有 IPv4 流量规则都不适用于 IPv6 流量。

入站
规则 # 类型 协议 端口范围 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

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

105

HTTP

TCP

80

::/0

允许

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

110

HTTPS

TCP

443

0.0.0.0/0

允许

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

115

HTTPS

TCP

443

::/0

允许

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

120

SSH

TCP

22

192.0.2.0/24

允许

允许来自您的家庭网络的公有 IPv4 地址范围的入站 SSH 流量(通过互联网网关)。

130

RDP

TCP

3389

192.0.2.0/24

允许

允许从您的家庭网络的公有 IPv4 地址范围到 Web 服务器的入站 RDP 流量(通过互联网网关)。

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许来自 Internet 的入站返回 IPv4 流量(即源自子网的请求)。

此范围仅为示例。

145

自定义 TCP TCP 32768-65535 ::/0 允许

允许来自 Internet 的入站返回 IPv6 流量(即源自子网的请求)。

此范围仅为示例。

*

所有流量

All

全部

0.0.0.0/0

拒绝

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

*

所有流量

All

All

::/0

拒绝

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

出站
规则 # 类型 协议 端口范围 目的地 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

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

105

HTTP

TCP

80

::/0

允许

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

110

HTTPS

TCP

443

0.0.0.0/0

允许

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

115

HTTPS

TCP

443

::/0

允许

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

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

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

此范围仅为示例。

145

自定义 TCP

TCP

32768-65535

::/0

允许

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

此范围仅为示例。

*

所有流量

All

全部

0.0.0.0/0

DENY

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

*

所有流量

All

All

::/0

拒绝

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

自定义网络 ACL 和其他服务 Amazon

如果您创建自定义网络 ACL,请注意它会如何影响您使用其他 Amazon 服务创建的资源。

借助 Elastic Load Balancing,如果您的后端实例的子网有一个网络 ACL,并且您在其中针对源为 0.0.0.0/0 或子网的 CIDR 的所有流量添加了拒绝规则,则您的负载均衡器将无法对这些实例执行运行状况检查。有关负载均衡器和后端实例的推荐网络 ACL 规则的更多信息,请参阅《适用于经典负载均衡器的用户指南》中的 VPC 中的负载均衡器的网络 ACL

临时端口

上一个部分中的网络 ACL 实例使用了临时端口范围 32768-65535。但是,您可能需要根据自己使用的或作为通信目标的客户端的类型为网络 ACL 使用不同的范围。

发起请求的客户端会选择临时端口范围。根据客户端的操作系统不同,范围也随之更改。

  • 许多 Linux 内核(包括 Amazon Linux 内核)使用端口 32768-61000。

  • 源自 Elastic Load Balancing 的请求使用端口 1024-65535。

  • Windows 操作系统通过 Windows Server 2003 使用端口 1025-5000。

  • Windows Server 2008 及更高版本使用端口 49152-65535。

  • NAT 网关使用端口 1024 - 65535。

  • Amazon Lambda 函数使用端口 1024-65535。

例如,如果一个来自 Internet 上的 Windows 10 客户端的请求到达您的 VPC 中的 Web 服务器,则您的网络 ACL 必须有相应的出站规则,才能支持目标为端口 49152-65535 的流量。

如果您的 VPC 中的一个实例是客户发起的请求,则您的网络 ACL 必须有入站规则以启动目标为仅适用于此类实例的临时端口的数据流(Amazon Linux、Windows Server 2008 等)。

在实际中,为使不同客户端类型可以启动流量进入您 VPC 中的公有实例,您可以开放临时端口 1024-65535。但是,您也可以在 ACL 中添加规则以拒绝任何在此范围内的来自恶意端口的数据流。请务必将拒绝规则放在表的较前端,先于开放一系列临时端口的允许规则。

路径 MTU 发现

路径 MTU 发现用于确定两台设备之间的路径 MTU。路径 MTU 是原始主机和接收主机之间的路径所支持的最大数据包大小。

对于 IPv4,如果主机发送一个大于接收主机的 MTU 或大于路径上某台设备的 MTU 的数据包,则接收主机或设备将删除此数据包,然后返回以下 ICMP 消息:Destination Unreachable: Fragmentation Needed and Don't Fragment was Set(类型 3,代码 4)。这将指示传输主机将有效负载拆分为多个较小的数据包,然后重新传输。

IPv6 协议不支持网络中的分段。如果主机发送一个大于接收主机的 MTU 或大于路径上某台设备的 MTU 的数据包,则接收主机或设备将删除此数据包,然后返回以下 ICMP 消息:ICMPv6 Packet Too Big (PTB)(类型 2)。这将指示传输主机将有效负载拆分为多个较小的数据包,然后重新传输。

如果您子网中主机之间的最大传输单位 (MTU) 不同,或您的实例可以通过互联网与对等项通信,则必须添加以下网络 ACL 规则(入站和出站)。这可确保路径 MTU 发现能够正常工作并防止数据包丢失。为类型选择自定义 ICMP 规则,为端口范围选择目的地无法到达需要分段,DF 标志已设置(类型 3,代码 4)。如果您使用 traceroute,还需添加以下规则:选择自定义 ICMP 规则作为类型,并选择超时TTL 中转过期作为端口范围(类型 11,代码 0)。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的 EC2 实例的网络最大传输单位 (MTU)

使用网络 ACL

以下任务为您展示如何使用 Amazon VPC 控制台来处理网络 ACL。

确定网络 ACL 关联

您可以使用 Amazon VPC 控制台来确定与某个子网关联的网络 ACL。网络 ACL 可与多个子网关联,因此,您还可以确定与某个网络 ACL 关联的子网。

确定与某个子网关联的网络 ACL
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Subnets(子网),然后选择子网。

    Network ACL(网络 ACL)中已包含与子网相关联的网络 ACL 以及网络 ACL 的规则。

判断与网络 ACL 关联的特定子网
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL)。Associated With(关联)列指示每个网络 ACL 的关联子网的数目。

  3. 选择网络 ACL。

  4. 在详细信息窗格中,选择Subnet Associations(子网关联)可显示与网络 ACL 关联的子网。

创建网络 ACL

您可以为 VPC 创建自定义网络 ACL。默认情况下,您创建的网络 ACL 将阻止所有入站和出站流量(直到您添加规则),且不与任何子网关联(直到您为其显式关联子网)。

创建网络网络 ACL
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL)。

  3. 选择 Create Network ACL(创建网络 ACL)。

  4. Create Network ACL(创建网络 ACL)对话框中,可以选择命名您的网络 ACL,然后 VPC 列表中选择 VPC 的 ID。然后选择Yes, Create(是,创建)。

添加和删除规则

当您在网络 ACL 中添加或删除规则时,与其相关联的子网也会随之更改。您不必终止并重新启动子网中的实例。这些更改在短时间内生效。

重要

请在同时增加和删除规则时谨慎小心。网络 ACL 规则定义了哪些类型的网络流量可以进入或退出您的 VPC。如果您删除入站或出站规则,然后添加的新条目数超过了 Amazon VPC 配额 中允许的数量,则选择删除的条目将被删除,并且不会添加新条目。这可能会导致意外的连接问题,并在无意中阻止进出 VPC 的访问。

如果您使用 Amazon EC2 API 或命令行工具,则无法修改规则。您只能添加和删除规则。如果您使用 Amazon VPC 控制台,则可以修改现有规则的条目。控制台将为您删除现有规则并添加新规则。如果您需要更改 ACL 中的规则顺序,您必须添加有新规则编号的新规则,并随后删除最初的规则。

为网络 ACL 添加规则
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL)。

  3. 在详细信息窗格中,根据需要添加的规则的类型,选择 Inbound Rules(入站规则)或 Outbound Rules(出站规则)选项卡,然后选择 Edit(编辑)。

  4. Rule #(规则 #)中输入一个规则编号(例如 100)。规则编号必须尚未在网络 ACL 中使用。我们会按顺序处理规则,以编号最低的规则开始。

    我们建议您使用跳跃的规则编号(例如 100、200、300)而不是使用顺序编号(例如 101、102、103)。这会让添加新规则变得更加简单,无需对现有规则重新编号。

  5. Type(类型)列表中选择规则。例如,要为 HTTP 添加规则,请选择 HTTP。如需添加规则以允许所有 TCP 流量,请选择 All TCP(所有 TCP)。对于部分选项(例如 HTTP)我们会在端口中为您提供。如需使用未列出的规则,请选择 Custom Protocol Rule(自定义协议规则)。

  6. (可选)如果要创建自定义协议规则,请从 Protocol(协议)列表中选择协议的编号和名称。有关更多信息,请参阅IANA List of Protocol Numbers

  7. (可选)如果您已经选定的协议要求提供端口号,您可以输入由连字符分隔的端口号或端口范围(例如 49152-65535)。

  8. Source(资源)或 Destination(目的地)字段中(根据是入站规则还是出站规则),输入规则适用的 CIDR 范围。

  9. Allow/Deny(允许/拒绝)列表中,选择 ALLOW(允许)以允许指定数据流,或选择 DENY (拒绝)以拒绝指定数据流。

  10. (可选)要添加其他规则,请选择 Add another rule(添加另一个规则),然后根据需要重复步骤 4 至 9。

  11. 完成此操作后,选择Save(保存)。

从网络 ACL 删除规则
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL),然后选择网络 ACL。

  3. 在详细信息窗格中,选择 Inbound Rules(入站规则)或 Outbound Rules(出站规则)选项卡,然后选择 Edit(编辑)。为要删除的规则选择 Remove(删除),然后选择 Save(保存)。

关联子网与网络 ACL

如需对特定子网应用特定的网络 ACL 规则,您必须首先将子网与网络 ACL 关联。您可以将网络 ACL 与多个子网关联。但是,一个子网只能与一个网络 ACL 关联。任何未与特定 ACL 关联的子网都会默认与默认网络 ACL 关联。

将子网与网络 ACL 关联
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL),然后选择网络 ACL。

  3. 在详细信息窗格中的 Subnet Associations(子网关联)选项卡上,选择 Edit(编辑)。选中要与网络 ACL 关联的子网的 Associate(关联)复选框,然后选择 Save(保存)。

解除网络 ACL 与子网的关联

您可以从子网取消自定义网络 ACL 的关联。当子网与自定义网络 ACL 取消关联时,它会随即自动与默认网络 ACL 关联。

解除子网与网络 ACL 的关联
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL),然后选择网络 ACL。

  3. 在详细信息窗格中,选择 Subnet Associations(子网关联)选项卡。

  4. 选择 Edit(编辑),然后取消选中子网的 Associate(关联)复选框。选择 Save(保存)。

更改子网的网络 ACL

您可以更改与某个子网关联的网络 ACL。例如,当您创建一个子网时,这个子网会最初与主路由表关联。相反,您可能需要将其与您创建的自定义网络 ACL 相关联。

更改子网的网络 ACL 后,您不必终止并重新启动子网中的实例。这些更改在短时间内生效。

更改子网的网络 ACL 关联
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Subnets(子网),然后选择子网。

  3. 选择 Network ACL(网络 ACL)选项卡,然后选择 Edit(编辑)。

  4. 更改为列表中选择要与子网关联的网络 ACL,然后选择保存

删除网络 ACL

您只可以删除未与任何子网关联的网络 ACL。您无法删除默认网络 ACL。

删除网络 ACL
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择 Network ACLs(网络 ACL)。

  3. 选择网络 ACL,然后选择 Delete(删除)。

  4. 在确认对话框中,选择 Yes, Delete(是的,删除)。

API 和命令概览

您可以使用命令行或 API 执行此页面上所说明的任务。有关命令行界面以及可用 API 列表的更多信息,请参阅 使用 Amazon VPC

为您的 VPC 创建网络 ACL
说明您的一个或多个网络 ACL
向网络 ACL 添加规则
从网络 ACL 中删除规则
替换网络 ACL 中的现有规则
替换网络 ACL 关联
删除网络 ACL

示例:控制对子网中的实例的访问

在本示例中,子网中的任意两个实例可相互通信,并可从受信任的远程计算机访问它们。远程计算机可能是本地网络中的计算机,也可能是其他子网或 VPC 中的实例。您可以使用它连接到实例以执行管理任务。安全组规则和网络 ACL 规则允许从远程计算机 (172.31.1.2/32) 的 IP 地址进行访问。来自 Internet 或其他网络的所有其他流量会被拒绝。该方案让您能够灵活地更改实例的安全组或安全组规则,并使用网络 ACL 作为备份防御层。


          使用安全组和 NACL

下面是要与实例关联的示例安全组。安全组是有状态的。因此,您不需要允许对入站流量做出响应的规则。

入站
协议类型 协议 端口范围 注释
所有流量 All All sg-1234567890abcdef0 与此安全组关联的所有实例都可以相互通信。
SSH TCP 22 172.31.1.2/32 允许远程计算机进行入站 SSH 访问。
出站
协议类型 协议 端口范围 目的地 注释
所有流量 All All sg-1234567890abcdef0 与此安全组关联的所有实例都可以相互通信。

下面是要与实例的子网关联的示例网络 ACL。网络 ACL 规则应用到子网中的所有实例。网络 ACL 没有任何状态。因此,您需要允许对入站流量做出响应的规则。

入站
规则 # 类型 协议 端口范围 允许/拒绝 注释
100 SSH TCP 22 172.31.1.2/32 允许 允许远程计算机的入站流量。
* 所有流量 All 全部 0.0.0.0/0 拒绝 拒绝所有其他入站流量。
出站
规则 # 类型 协议 端口范围 目的地 允许/拒绝 注释
100 自定义 TCP TCP 1024-65535 172.31.1.2/32 允许 允许到远程计算机的出站响应。
* 所有流量 All 全部 0.0.0.0/0 拒绝 拒绝所有其他出站流量。

如果您不小心设置了过于宽松的安全组规则,此示例中的网络 ACL 规则仍继续生效,只允许来自指定 IP 地址的访问。例如,下面的安全组包含允许从任何 IP 地址进行入站 SSH 访问的规则。但是,如果您将此安全组与使用网络 ACL 的子网中的实例关联起来,则只有子网内的其他实例以及远程计算机才能访问该实例,因为网络 ACL 规则会拒绝对子网的其他入站流量。

入站
类型 协议 端口范围 注释
所有流量 All All sg-1234567890abcdef0 与此安全组关联的所有实例都可以相互通信。
SSH TCP 22 0.0.0.0/0 允许来自任意 IP 地址的 SSH 访问。
出站
类型 协议 端口范围 目的地 注释
所有流量 All 全部 0.0.0.0/0 允许所有出站流量。

解决可接通性问题

Reachability Analyzer 是一款静态配置分析工具。使用 Reachability Analyzer 分析和调试您的 VPC 中两个资源之间的网络可访问性。当这些资源可以访问时,Reachability Analyzer 会生成它们之间的虚拟路径的 hop-by-hop 详细信息,否则会识别阻塞组件。例如,它可以识别缺失或配置错误的网络 ACL 规则。

有关更多信息,请参阅 Reachability Analyzer 角色指南