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

Windows 实例的 Amazon EC2 个安全组

安全组 起着虚拟防火墙的作用,可控制一个或多个实例的流量。在您启动实例时,将一个或多个安全组与该实例相关联。为每个安全组添加规则,规定流入或流出其关联实例的流量。您可以随时修改安全组的规则;新规则会自动应用于与该安全组相关联的所有实例。在决定是否允许流量到达实例时,我们会评估与实例相关联的所有安全组中的所有规则。

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

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

在某些区域,您的账户可能支持 EC2-Classic,具体取决于您创建账户的时间。有关更多信息,请参阅 支持的平台。EC2-Classic 的安全组独立于 EC2-VPC 的安全组。

EC2-Classic 安全组

如果要使用 EC2-Classic,则必须使用为 EC2-Classic 专门创建的安全组。当您在 EC2-Classic 中启动实例时,您必须在实例所在的相同区域指定一个安全组。在 EC2-Classic 中启动实例时,您无法指定为 VPC 创建的安全组。

在 EC2-Classic 中启动实例后,您就不能再更改其安全组。但是,您可以向安全组添加或从中删除规则,并且这些更改会自动应用于与该安全组相关联的所有实例。

在 EC2-Classic 中,您可以在每个区域为每个账户创建多达 500 个安全组。您可以将一个实例与多达 500 个安全组关联,并且最多可以为一个安全组添加 100 条规则。

EC2-VPC 安全组

在 VPC 中启动实例时,您必须指定一个为该 VPC 创建的安全组。如果您的账户支持 EC2-Classic,则在 VPC 中启动实例时,您无法指定为 EC2-Classic 创建的安全组。EC2-VPC 安全组具有 EC2-Classic 安全组不支持的额外功能。有关详细信息,请参阅 Amazon VPC 用户指南中的 EC2-Classic 和 EC2-VPC 安全组之间的差异

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

EC2-VPC 的安全组有单独的限制。有关更多信息,请参阅 Amazon VPC 用户指南 中的 Amazon VPC 限制。EC2-Classic 安全组不会根据 EC2-VPC 安全组限额来计数。

您可以为 VPC 启用 IPv6。有关更多信息,请参阅 Amazon VPC 用户指南中的您的 VPC 中的 IP 地址。您可以将规则添加到 VPC 安全组以启用入站和出站 IPv6 流量。

安全组规则

安全组规则可控制允许到达与安全组相关联的实例的入站流量以及允许离开实例的出站流量。

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

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

  • 您无法更改 EC2-Classic 安全组的出站规则。

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

  • 安全组是有状态的 — 如果您从实例发送一个请求,则无论入站安全组规则如何,都将允许该请求的响应流量流入。对于 VPC 安全组,这还意味着,无论出站规则如何,都允许对允许的入站流量的响应流出。有关更多信息,请参阅 连接跟踪

  • 您可以随时添加和删除规则。您的更改稍后会自动应用于与安全组相关联的实例。

    注意

    某些规则变更产生的影响可能会取决于跟踪流量的方式。有关更多信息,请参阅 连接跟踪

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

    注意

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

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

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

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

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

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

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

    • (仅限 VPC) 一个单独的 IPv6 地址。您必须使用 /128 前缀长度;例如 2001:db8:1234:1a00::123/128

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

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

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

      • 当前安全组。

      • EC2-Classic:同一区域的另一个 EC2-Classic 安全组。

      • EC2-Classic:同一区域中另一个 AWS 账户的安全组 (添加 AWS 账户 ID 作为前缀;例如,111122223333/sg-edcd9784)。

      • EC2-VPC:VPC 对等连接中的同一 VPC 或对等 VPC 的其他安全组。

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

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

如果特定端口有多条规则,我们会使用最宽松的规则。例如,如果有一条规则允许从 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 流量。

跟踪的现有通信流在您删除支持该流的安全组规则后可能不会被中断。相反,在您或其他主机停止该流至少几分钟 (对于已建立的 TCP 连接,最多 5 天) 后,它才会中断。对于 UDP,这可能需要终止对流的远程操作。如果删除或修改了支持该流的规则,则会立即中断未被跟踪的通信流。例如,如果您删除了允许所有入站 SSH 流量流入实例的规则,则与该实例的现有 SSH 连接将会立即中断。

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

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

默认安全组

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

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

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

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

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

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

自定义安全组

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

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

  • EC2-Classic:ASCII 字符

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

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

  • 不允许入站流量

  • 允许所有出站流量

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

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

使用安全组

您可以使用 Amazon EC2 控制台创建、查看、更新和删除安全组及安全组规则。

正在创建安全组

您可以使用 Amazon EC2 控制台创建自定义安全组。对于 EC2-VPC,您必须指定您正在为其创建安全组的 VPC。

使用控制台创建新安全组

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

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

  3. 选择 Create Security Group

  4. 为安全组指定名称和描述。

  5. (仅限 EC2-Classic) 要创建在 EC2-Classic 中使用的安全组,请选择无 VPC

    (EC2-VPC) 对于 VPC,选择一个 VPC ID,以为该 VPC 创建安全组。

  6. 您可以开始添加规则,也可以选择 Create 以立即创建安全组 (您可以在以后随时添加规则)。有关添加规则的更多信息,请参阅向安全组添加规则

使用命令行创建安全组

借助 Amazon EC2 控制台,您可以将规则从现有安全组复制到新的安全组。

