Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

您的 VPC 的安全组

安全组 充当实例的虚拟防火墙以控制入站和出站流量。当您在 VPC 中启动实例时,您可以为该实例最多分配 5 个安全组。安全组在实例级别运行,而不是子网级别。因此,在您的 VPC 的子网中的每项实例都归属于不同的安全组集合。如果您在启动时没有指定具体的安全组,实例会自动归属到 VPC 的默认安全组。

对于每个安全组,您可以添加规则以控制到实例的入站数据流,以及另外一套单独规则以控制出站数据流。此部分描述了您需要了解的有关您 VPC 的安全组及其规则的基本信息。

您可以设置网络 ACL,使其规则与您的安全组相似,以便为您的 VPC 添加额外安全层。 有关安全组和网络 ACL 之间的差别的更多信息,请参见安全组与网络 ACL 的比较

安全组基本信息

以下是您的 VPC 安全组的基本特征:

  • 系统对您为每个 VPC 创建的安全组数、向每个安全组添加的规则数以及与网络接口关联的安全组数设有限制。有关更多信息,请参阅 Amazon VPC 限制

  • 您可以指定允许规则,但不可指定拒绝规则。

  • 您可以为入站和出站流量指定单独规则。

  • 当您创建一个安全组时,它没有入站规则。因此,在您向安全组添加入站规则之前,不允许来自另一台主机的入站流量传输到您的实例。

  • 默认情况下,安全组包含允许所有出站流量的出站规则。您可以删除该规则并添加只允许特定出站流量的出站规则。如果您的安全组没有出站规则,则不允许来自您的实例的出站流量。

  • 安全组是有状态的 - 如果您从实例发送一个请求,则无论入站安全组规则如何,都将允许该请求的响应流量流入。如果是为响应已允许的入站流量,则该响应可以出站,此时可忽略出站规则。

    注意

    系统对某些类型的流量使用了不同于其他流量的跟踪方式。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的连接跟踪

  • 与安全组关联的实例无法彼此通信,除非您添加了相应的允许规则 (已有此类默认规则的默认安全组除外)。

  • 安全组与网络接口关联。在您启动实例之后,您可以更改与该实例关联的安全组,从而更改与主网络接口 (eth0) 关联的安全组。您还可以更改与任何其他网络接口关联的安全组。有关网络接口的更多信息,请参阅弹性网络接口

您的 VPC 的默认安全组

您的 VPC 会自动带有默认的安全组。如果您在启动实例时未指定其他安全组,则您在 VPC 内启动的每项 EC2 实例都会自动与默认安全组关联。

下表介绍默认安全组的默认规则。

入站
协议 端口范围 注释

安全组 ID (sg-xxxxxxxx)

全部

全部

允许从分配给同一安全组的实例发来的入站流量.

出站

目的地 协议 端口范围 注释

0.0.0.0/0

全部

全部

允许所有的出站 IPv4 流量。

::/0 全部 全部 允许所有的出站 IPv6 流量。如果您创建了具有 IPv6 CIDR 块的 VPC 或向现有的 VPC 关联了 IPv6 CIDR 块,则系统默认添加此规则。

您可以更改默认安全组的规则。

您无法删除默认安全组。如果您尝试删除默认安全组,会显示以下错误:Client.CannotDelete: the specified group: "sg-51530134" name: "default" cannot be deleted by a user

注意

如果您修改了安全组的出站规则,则当您向 VPC 关联 IPv6 块时,我们不会为 IPv6 流量自动添加出站规则。

安全组规则

您可以添加或删除安全组规则 (又被称为授权撤销入站或出站访问)。适用于入站数据流 (进入) 或出站数据流 (离开) 的规则。您可以授予对某个特定 CIDR 范围或 VPC 或对等 VPC (需要 VPC 对等连接) 中的其他安全组的访问权限。

