您的 VPC 的安全组 - Amazon Virtual Private Cloud

您的 VPC 的安全组

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

如果您使用 Amazon EC2 API 或命令行工具启动一个实例,但未指定安全组,则会自动将该实例分配给 VPC 的默认安全组。如果您使用 Amazon EC2 控制台启动一个实例,则可以选择为该实例创建新安全组。

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

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

安全组基本信息

以下是安全组的特征:

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

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

  • 安全组规则允许您根据协议和端口号筛选流量。

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

    注意

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

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

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

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

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

  • 安全组与网络接口关联。在您启动实例之后,您可以更改与该实例关联的安全组,从而更改与主网络接口 (eth0) 关联的安全组。您还可以指定或更改与任何其他网络接口关联的安全组。默认情况下创建网络接口时,除非您指定了其他安全组,否则接口与 VPC 的默认安全组关联。有关网络接口的更多信息,请参阅弹性网络接口

  • 创建安全组时,您必须为其提供名称和描述。以下规则适用:

    • 名称和描述的长度最多为 255 个字符。

    • 名称和描述只能使用以下字符:a-z、A-Z、0-9、空格和 ._-:/()#,@[]+=&;{}!$*。

    • 如果名称后面带有空格,我们在保存名称时会删除这些空格。例如,如果您输入“Test Security Group ”作为名称,我们会将其存储为“Test Security Group”。

    • 安全组名称不能以 sg- 开头,因为这些名称表示默认安全组。

    • 安全组名称在 VPC 中必须是唯一的。

  • 安全组只能在您创建安全组时指定的 VPC 中使用。

您的 VPC 的默认安全组

您的 VPC 会自动带有默认的安全组。如果您在启动实例时没有指定其他安全组,我们会将默认安全组与您的实例相关联。

注意

如果您在 Amazon EC2 控制台中启动实例,则启动实例向导会自动定义“launch-wizard-xx”安全组,您可以将该安全组与实例关联,而非默认安全组。

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

Inbound
协议 端口范围 描述

安全组 ID (sg-xxxxxxxx)

All

All

允许来自分配给相同安全组的网络接口(及其关联实例)的入站流量。

Outbound

目的地 协议 端口范围 描述

0.0.0.0/0

All

All

允许所有的出站 IPv4 流量。

::/0 All All Allow all outbound IPv6 traffic. This rule is added by default if you create a VPC with an IPv6 CIDR block or if you associate an IPv6 CIDR block with your existing VPC.

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

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

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

安全组规则

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

安全组的规则控制允许达到与该安全组相关联实例的入站流量。这些规则还控制允许离开实例的出站流量。

以下是您的安全组规则的特征:

  • 默认情况下,安全组允许所有出站流量。

  • 安全组规则始终是宽松的;您无法创建拒绝访问的规则。

  • 安全组规则允许您根据协议和端口号筛选流量。

  • 安全组是有状态的 – 如果您从实例发送一个请求,则无论入站规则如何,都将允许该请求的响应流量流入。这还意味着,无论出站规则如何,都允许对允许的入站流量的响应流出。

  • 您可以随时添加和删除规则。您所做的更改将会自动应用到与安全组关联的实例中。

    某些规则变更产生的影响可能会取决于跟踪流量的方式。

  • 当您将多个安全组与一个实例相关联时,将有效汇总每个安全组的规则,以创建一组规则。Amazon EC2 使用这组规则确定是否允许访问。

    您可以为一个实例分配多个安全组。因此,一个实例可以有数百条适用的规则。访问该实例时,这可能会导致问题。因此,我们建议您尽可能使规则简洁。