使用控制台复制安全组

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

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

  3. 选择您要复制的安全组,然后依次选择操作复制到新项目

  4. Create Security Group (创建安全组) 对话框随即打开,其中预填充了现有安全组中的规则。为新的安全组指定名称和说明。在 VPC 列表中,选择 No VPC 以创建 EC2-Classic 的安全组,或选择 VPC ID 以创建该 VPC 的安全组。完成后,选择 Create

在启动实例时,您可以向实例分配安全组。在添加或删除规则时,所做的更改将自动应用于已分配安全组的所有实例。

在 EC2-Classic 中启动实例后,您就不能再更改其安全组。在 VPC 中启动实例后,您可以更改其安全组。想要了解更多有关信息,请参阅 Amazon VPC 用户指南中的更改实例的安全组主题。

[EC2-VPC] 使用命令行修改实例的安全组

描述您的安全组

您可以使用 Amazon EC2 控制台或命令行查看有关安全组的信息。

使用控制台描述您的 EC2-Classic 安全组

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

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

  3. 从筛选列表中选择 Network Platforms,然后选择 EC2-Classic

  4. 选择一个安全组。描述选项卡中将显示常规信息。入站选项卡中将显示入站规则。

使用控制台描述您的 EC2-VPC 安全组

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

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

  3. 从筛选列表中选择 Network Platforms,然后选择 EC2-VPC

  4. 选择一个安全组。我们将在 Description (描述) 选项卡上显示常规信息,在 Inbound (入站) 选项卡上显示入站规则,并在 Outbound (出站) 选项卡上显示出站规则。

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

向安全组添加规则

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

有关选择允许特定类型访问的安全组规则的更多信息,请参阅 安全组规则引用

使用控制台向安全组添加规则

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

  2. 在导航窗格中,选择安全组,然后选择相应安全组。

  3. Inbound 选项卡上,选择 Edit

  4. 在对话框中选择添加规则并执行以下操作:

    • 对于类型,请选择相应协议。

    • 如果您选择自定义 TCP 或 UDP 协议,请在端口范围中指定端口范围。

    • 如果您选择自定义 ICMP 协议,请从协议中选择 ICMP 类型名称,并从端口范围中选择代码名称 (如果适用)。

    • 对于,请选择下列选项之一:

      • 自定义:在提供的字段中,您必须用 CIDR 表示法指定一个 IP 地址、CIDR 块或者其他安全组。

      • 任何位置:自动添加 0.0.0.0/0 IPv4 CIDR 块。使用此选项后,指定类型的所有流量都可达到您的实例。这在测试环境中可以接受一小段时间,但是在生产环境中并不安全。在生产中,请仅授权特定 IP 地址或地址范围访问您的实例。

        注意

        如果您的安全组位于已启用 IPv6 的 VPC 中,选择任何位置选项后,系统会创建两个规则,一个用于 IPv4 流量 (0.0.0.0/0),一个用于 IPv6 流量 (::/0)。

      • 我的 IP:自动添加本地计算机的公有 IPv4 地址。

    • 对于描述,您可以选择指定规则的描述。

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

  5. 选择 Save

  6. 对于 VPC 安全组,您还可以指定出站规则。在出站选项卡中,依次选择编辑添加规则,并执行以下操作:

    • 对于类型,请选择相应协议。

    • 如果您选择自定义 TCP 或 UDP 协议,请在端口范围中指定端口范围。

    • 如果您选择自定义 ICMP 协议,请从协议中选择 ICMP 类型名称,并从端口范围中选择代码名称 (如果适用)。

    • 对于目标,请选择下列选项之一:

      • 自定义:在提供的字段中,您必须用 CIDR 表示法指定一个 IP 地址、CIDR 块或者其他安全组。

      • 任何位置:自动添加 0.0.0.0/0 IPv4 CIDR 块。此选项允许出站流量流向所有 IP 地址。

        注意

        如果您的安全组位于已启用 IPv6 的 VPC 中,选择任何位置选项后,系统会创建两个规则,一个用于 IPv4 流量 (0.0.0.0/0),一个用于 IPv6 流量 (::/0)。

      • 我的 IP:自动添加本地计算机的 IP 地址。

    • 对于描述,您可以选择指定规则的描述。

  7. 选择 Save

使用命令行向安全组添加一条或多条传入规则

[EC2-VPC] 使用命令行向安全组添加一条或多条传出规则

更新安全组规则

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

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

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

  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 命令。

使用命令行更新传入安全组规则的说明

[EC2-VPC] 使用命令行更新传出安全组规则的说明

从安全组中删除规则

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

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

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

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

  3. 选择一个安全组。

  4. 入站选项卡中 (用于入站规则) 或出站选项卡中 (用于出站规则),请选择编辑。选择要删除的每个规则旁边的删除 (十字图标)。

  5. 选择 Save

使用命令行从安全组删除一条或多条传入规则

[EC2-VPC] 使用命令行从安全组删除一条或多条传出规则

正在删除安全组

您不能删除与实例相关联的安全组。您不能删除默认安全组。您不能删除由同一 VPC 中其他安全组中的规则引用的安全组。如果您的安全组由自己的一个规则引用,则必须先删除该规则,然后才能删除安全组。

使用控制台删除安全组

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

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

  3. 选择一个安全组,然后依次选择操作删除安全组

  4. 选择 Yes, Delete

使用命令行删除安全组