以下是 VPC 中安全组规则的基本部分:

  • (仅限入站规则) 流量源和目标端口或端口范围。源可以是另一个安全组、IPv4 或 IPv6 CIDR 块或单个 IPv4 或 IPv6 地址。

  • (仅限出站规则) 流量目标和目标端口或端口范围。目标可以是另一个安全组、IPv4 或 IPv6 CIDR 块或单个 IPv4 或 IPv6 地址。

  • 任何有标准协议编号的协议 (有关具体列表,请参见协议编号)。如果您指定 ICMP 作为协议,您可以指定任意或全部 ICMP 类型和代码。

  • 安全组规则的可选描述,可帮助您以后识别它。描述的长度最多为 255 个字符。允许的字符包括 a-z、A-Z、0-9、空格和 ._-:/()#,@[]+=;{}!$*。

当您指定安全组作为规则的源时,这会允许与源安全组相关联的实例访问该安全组中的实例。这并不会将源安全组的规则添加到该安全组。允许的传入流量基于与源安全组相关联的实例的私有 IP 地址 (而不是公有 IP 或弹性 IP 地址)。

如果指定单个 IPv4 地址,请使用 /32 前缀长度指定该地址。如果指定单个 IPv6 地址,请使用 /128 前缀长度指定该地址。

有些设置防火墙的系统会让您在源端口进行过滤。安全组可帮助您仅在目标端口进行过滤。

当您添加或删除一项规则时,您的修改会自动应用到所有与该安全组相关的实例。

您添加的规则类型可能取决于该实例的用途。下表介绍 Web 服务器的安全组的示例规则。Web 服务器可接收来自所有 IPv4 和 IPv6 地址的 HTTP 及 HTTPS 流量,并将 SQL 或 MySQL 流量发送到数据库服务器。

入站
协议 端口范围 注释

0.0.0.0/0

TCP

80

允许从所有 IPv4 地址进行入站 HTTP 访问

::/0 TCP 80 允许从所有 IPv6 地址进行入站 HTTP 访问

0.0.0.0/0

TCP

443

允许从所有 IPv4 地址进行入站 HTTPS 访问

::/0 TCP 443 允许从所有 IPv6 地址进行入站 HTTPS 访问

您网络的公有 IPv4 地址范围

TCP

22

允许从您的网络中的 IPv4 IP 地址对 Linux 实例进行入站 SSH 访问 (通过 Internet 网关)

您网络的公有 IPv4 地址范围

TCP

3389

允许从您的网络中的 IPv4 IP 地址对 Windows 实例进行入站 RDP 访问 (通过 Internet 网关)

出站

目的地 协议 端口范围 注释

数据库服务器的安全组的 ID

TCP

1433

允许 Microsoft SQL Server 出站访问指定安全组中的实例

MySQL 数据库服务器的安全组的 ID

TCP

3306

允许 MySQL 出站访问指定安全组中的实例

数据库服务器需要不同的规则集;例如,您可以添加一个规则以允许入站 MySQL 或 Microsoft SQL Server 访问 (而不是入站 HTTP 和 HTTPS 流量)。有关 Web 服务器和数据库服务器的安全组规则示例,请参阅安全性

有关特定种类访问的安全组规则示例,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的安全组规则引用

过时的安全组规则

如果您的 VPC 具有与其他 VPC 的 VPC 对等连接,则安全组规则可引用对等 VPC 中的其他安全组。这使与已引用的安全组关联的实例能够和与正在引用的安全组关联的实例进行通信。

如果对等 VPC 的所有者删除引用的安全组,或者您或对等 VPC 的所有者删除 VPC 对等连接,则安全组规则将标记为 stale。与任何其他的安全组规则一样,您可以删除过时的安全组规则。

有关更多信息,请参阅 Amazon VPC Peering Guide 中的使用过时的安全组

EC2-Classic 和 EC2-VPC 安全组之间的差异

如果您已经是 Amazon EC2 用户,则可能对这些安全组很熟悉。但是,您无法将创建用于 EC2-Classic 的安全组用于 VPC 中的实例。您必须专门为 VPC 中的实例创建安全组。您为 VPC 安全组创建的规则无法参考在 EC2-Classic 安全组中使用的规则,反之亦然。