对于每个规则,您可以指定以下内容:

  • 名称:安全组的名称(例如,my-security-group)。

    名称最长可达 255 个字符。允许的字符包括 a-z、A-Z、0-9、空格和 ._-:/()#,@[]+=;{}!$*。如果名称后面带有空格,我们在保存名称时会删除这些空格。例如,如果您输入“Test Security Group ”作为名称,我们会将其存储为“Test Security Group”。

  • 协议:允许的协议。最常见的协议为 6 (TCP)、17 (UDP) 和 1 (ICMP)。

  • 端口范围:对于 TCP、UDP 或自定义协议,允许的端口范围。您可以指定单个端口号 (例如 22) 或端口号范围 (例如7000-8000)。

  • ICMP 类型和代码:对于 ICMP,ICMP 类型和代码。

  • 源或目标:流量的源 (入站规则) 或目标 (出站规则)。请指定以下选项之一:

    • 一个 IPv4 地址。您必须使用 /32 前缀长度;例如 203.0.113.1/32

    • 一个 IPv6 地址。您必须使用 /128 前缀长度;例如 2001:db8:1234:1a00::123/128

    • 采用 CIDR 块表示法的 IPv4 地址范围;例如,203.0.113.0/24

    • 采用 CIDR 块表示法的 IPv6 地址范围;例如,2001:db8:1234:1a00::/64

    • 前缀列表 ID,例如 pl-1234abc1234abc123。有关更多信息,请参阅 前缀列表

    • 其他安全组。这样,与指定安全组关联的实例就可以访问与该安全组关联的实例。(选择此选项不会将规则从源安全组添加到此安全组。) 您可以指定以下安全组之一:

      • 当前安全组

      • 同一 VPC 的其他安全组

      • VPC 对等连接中的对等 VPC 的其他安全组

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

当您创建安全组规则时,AWS 会将唯一 ID 分配给规则。当您使用 API 或 CLI 修改或删除某规则时,您可以使用该规则的 ID。

当您指定一个安全组作为规则的源或目标时,规则会影响与该安全组关联的所有实例。允许的传入流量基于与源安全组相关联的实例的私有 IP 地址 (而不是公有 IP 或弹性 IP 地址)。如果您的安全组规则引用对等 VPC 中的一个安全组,并且引用的安全组或 VPC 对等连接已删除,则该规则将会标记为过时。有关更多信息,请参阅Amazon VPC Peering Guide中的使用过时的安全组规则

将安全组指定为规则的源时,将会允许从与指定协议和端口的源安全组关联的网络接口进行通信。系统根据与源安全组相关联的网络接口的私有 IP 地址(而不是公有 IP 或弹性 IP 地址)决定是否允许传入流量。将安全组添加为源不会从源安全组添加规则。有关示例,请参阅您的 VPC 的默认安全组

有些设置防火墙的系统会允许您在源端口进行筛选。安全组允许您仅在目标端口进行筛选。

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

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

Inbound
协议 端口范围 描述

0.0.0.0/0

TCP

80

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

::/0 TCP 80 Allow inbound HTTP access from all IPv6 addresses

0.0.0.0/0

TCP

443

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

::/0 TCP 443 Allow inbound HTTPS access from all IPv6 addresses

您网络的公有 IPv4 地址范围

TCP

22

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

您网络的公有 IPv4 地址范围

TCP

3389

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

Outbound

目的地 协议 端口范围 描述

Microsoft SQL Server 数据库服务器的安全组的 ID

TCP

1433

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

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

TCP

3306

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

数据库服务器需要一组不同的规则。例如,您可以添加规则来允许入站 MySQL 或 Microsoft SQL 服务器访问,而不是入站 HTTP 和 HTTPS 流量。有关 Web 服务器和数据库服务器的安全组规则示例,请参阅Security。有关 Amazon RDS 数据库实例的安全组的更多信息,请参阅 Amazon RDS 用户指南 中的使用安全组控制访问

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

过时的安全组规则

如果您的 VPC 具有与其他 VPC 的 VPC 对等连接,则安全组规则可引用对等 VPC 中的其他安全组。这样,与所引用安全组关联的实例以及与进行引用的安全组关联的实例可以相互通信。

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

有关更多信息,请参阅 Amazon VPC 对等连接指南 中的使用过时的安全组

使用安全组

