Windows 实例的 Amazon EC2 安全组 - Amazon Elastic Compute Cloud

Windows 实例的 Amazon EC2 安全组

安全组 充当 EC2 实例的虚拟防火墙,用于控制传入和传出流量。入站规则控制传入到实例的流量,出站规则控制从实例传出的流量。启动实例时,您可以指定一个或多个安全组。如果您未指定安全组,则 Amazon EC2 将使用默认安全组。您可以为每个安全组添加规则,规定流入或流出其关联实例的流量。您可以随时修改安全组的规则。新规则和修改后的规则将自动应用到与安全组相关联的所有实例。在 Amazon EC2 确定是否允许流量到达实例时,它评估与实例关联的所有安全组中的所有规则。

在 VPC 中启动实例时,您必须指定一个为该 VPC 创建的安全组。启动实例后,您可以更改其安全组。安全组与网络接口关联。更改实例的安全组也会更改与主网络接口 (eth0) 关联的安全组。想要了解更多有关信息,请参阅 Amazon VPC 用户指南 中的更改实例的安全组主题。您还可以更改与任何其他网络接口关联的安全组。有关更多信息,请参阅更改安全组

如果安全组无法满足您的要求,除了使用安全组外,您还可以在任何一个实例上保持自己的防火墙。

要允许流量进入 Linux 实例,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的适用于 Linux 实例的 Amazon EC2 安全组

安全组规则

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

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

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

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

  • 安全组是有状态的 — 如果您从实例发送一个请求,则无论入站安全组规则如何,都将允许该请求的响应流量流入。对于 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。有关更多信息,请参阅 Amazon VPC 用户指南 中的前缀列表

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

      • 当前安全组

      • 同一 VPC 的其他安全组

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

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

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

如果特定端口具有多个规则,Amazon EC2 将应用最宽松的规则。例如,如果有一条规则允许从 IP 地址 203.0.113.1 访问 TCP 端口 3389 (RDP),而另一条规则允许所有人访问 TCP 端口 3389,那么所有人都可以访问 TCP 端口 3389

连接跟踪

您的安全组使用连接跟踪来跟踪有关进出实例的流量的信息。将基于流量的连接状态应用规则以确定允许还是拒绝流量。这种方法允许安全组具有状态。这意味着无论出站安全组规则如何都允许对入站流量的响应流出实例,反之亦然。例如,如果您从您的家用计算机对实例启动 ICMP ping 命令,并且您的入站安全组规则允许 ICMP 流量,则会跟踪有关连接的信息 (包括端口信息)。来自 ping 命令的实例的响应流量不会作为新请求来跟踪,而是作为已建立的连接来跟踪,并且可以流出实例,即使您的出站安全组规则限制出站 ICMP 流量也是如此。

并非所有通信流都会被跟踪。如果安全组规则允许所有通信 (0.0.0.0/0) 的 TCP 或 UDP 流,并且另一个方向存在允许所有端口 (0-65535) 的所有响应通信 (0.0.0.0/0) 的对应规则,则不会跟踪该通信流。因此,允许响应流量基于允许响应流量的入站或出站规则流动,而不是基于跟踪信息流动。

在以下示例中,安全组具有用于 TCP 和 ICMP 流量的特定入站规则,并具有一个允许所有出站流量的出站规则。

入站规则
协议类型 端口号 源 IP
TCP 22 (SSH) 203.0.113.1/32
TCP 80 (HTTP) 0.0.0.0/0
ICMP 全部 0.0.0.0/0
出站规则
协议类型 端口号 目的地 IP
全部 全部 0.0.0.0/0

将会跟踪端口 22 (SSH) 上流入和流出实例的 TCP 流量,因为入站规则只允许来自 203.0.113.1/32 的流量,而不是所有 IP 地址 (0.0.0.0/0)。不会跟踪端口 80 (HTTP) 上流入和流出实例的 TCP 流量,因为入站和出站规则都允许所有流量 (0.0.0.0/0)。无论规则如何,始终跟踪 ICMP 流量。如果您从安全组删除出站规则,则将跟踪往返于实例上的所有流量,包括端口 80 (HTTP) 上的流量。

如果删除或修改了支持该流的规则,则会立即中断未被跟踪的通信流。例如,如果您有一个开放 (0.0.0.0/0) 出站规则,并且删除了允许所有 (0.0.0.0/0) 入站 SSH(TCP 端口 22)流量传输到实例的规则(或修改它以使不再允许连接),则您与实例的现有 SSH 连接将立即删除。该连接以前未跟踪,因此更改将断开连接。另一方面,如果您有一个较细化的入站规则,最初允许 SSH 连接(意味着已跟踪该连接),但将该规则更改为不再允许来自当前 SSH 客户端地址的新连接,则更改规则不会断开现有连接。

对于除 TCP、UDP 或 ICMP 以外的协议,仅跟踪 IP 地址和协议编号。如果您的实例将流量发送到另一个主机(主机 B),并且在原始请求或响应的 600 秒内,主机 B 在单独的请求中发起到您的实例的同一类型的流量,则无论入站安全组规则如何,您的实例都将接受该请求。您的实例接受它,因为它被视为响应流量。

要确保该流量在您删除安全组规则后立即中断,或确保所有入站流量均遵循防火墙规则,您可以使用子网的网络 ACL。网络 ACL 是无状态的,因此不会自动允许响应流量。有关更多信息,请参阅 Amazon VPC 用户指南 中的网络 ACL

默认安全组

您的 AWS 账户在每个区域的默认 VPC 中都自动拥有一个默认安全组。如果您在启动实例时没有指定安全组,实例会自动与 VPC 的默认安全组关联。

默认安全组名称为 default,而且拥有一个由 AWS 分配的 ID。以下是每个默认安全组的默认规则:

  • 允许与默认安全组相关联的其他实例的所有入站流量。安全组在其入站规则中将自身指定为源安全组。

  • 允许从实例流出的所有出站流量。

您可以添加或删除任何默认安全组的入站和出站规则。

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

自定义安全组

如果您不希望您的实例使用默认安全组,则可创建自己的安全组,并在启动实例时指定它们。您可以创建多个安全组以反映实例扮演的不同角色;例如,Web 服务器或数据库服务器。

创建安全组时,您必须为其提供名称和描述。安全组的名称和描述最多 255 个字符,而且仅限于以下字符:

a-z、A-Z、0-9、空格和 ._-:/()#,@[]+=&;{}!$*

安全组名称不能以 sg- 开头。安全组名称在 VPC 中必须是唯一的。

以下是您创建的安全组的默认规则:

  • 不允许入站流量

  • 允许所有出站流量

创建安全组后,您可以更改其入站规则,以反映您希望到达关联实例的入站流量的类型。您也可以更改其出站规则。

有关您可以添加到安全组的规则的更多信息,请参阅安全组规则引用