下表概述了在 EC2-Classic 和 EC2-VPC 中使用的安全组的不同之处。

EC2-Classic EC2-VPC

您最多可以为每个地区创建 500 个安全组。

您最多可以为每个 VPC 创建 500 个安全组。

您最多可以为一个安全组添加 100 条规则。

您最多可以为一个安全组添加 50 条规则。

您只能为入站流量添加规则。

您可以为入站和出站流量添加规则。

您最多可以为一个实例分配 500 个安全组。

您最多可以为一个网络接口分配 5 个安全组。

您可以参考其他 AWS 账户的安全组。

您只能从 VPC 或 VPC 对等连接中的对等 VPC 中引用安全组。对等 VPC 可在其他账户中。

启动实例后,您就不能再更改为其分配的安全组。

您可以在启动实例后更改为其分配的安全组。

当您向安全组添加规则时,无需指定某项协议,并且仅有 TCP、UDP 或 ICMP 可供您使用。

当您向安全组添加规则时,必须指定协议,您可以指定任何有标准协议编号的协议或所有协议 (参见 Protocol Numbers)。

当您向安全组添加规则时,必须指定端口号 (适用于 TCP 或 UDP)。

当您向安全组添加规则时,可以指定端口号 (只有在规则是 TCP 或 UDP 规则时,您才可以指定全部端口号)。

无法删除其他安全组规则中引用的安全组。 如果安全组在其他 VPC 中,则可删除其他安全组规则中引用的安全组。如果删除引用的安全组,则规则将标记为“过时”。您可以使用 describe-stale-security-groups AWS CLI 命令来标识过时的规则。
您无法在安全组规则中指定 IPv6 CIDR 块或 IPv6 地址作为源或目标。 您可以在安全组规则中指定 IPv6 CIDR 块或 IPv6 地址作为源或目标。

使用安全组

此部分说明如何利用 Amazon VPC 控制台使用安全组。

正在修改默认安全组

您的 VPC 包含一个默认安全组,其初始规则为拒绝所有入站数据流、允许所有出站数据流以及允许所有在组内实例之间的数据流。您无法删除此安全组;但是,您可以更改安全组的规则。此过程与修改任何其他安全组的过程相同。 有关更多信息,请参阅 添加、删除和更新规则

正在创建安全组

尽管您可以为实例指定默认安全组,您可能仍希望创建自己的安全组,以反映实例在您的系统中扮演的不同角色。

使用控制台创建安全组

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择 Create Security Group

  4. 输入安全组的名称 (例如,my-security-group) 并提供说明。从 VPC 菜单中选择您 VPC 的 ID,然后选择 Yes, Create

使用命令行创建安全组

使用命令行描述一个或多个安全组

在默认情况下,新安全组起初只有一条出站规则,即允许所有通信离开实例。您必须添加规则,以便允许任何入站数据流或限制出站数据流。

添加、删除和更新规则

当您添加或删除一项规则时,任何已经指定到该安全组的实例都会随之发生变化。

如果您有 VPC 对等连接,则可以从对等 VPC 中引用安全组作为您的安全组规则中的源或目标。有关更多信息,请参阅 Amazon VPC Peering Guide 中的更新安全组以引用对等 VPC 安全组

使用控制台添加规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择需要更新的安全组。 详细信息窗格内会显示此安全组的详细信息,以及可供您使用入站规则和出站规则的选项卡。

  4. Inbound Rules 选项卡上,选择 Edit。针对 Type 选择用于入站流量规则的选项,然后填写所需信息。例如,对于公有 Web 服务器,选择 HTTPHTTPS,并将 Source 的值指定为 0.0.0.0/0

    注意

    如果您使用 0.0.0.0/0,则允许所有 IPv4 地址使用 HTTP 或 HTTPS 访问您的实例。要限制访问,则输入特定 IP 地址或地址范围。

  5. 或者提供有关规则的描述,然后选择 Save

  6. 还可允许在所有与此安全组关联的实例之间进行通信。在 Inbound Rules 选项卡上,从 Type 列表中选择 All Traffic。开始为 Source 键入安全组的 ID;此操作会为您提供一个安全组列表。从该列表中选择安全组,然后选择 Save

  7. 如果需要,可使用 Outbound Rules 选项卡添加用于出站流量的规则。

使用控制台删除规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择需要更新的安全组。 详细信息窗格内会显示此安全组的详细信息,以及可供您使用入站规则和出站规则的选项卡。

  4. 选择 Edit,选择要删除的角色,然后选择 RemoveSave

当您使用控制台修改现有安全组规则的协议、端口范围或者源或目标时,控制台会删除现有规则并为您添加新规则。

使用控制台更新规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择要更新的安全组,然后选择 Inbound Rules 更新入站流量的规则,或者选择 Outbound Rules 更新出站流量的规则。

  4. 选择 Edit。根据需要修改规则条目,然后选择 Save

要使用 Amazon EC2 API 或命令行工具更新现有规则的协议、端口范围或者源或目标,您就无法修改规则;相反,您必须删除该现有规则并添加新规则。要仅更新规则描述,您可以使用 update-security-group-rule-descriptions-ingressupdate-security-group-rule-descriptions-egress 命令。

使用命令行向安全组添加规则

使用命令行从安全组中删除规则

正在更改实例的安全组

在将实例启动到 VPC 中后,您可以更改与该实例关联的安全组。当实例处于runningstopped状态时,您可以更改实例的安全组。

注意

此过程会更改与实例的主网络接口 (eth0) 关联的安全组。要更改其他网络接口的安全组,请参阅更改网络接口的安全组

使用控制台更改实例的安全组

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 打开实例的上下文 (右键单击) 菜单,选择 NetworkingChange Security Groups

  4. Change Security Groups 对话框中,从该列表中选择一个或多个安全组,然后选择 Assign Security Groups

使用命令行更改实例的安全组

正在删除安全组

只有在某一安全组中没有任何实例时 (无论是运行还是停止实例),您方可删除此安全组。您可以在删除安全组之前将实例指定到另一个安全组 (参阅正在更改实例的安全组)。您无法删除默认安全组。

如果您使用控制台,则可以一次删除多个安全组。如果您使用命令行或 API,则一次只能删除一个安全组。

使用控制台删除安全组

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择一个或多个安全组,然后选择 Security Group ActionsDelete Security Group

  4. Delete Security Group 对话框中,选择 Yes, Delete

使用命令行删除安全组

删除“2009-07-15-default”安全组

任何使用晚于 2011-01-01 的 API 版本创建的 VPC 都有2009-07-15-default安全组。除了这个安全组之外,每个 VPC 还自带了常规default安全组。您无法将 Internet 网关与具有 2009-07-15-default 安全组的 VPC 关联。因此,您必须先删除此安全组,然后才能将 Internet 网关与 VPC 关联。

注意

如果您已将此安全组分配给任何实例,则必须先将这些实例分配给其他安全组,然后才能删除所分配的安全组。

删除2009-07-15-default安全组

  1. 确保此安全组未分配给任何实例。

    1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

    2. 在导航窗格中,选择 Network Interfaces

    3. 从该列表中选择实例的网络接口,然后选择 Change Security GroupsActions

    4. Change Security Groups 对话框中,从该列表中选择一个新的安全组,然后选择 Save

      注意

      在更改实例的安全组时,您可以从列表中选择多个安全组。您选定的安全组会替换实例现有的安全组。

    5. 为每个实例重复上一步骤。

  2. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  3. 在导航窗格中,选择 Security Groups

  4. 选择 2009-07-15-default 安全组,然后选择 Security Group ActionsDelete

  5. Delete Security Group 对话框中,选择 Yes, Delete