以下任务为您展示如何使用 Amazon VPC 控制台来处理安全组。

修改默认安全组

您的 VPC 包括一个默认安全组。您无法删除此安全组;但是,您可以更改安全组的规则。此过程与修改任何其他安全组的过程相同。

创建安全组

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

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

安全组只能在为其创建该组的 VPC 中使用。

有关创建安全组和管理安全组规则所需权限的信息,请参阅 管理安全组管理安全组规则

使用控制台创建安全组

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

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

  3. 选择创建安全组

  4. 输入安全组的名称和描述。在创建安全组后,您无法更改其名称和描述。

  5. VPC 中,选择 VPC。

  6. 您可以现在添加安全组规则,也可以稍后再添加。有关更多信息,请参阅向安全组添加规则

  7. 您可以现在添加标签,也可以稍后再添加。要添加标签,请选择 Add new tag (添加新标签),然后输入标签键和值。

  8. 选择创建安全组

使用命令行创建安全组

查看安全组

您可以查看如下关于您安全组的详细信息。

有关查看安全组所需权限的信息,请参阅 管理安全组

使用控制台查看您的安全组

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

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

  3. 此时将列出您的安全组。要查看特定安全组的详细信息,包括其入站和出站规则,请选择该安全组。

使用命令行查看您的安全组

为安全组添加标签

向资源添加标签以帮助整理和识别资源,例如,按用途、拥有者或环境。您可以为安全组添加标签。每个安全组的标签键必须是唯一的。如果您添加的标签中的键已经与规则关联,它将更新该标签的值。

使用控制台为安全组添加标签

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

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

  3. 选中安全组对应的复选框。

  4. 选择 Actions (操作)Manage tags (管理标签)

  5. Manage tags (管理标签) 部分显示分配给安全组的所有标签。要添加标签,请选择 Add tag (添加标签),然后输入标签键和值。要删除标签,请选择要删除的标签旁边的 Remove (删除)

  6. 选择保存更改

使用命令行为安全组添加标签

向安全组添加规则

当您向安全组添加规则时,这一新规则会自动应用于与该安全组关联的任何实例。

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

有关管理安全组规则所需权限的信息,请参阅 管理安全组规则

使用控制台添加规则

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

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

  3. 选择安全组。

  4. 依次选择 Actions (操作)Edit inbound rules (编辑入站规则),或 Actions (操作)Edit outbound rules (编辑出站规则)

  5. 对于每一条规则,选择 Add rule (添加规则),然后执行以下操作:

    1. 对于Type (类型),选择要允许的协议类型。

      • 对于 TCP 或 UDP,您必须输入允许的端口范围。

      • 对于自定义 ICMP,您必须从 Protocol (协议) 中选择 ICMP 类型名称,并从 Port range (端口范围) 中选择代码名称(如果适用)。

      • 对于任何其他类型,则会自动配置协议和端口范围。

    2. 适用于 Source (源)(入站规则)或 Destination (目的地)(出站规则),请执行以下操作之一以允许流量:

      • 选择 Custom (自定义),然后以 CIDR 表示法输入 IP 地址、CIDR 块、其他安全组或前缀列表。

      • 选择 Anywhere (任何位置) 可允许来自任何 IP 地址的流量到达您的实例(入站规则),或允许来自实例的流量到达所有 IP 地址(出站规则)。此选项将自动添加 0.0.0/0 IPv4 CIDR 块。

        如果您的安全组位于启用 IPv6 的 VPC 中,则此选项会自动为 ::/0 IPv6 CIDR 块添加规则。

        对于入站规则,此选项在短期内在测试环境中是可接受的,但是在生产环境中并不安全。在生产环境中,请仅授权特定 IP 地址或地址范围访问您的实例。

      • 选择 My IP (我的 IP) 以仅允许来自(入站规则)或流向(出站规则)您本地计算机的公有 IPv4 地址的流量。

    3. (可选)对于 Description (描述),指定规则的简单描述。

  6. 选择 Save rules (保存规则)

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

更新安全组规则

当您更新规则时,更新的规则将自动应用于与安全组关联的任何实例。

有关管理安全组规则所需权限的信息,请参阅 管理安全组规则

使用控制台更新规则

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

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

  3. 选择安全组。

  4. 依次选择 Actions (操作)Edit inbound rules (编辑入站规则),或 Actions (操作)Edit outbound rules (编辑出站规则)

  5. 根据需要更新规则。

  6. 选择 Save rules (保存规则)

为安全组规则添加标签

向资源添加标签以帮助整理和识别资源,例如,按用途、拥有者或环境。您可以为安全组规则添加标签。每个安全组规则的标签键必须是唯一的。如果您添加的标签中的键已经与安全组关联,它将更新该标签的值。

使用控制台为规则添加标签

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

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

  3. 选择安全组。

  4. Inbound rules (入站规则)Outbound rules (出站规则) 选项卡上,选中规则的复选框,然后选择 Manage tags (管理标签)

  5. Manage tags (管理标签) 页面显示分配给规则的所有标签。要添加标签,请选择 Add tag (添加标签),然后输入标签键和值。要删除标签,请选择要删除的标签旁边的 Remove (删除)

  6. 选择保存更改

使用命令行为规则添加标签

删除安全组规则

当您从安全组中删除规则时,此更改会自动应用于与该安全组关联的任何实例。

使用控制台更新安全组规则

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

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

  3. 选择安全组。

  4. 选择 Actionis (操作),然后选择 Edit inbound rules (编辑入站规则) 以删除入站规则,或选择 Edit outbound rules (编辑出站规则) 以删除出站规则。

  5. 选择您希望删除的规则旁边的 Delete(删除)按钮。

  6. 选择 Save rules (保存规则)

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

更改实例的安全组

在将实例启动到 VPC 中后,当该实例位于 running 或者 stopped 状态时,您可以修改与实例相关联的安全组。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的更改实例的安全组

删除安全组

只有某一安全组没有关联任何实例(正在运行或已停止的实例)时,您方可删除此安全组。您可以更改与正在运行或已停止的实例关联的安全组;有关详细信息,请参阅更改实例的安全组)。您无法删除默认安全组。

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

使用控制台删除安全组

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

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

  3. 选择一个或多个安全组,然后选择 Actions (操作)Delete security groups (删除安全组)

  4. 提示进行确认时,输入 delete,然后选择 Delete(删除)。

使用命令行删除安全组

使用 集中管理 VPC 安全组AWS Firewall Manager

AWS Firewall Manager 可简化跨多个账户和多种资源的 VPC 安全组管理和维护任务。借助 Firewall Manager,您可以通过单个中央管理员账户为组织配置和审计安全组。即使您添加新资源,Firewall Manager 也会自动跨账户和资源应用您的规则和保护。如果要保护整个组织,或者经常添加要通过中央管理员账户保护的新资源,Firewall Manager 尤其有用。

您可以使用 Firewall Manager 通过以下方式集中管理安全组:

  • 在组织中配置通用基准安全组:您可以使用通用安全组策略在组织中提供集中控制的安全组与账户和资源的关联。您可以指定在组织中应用策略的位置和方式。

  • 审核组织中的现有安全组:您可以使用审核安全组策略来检查组织的安全组中使用的现有规则。您可以设置策略的适用范围以审计组织中标记的所有账户、特定账户或资源。Firewall Manager 自动检测新账户和资源并对它们进行审计。您可以创建审核规则来设置有关组织中允许或禁止哪些安全组规则的护栏,并检查未使用或冗余的安全组。

  • 获取有关不合规资源的报告并进行修正:您可以获取不符合基准和审核策略的资源的报告和警报。您还可以设置自动修正工作流,以修正 Firewall Manager 检测到的任何不合规资源。

要了解有关使用 Firewall Manager 管理安全组的更多信息,请参阅《AWS WAF 开发人员指南》中的以下主题: