

# 使用安全组控制指向 AWS 资源的流量
<a name="vpc-security-groups"></a>

*安全组*控制允许到达和离开与其关联资源的流量。例如，在将安全组与 EC2 实例关联后，它将控制该实例的入站和出站流量。

创建 VPC 时，它带有一个默认安全组。您可以为 VPC 创建额外的安全组，每个安全组都具有自己的入站和出站规则。您可以针对每条入站规则指定来源、端口范围和协议。您可以针对每条出站规则指定目的地、端口范围和协议。

下图显示了一个具有一个子网、一个互联网网关和一个安全组的 VPC。子网包含了一个 EC2 实例。将安全组分配给实例。安全组起到虚拟防火墙的作用。到达实例的唯一流量是得到安全组规则允许的流量。例如，如果安全组包含一条允许从您的网络到实例的 ICMP 流量的规则，则您可以从您的计算机对该实例进行 ping 操作。如果安全组未包含允许 SSH 流量的规则，则您无法使用 SSH 连接到您的实例。

![\[具有 2 个子网、2 个安全组的 VPC，子网中的服务器关联了不同的安全组\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-overview.png)


**Topics**
+ [安全组基本信息](#security-group-basics)
+ [安全组示例](#security-group-example-details)
+ [安全组规则](security-group-rules.md)
+ [默认安全组](default-security-group.md)
+ [创建安全组](creating-security-groups.md)
+ [配置安全组规则](working-with-security-group-rules.md)
+ [删除安全组](deleting-security-groups.md)
+ [将安全组与多个 VPC 关联](security-group-assoc.md)
+ [与 AWS Organizations 共享安全组](security-group-sharing.md)

**定价**  
使用安全组不收取任何额外费用。

## 安全组基本信息
<a name="security-group-basics"></a>
+ 如果使用[安全组 VPC 关联功能](security-group-assoc.md)将安全组关联到同一区域中的其他 VPC，则可以将安全组分配给与安全组在同一 VPC 中创建的资源或其他 VPC 中的资源。您还可以为单个资源分配多个安全组。
+ 创建安全组时，您必须为其提供名称和描述。以下规则适用：
  + 安全组名称在 VPC 中必须是唯一的。
  + 安全组名称不区分大小写。
  + 名称和描述的长度最多为 255 个字符。
  + 名称和描述只能使用以下字符：a-z、A-Z、0-9、空格和 .\$1-:/()\$1,@[]\$1=&;\$1\$1\$1\$1\$1。
  + 如果名称后面带有空格，我们在保存名称时会删除这些空格。例如，如果您输入“Test Security Group”作为名称，我们会将其存储为“Test Security Group”。
  + 安全组名称不能以 `sg-` 开头。
+ 安全组是有状态的。例如，如果您从实例发送请求，则无论入站安全组规则如何，都允许该请求的响应流量到达该实例。如果是为响应已允许的入站流量，则该响应可以离开实例，此时可忽略出站规则。
+ 安全组不会筛选发往和来自以下位置的流量：
  + Amazon 域名服务 (DNS)
  + Amazon 动态主机配置协议 (DHCP)
  + Amazon EC2 实例元数据
  + Amazon ECS 任务元数据端点
  + Windows 实例的许可证激活
  + Amazon Time Sync Service
  + 默认 VPC 路由器使用的预留 IP 地址
+ 系统对您为每个 VPC 创建的安全组数、向每个安全组添加的规则数以及与网络接口关联的安全组数设有配额。有关更多信息，请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)。

**最佳实践**
+ 仅授权特定 IAM 主体创建和修改安全组。
+ 创建所需的最小数量的安全组，以降低出错风险。使用每个安全组，对具有相似功能和安全要求的资源的访问权限进行管理。
+ 在为端口 22（SSH）或 3389（RDP）添加入站规则以便访问 EC2 实例时，仅授权特定 IP 地址范围。如果您指定 0.0.0.0/0（IPv4）和 ::/（IPv6），则任何人都可以使用指定协议从任何 IP 地址访问您的实例。
+ 请勿设置较大端口范围。确保通过每个端口的访问仅限于需要访问的源或目的地。
+ 您可以考虑建立网络 ACL，使其规则与您的安全组规则相似，以便为 VPC 添加额外安全层。有关安全组和网络 ACL 之间的差别的更多信息，请参见 [比较安全组和网络 ACL](infrastructure-security.md#VPC_Security_Comparison)。

## 安全组示例
<a name="security-group-example-details"></a>

以下示意图显示了具有两个安全组和两个子网的 VPC。子网 A 中的实例具有相同的连接要求，因此这些实例与安全组 1 相关联。子网 B 中的实例具有相同的连接要求，因此这些实例与安全组 2 相关联。安全组规则允许流量通过，如下所示：
+ 安全组 1 中的第一条入站规则允许从指定地址范围（例如，您自己网络中的范围）到子网 A 中实例的 SSH 流量。
+ 安全组 1 中的第二条入站规则允许子网 A 中的实例使用任何协议和端口进行相互通信。
+ 安全组 2 中的第一条入站规则允许子网 B 中的实例使用任何协议和端口进行相互通信。
+ 安全组 2 中的第二条入站规则允许子网 A 中的实例使用 SSH 与子网 B 中的实例进行通信。
+ 两个安全组都使用默认出站规则，以允许所有流量。

![\[在两个子网中包含了两个安全组和服务器的 VPC。子网 A 中的服务器与安全组 1 相关联。子网 B 中的服务器与安全组 2 相关联。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-details.png)


# 安全组规则
<a name="security-group-rules"></a>

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

您可以添加或删除安全组规则（又被称为*授权*或*撤销*入站或出站访问）。适用于入站数据流（进入）或出站数据流（离开）的规则。您可以授予对特定源或目标的访问权限。

**Topics**
+ [安全组规则基本信息](#security-group-rule-characteristics)
+ [安全组规则的组成部分](#security-group-rule-components)
+ [引用安全组](#security-group-referencing)
+ [安全组大小](#security-group-size)
+ [过时的安全组规则](#vpc-stale-security-group-rules)

## 安全组规则基本信息
<a name="security-group-rule-characteristics"></a>

以下是您的安全组规则的特征：
+ 您可以指定允许规则，但不可指定拒绝规则。
+ 当您首次创建安全组时，它没有入站规则。因此，在将入站规则添加到安全组之前，不允许入站流量。
+ 首次创建安全组时，它具有允许来自资源的所有出站流量的出站规则。您可以删除该规则并添加只允许特定出站流量的出站规则。如果您的安全组没有出站规则，则不允许出站流量。
+ 当您将多个安全组与一个资源相关联时，来自每个安全组的规则将聚合形成一组规则，用于确定是否允许访问。
+ 添加、更新或删除规则时，您的更改会自动应用于与安全组关联的所有资源。有关说明，请参阅[配置安全组规则](working-with-security-group-rules.md)。
+ 某些规则变更产生的影响可能会取决于跟踪流量的方式。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[连接跟踪](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)。
+ 当您创建安全组规则时，AWS 会将唯一 ID 分配给规则。当您使用 API 或 CLI 修改或删除某规则时，您可以使用该规则的 ID。

**限制**  
安全组无法阻止发送至 Route 53 Resolver 或来自其的 DNS 请求，Route 53 Resolver 有时称为“VPC\$12 IP 地址”（请参阅《Amazon Route 53 开发人员指南》**中的 [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)）或 [AmazonProvidedDNS](DHCPOptionSet.md)。要通过 Route 53 Resolver 筛选 DNS 请求，请使用 [Route 53 Resolver DNS Firewall](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html)。

## 安全组规则的组成部分
<a name="security-group-rule-components"></a>

以下是安全组入站和出站规则的组件：
+ **协议**：允许的协议。最常见的协议为 6 (TCP)、17 (UDP) 和 1 (ICMP)。
+ **端口范围**：对于 TCP、UDP 或自定义协议，允许的端口范围。您可以指定单个端口号（例如 `22`）或端口号范围（例如`7000-8000`）。
+ **ICMP 类型和代码**：对于 ICMP，ICMP 类型和代码。例如，对于 ICMP 回应请求使用类型 8，对 ICMPv6 回显请求使用键入 128。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[用于 ping/ICMP 的规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-ping)。
+ **源或目标**：允许的流量的源（入站规则）或目标（出站规则）。指定下列项之一：
  + 一个 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`。有关更多信息，请参阅 [托管前缀列表](managed-prefix-lists.md)。
  + 安全组的 ID。例如 `sg-1234567890abcdef0`。有关更多信息，请参阅 [引用安全组](#security-group-referencing)。
+ **（可选）描述**：您可以添加规则的说明；这可帮助您在以后识别它。描述的长度最多为 255 个字符。允许的字符包括 a-z、A-Z、0-9、空格和 .\$1-:/()\$1,@[]\$1=;\$1\$1\$1\$1\$1。

有关示例，请参阅《Amazon EC2 用户指南》**中[针对不同用例的安全组规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html)。

## 引用安全组
<a name="security-group-referencing"></a>

当您指定一个安全组作为规则的源或目标时，该规则会影响与安全组关联的所有实例。实例可以使用其私有 IP 地址，通过指定的协议和端口沿指定方向进行通信。

例如，下面的内容表示安全组的入站规则，该入站规则引用了安全组 sg-0abcdef1234567890。此规则允许来自与 sg-0abcdef1234567890 关联的实例的入站 SSH 流量。


| 来源 | 协议 | 端口范围 | 
| --- | --- | --- | 
| sg-0abcdef1234567890 | TCP | 22 | 

在安全组规则中引用安全组时，请注意以下几点：
+ 如果满足以下任一条件，则可以在其他安全组的入站规则中引用该安全组：
  + 与同一 VPC 关联的安全组。
  + 与安全组关联的 VPC 之间存在对等连接。
  + 与安全组关联的 VPC 之间存在中转网关。
+ 如果满足以下任一条件，则可以在出站规则中引用安全组：
  + 与同一 VPC 关联的安全组。
  + 与安全组关联的 VPC 之间存在对等连接。
+ 不得向引用安全组的安全组添加引用安全组中的任何规则。
+ 对于入站规则，与安全组关联的 EC2 实例可以接收来自与引用安全组关联的 EC2 实例的网络接口私有 IP 地址的入站流量。
+ 对于出站规则，与安全组关联的 EC2 实例可以向与引用安全组关联的 EC2 实例的网络接口私有 IP 地址发送出站流量。
+ 我们不授权引用的安全组执行以下操作：`AuthorizeSecurityGroupIngress`、`AuthorizeSecurityGroupEgress`、`RevokeSecurityGroupIngress` 和 `RevokeSecurityGroupEgress`。我们只检查安全组是否存在。这将产生以下结果：
  + 在这些操作的 IAM 策略中指定引用的安全组没有任何效果。
  + 当引用的安全组由另一个账户拥有时，所有者账户不会收到这些操作的 CloudTrail 事件。

**限制**

如果您将路由配置为通过中间设备在不同子网中的两个实例之间转发流量，则必须确保这两个实例的安全组允许流量在实例之间流动。每个实例的安全组必须引用另一个实例的私有 IP 地址或包含另一个实例的子网的 CIDR 范围作为源。如果您引用另一个实例的安全组作为源，则安全组不允许流量在实例之间流动。

**示例**

下图显示了一个在两个可用区内分布子网，此外还拥有一个互联网网关和一个应用程序负载均衡器的 VPC。每个可用区都有一个用于 Web 服务器的公有子网和一个用于数据库服务器的私有子网。负载均衡器、Web 服务器和数据库服务器有单独的安全组。创建以下安全组规则以允许流量。
+ 向负载均衡器安全组添加规则，以允许来自互联网的 HTTP 和 HTTPS 流量。来源是 0.0.0.0/0。
+ 向 Web 服务器的安全组添加规则，以仅允许来自负载均衡器的 HTTP 和 HTTPS 流量。来源是负载均衡器的安全组。
+ 向数据库服务器的安全组添加规则，以允许来自 Web 服务器的数据库请求。来源是 Web 服务器的安全组。

![\[包含 Web 和数据库服务器、安全组、互联网网关以及负载均衡器的架构\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-referencing.png)


## 安全组大小
<a name="security-group-size"></a>

源或目标的类型决定了将每条规则计入每个安全组可以拥有的最大规则数量的方式。
+ 引用 CIDR 块的规则计为一条规则。
+ 无论引用的安全组大小如何，引用其他安全组的规则均计为一条规则。
+ 引用客户托管式前缀列表的规则计为前缀列表的最大大小。例如，如果前缀列表的最大大小为 20，则引用此前缀列表的规则计为 20 条规则。
+ 引用 AWS 托管式前缀列表的规则计为前缀列表的权重。例如，如果前缀列表的权重为 10，则引用此前缀列表的规则计为 10 条规则。有关更多信息，请参阅 [可用的 AWS 托管前缀列表](working-with-aws-managed-prefix-lists.md#available-aws-managed-prefix-lists)。

## 过时的安全组规则
<a name="vpc-stale-security-group-rules"></a>

如果您的 VPC 具有与其他 VPC 的 VPC 对等连接，或者如果它使用其他账户共享的 VPC，则您的 VPC 中的安全组规则可引用该对等 VPC 或共享 VPC 中的安全组。这样，与所引用安全组关联的资源以及与进行引用的安全组关联的资源可以相互通信。有关更多信息，请参阅《Amazon VPC 对等指南》**中的[更新您的安全组以引用对等安全组](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html)。

如果安全组规则引用了对等 VPC 或共享 VPC 中的安全组，而共享 VPC 中的安全组或 VPC 对等连接已被删除，则该安全组规则将会标记为过时。与任何其他的安全组规则一样，您可以删除过时的安全组规则。

# 您的 VPC 的默认安全组
<a name="default-security-group"></a>

您的默认 VPC 和您创建的任何 VPC 都带有默认安全组。默认安全组的名称为“default”。

建议您为特定资源或资源组创建安全组，而不要使用默认安全组。然而如果您在创建时未将某些资源关联到安全组，我们会将其关联到默认安全组。例如，如果您在启动 EC2 实例时未指定安全组，则我们会将该实例关联到 VPC 的默认安全组。

## 默认安全组基本信息
<a name="default-security-group-basics"></a>
+ 您可以更改默认安全组的规则。
+ 您无法删除默认安全组。如果您尝试删除默认安全组，会显示以下错误代码：`Client.CannotDelete`。

## 默认规则
<a name="default-security-group-default-rules"></a>

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


| 来源 | 协议 | 端口范围 | 说明 | 
| --- | --- | --- | --- | 
| sg-1234567890abcdef0  | 全部 | 全部 | 允许来自分配给此安全组的所有资源的入站流量。源为此安全组的 ID。 | 

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


| 目标 | 协议 | 端口范围 | 描述 | 
| --- | --- | --- | --- | 
| 0.0.0.0/0 | All | All | 允许所有的出站 IPv4 流量。 | 
| ::/0 | All | All | 允许所有的出站 IPv6 流量。仅当 VPC 具有关联的 IPv6 CIDR 块时才添加此规则。 | 

## 示例
<a name="default-security-group-example"></a>

下图显示了一个具有一个默认安全组、一个互联网网关和一个 NAT 网关的 VPC。默认安全组仅包含其默认规则，并且与在 VPC 中运行的两个 EC2 实例相关联。在此场景中，每个实例都可以在所有端口和协议上接收来自另一个实例的入站流量。默认规则不允许这些实例接收来自互联网网关或 NAT 网关的流量。如果您的实例必须接收更多流量，则建议您使用所需规则创建安全组，并将新的安全组与实例关联，而不是与默认安全组。

![\[具有 2 个子网、1 个默认安全组、2 个 EC2 实例、互联网网关和 NAT 网关的 VPC\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/default-security-group.png)


# 为 VPC 创建安全组
<a name="creating-security-groups"></a>

您的虚拟私有云（VPC）带有默认的安全组。您可以创建额外的安全组。安全组只能与创建它的 VPC 中的资源结合使用。

在默认情况下，新安全组起初只有一条出站规则，即允许所有通信离开资源。您必须添加规则，以便允许任何入站数据流或限制出站数据流。您可以在创建安全组时添加安全组规则，也可以稍后再添加。有关更多信息，请参阅 [安全组规则](security-group-rules.md)。

**所需的权限**

在开始之前，请确保您拥有所需权限。有关更多信息，请参阅下列内容：
+ [管理安全组](vpc-policy-examples.md#vpc-security-groups-iam)
+ [管理安全组规则](vpc-policy-examples.md#vpc-security-group-rules-iam)

**使用控制台创建安全组**

1. 通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在导航窗格中，选择**安全组**。

1. 选择**Create security group**（创建安全组）。

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

1. 对于 **VPC**，请选择要在其中创建资源并将其与安全组关联的 VPC。

1. （可选）要添加入站规则，请选择**入站规则**。对于每条规则，请选择**添加规则**并指定协议、端口和来源。有关更多信息，请参阅 [配置安全组规则](working-with-security-group-rules.md)。

1. （可选）要添加出站规则，请选择**出站规则**。对于每条规则，请选择**添加规则**并指定协议、端口和目标。

1. （可选）若要添加标签，请选择 **Add new tag**（添加新标签），然后输入该标签的键和值。

1. 选择**创建安全组**。

**使用 AWS CLI 创建安全组**  
使用 [create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html) 命令。

此外，您可以通过复制现有安全组来创建新安全组。复制安全组时，我们会自动添加与原始安全组相同的入站和出站规则，也会使用与原始安全组相同的 VPC。您可以为新安全组输入名称和描述。您可以选择另一个 VPC，也可以根据需要修改入站和出站规则。不过，您无法将安全组从一个区域复制到另一区域。

**根据现有安全组创建安全组**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择一个安全组。

1. 依次选择**操作**、**复制到新安全组**。

1. 输入安全组的名称和描述。

1. （可选）根据需要选择另一个 VPC。

1. （可选）根据需要添加、删除或编辑安全组规则。

1. 选择**创建安全组**。

# 配置安全组规则
<a name="working-with-security-group-rules"></a>

创建安全组后，即可添加、更新或删除安全组的规则。在添加、更新或删除规则时，更改将自动应用于与安全组关联的资源。

**所需的权限**  
在开始之前，请确保您拥有所需权限。有关更多信息，请参阅 [管理安全组规则](vpc-policy-examples.md#vpc-security-group-rules-iam)。

**协议和端口**
+ 使用控制台，当您选择预定义的类型时，将为您指定**协议**和**端口范围**。要输入端口范围，必须选择以下自定义类型之一：**自定义 TCP** 或**自定义 UDP**。
+ 使用 AWS CLI，您可以使用 `--protocol` 和 `--port` 选项添加带有单个端口的单个规则。要添加多个规则或具有端口范围的规则，请改用 `--ip-permissions` 选项。

**来源和目标**
+ 使用控制台，您可以将以下内容指定为入站规则的源或出站规则的目标：
  + **自定义**：IPv4 CIDR 数据块、IPv6 CIDR 数据块、安全组或前缀列表。
  + **Anywhere-IPv4** – 0.0.0.0/0 IPv4 CIDR 数据块。
  + **Anywhere-IPv6** – ::/0 IPv6 CIDR 数据块。
  + **我的 IP** – 本地计算机的公有 IPv4 地址。
+ 使用 AWS CLI，您可以使用 `--cidr` 选项指定 IPv4 CIDR 数据块，也可以使用 `--source-group` 选项指定安全组。要指定前缀列表或 IPv6 CIDR 块，请使用 `--ip-permissions` 选项。

**警告**  
如果您选择 **Anywhere-IPv4**，则将允许来自所有 IPv4 地址的流量。如果您选择 **Anywhere-IPv6**，则将允许来自所有 IPv6 地址的流量。最佳做法是仅授权需要访问资源的特定 IP 地址范围。

**使用控制台配置安全组规则**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择安全组。

1. 要编辑入站规则，请从**操作**或**入站规则**选项卡中选择**编辑入站规则**。

   1. 要添加规则，请选择**添加规则**，再输入规则的类型、协议、端口和来源。

      如果类型为 TCP 或 UDP，则必须输入允许的端口范围。对于自定义 ICMP，您必须从 **Protocol**（协议）中选择 ICMP 类型名称，并从 **Port range**（端口范围）中选择代码名称（如果适用）。对于任何其他类型，则会为您配置协议和端口范围。

   1. 要更新规则，请根据需要更改规则的协议、描述和来源。但是，您无法更改来源类型。例如，若来源是 IPv4 CIDR 数据块，则无法指定 IPv6 CIDR 数据块、前缀列表或安全组。

   1. 要删除规则，请选择规则的**删除**按钮。

1. 要编辑出站规则，请从**操作**或**出站规则**选项卡中选择**编辑出站规则**。

   1. 要添加规则，请选择**添加规则**，再输入规则的类型、协议、端口和目标。您也可以输入可选描述。

      如果类型为 TCP 或 UDP，则必须输入允许的端口范围。对于自定义 ICMP，您必须从 **Protocol**（协议）中选择 ICMP 类型名称，并从 **Port range**（端口范围）中选择代码名称（如果适用）。对于任何其他类型，则会为您配置协议和端口范围。

   1. 要更新规则，请根据需要更改规则的协议、描述和来源。但是，您无法更改来源类型。例如，若来源是 IPv4 CIDR 数据块，则无法指定 IPv6 CIDR 数据块、前缀列表或安全组。

   1. 要删除规则，请选择规则的**删除**按钮。

1. 选择**保存规则**。

**使用 AWS CLI 配置安全组规则**
+ **添加** – 使用 [authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html) 和 [authorize-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html) 命令。
+ **删除** – 使用 [revoke-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-ingress.html) 和 [revoke-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-egress.html) 命令。
+ **修改** – 使用 [modify-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-security-group-rules.html)、[update-security-group-rule-descriptions-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/update-security-group-rule-descriptions-ingress.html) 和 [update-security-group-rule-descriptions-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/update-security-group-rule-descriptions-egress.html) 命令。

# 删除安全组
<a name="deleting-security-groups"></a>

使用完创建的安全组后，可以将其删除。

**要求**
+ 安全组无法与任何资源关联。
+ 其他安全组中的规则无法引用安全组。
+ 该安全组不能是 VPC 的默认安全组。

**使用控制台删除安全组**

1. 通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在导航窗格中，选择**安全组**。

1. 选择安全组，然后依次选择**操作**、**删除安全组**。

1. 如果选择了多个安全组，系统会提示您进行确认。如果某些安全组无法删除，我们会显示每个安全组的状态，表明是否会被删除。要确认删除操作，请输入**删除**。

1. 选择**删除**。

**使用 AWS CLI 删除安全组**  
使用 [delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html) 命令。

# 将安全组与多个 VPC 关联
<a name="security-group-assoc"></a>

如果您的工作负载在具有共同网络安全要求的多个 VPC 中运行，则可以使用安全组 VPC 关联功能将安全组与同一区域中的多个 VPC 关联。这样，您就可以在一个位置管理和维护账户中多个 VPC 的安全组。

![\[与两个 VPC 关联的安全组示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/sec-group-vpc-assoc.png)


上图显示包含两个 VPC 的 AWS 账户 A。每个 VPC 都有在私有子网中运行的工作负载。在这种情况下，VPC A 和 B 子网中的工作负载具有相同的网络流量要求，因此账户 A 可以使用安全组 VPC 关联功能将 VPC A 中的安全组与 VPC B 关联。对关联安全组进行的任何更新都会自动应用于 VPC B 子网中工作负载的流量。

**安全组 VPC 关联功能的要求**
+ 您必须拥有 VPC 或共享其中一个 VPC 子网才能将安全组与 VPC 关联。
+ VPC 和安全组必须位于同一 AWS 区域。
+ 您不能将默认安全组与其他 VPC 关联，也不能将安全组与默认 VPC 关联。
+ 安全组所有者和 VPC 所有者都可以查看安全组 VPC 关联。

**支持此功能的服务**
+ Amazon API Gateway（仅限 REST API）
+ AWS Auto Scaling
+ CloudFormation
+ Amazon EC2
+ Amazon EFS
+ Amazon EKS
+ Amazon FSx
+ AWS PrivateLink
+ Amazon Route 53
+ Elastic Load Balancing
  + 应用程序负载均衡器
  + 网络负载均衡器

## 将安全组与其他 VPC 关联
<a name="assoc-sg"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 将安全组与 VPC 关联。

------
#### [ AWS Management Console ]

**要将安全组与其他 VPC 关联**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **VPC 关联**选项卡。

1. 选择 **Associate VPC (关联 VPC)**。

1. 在 **VPC ID** 下，选择要与安全组关联的 VPC。

1. 选择 **Associate VPC (关联 VPC)**。

------
#### [ Command line ]

**要将安全组与其他 VPC 关联**

1. 使用 [associate-security-group-vpc](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/associate-security-group-vpc.html) 创建 VPC 关联。

1. 使用 [describe-security-group-vpc-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-group-vpc-associations.html) 查看 VPC 关联的状态，然后等待该状态变为 `associated`。

------

VPC 现已与安全组关联。

 例如，将 VPC 与安全组关联后，您可以[在 VPC 中启动一个实例并选择这一新的安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)，或者[在现有安全组规则中引用此安全组](security-group-rules.md#security-group-referencing)。

## 取消安全组与其他 VPC 的关联
<a name="disassoc-sg"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 取消安全组与 VPC 的关联。如果您的目标是删除安全组，则可能需要这样做。如果安全组已关联，则无法将其删除。仅当关联的 VPC 中没有使用该安全组的网络接口时，您才能取消与该安全组的关联。

------
#### [ AWS Management Console ]

**要取消安全组与 VPC 的关联**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **VPC 关联**选项卡。

1. 选择**取消关联 VPC**。

1. 在 **VPC ID** 下，选择要与安全组取消关联的 VPC。

1. 选择**取消关联 VPC**。

1. 在 VPC 关联选项卡中查看取消关联的**状态**，然后等待该状态变为 `disassociated`。

------
#### [ Command line ]

**要取消安全组与 VPC 的关联**

1. 使用 [disassociate-security-group-vpc](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/disassociate-security-group-vpc.html) 取消与 VPC 的关联。

1. 使用 [describe-security-group-vpc-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-group-vpc-associations.html) 查看 VPC 取消关联的状态，然后等待该状态变为 `disassociated`。

------

VPC 现已取消与安全组的关联。

# 与 AWS Organizations 共享安全组
<a name="security-group-sharing"></a>

共享安全组功能使您能够与同一 AWS 区域中的其他 AWS Organizations 账户共享安全组，并使安全组可供这些账户使用。

下图演示如何使用共享安全组功能来简化 AWS Organizations 中的跨账户安全组管理：

![\[与共享 VPC 子网中的其他账户共享安全组的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/sec-group-sharing.png)


此示意图显示属于同一组织的三个账户。账户 A 与账户 B 和账户 C 共享一个 VPC 子网。账户 A 使用共享安全组功能与账户 B 和账户 C 共享该安全组。然后，账户 B 和账户 C 在共享子网中启动实例时使用该安全组。这使账户 A 也能够管理该安全组；对安全组进行的任何更新都会应用于账户 B 和账户 C 在共享 VPC 子网中运行的资源。

**共享安全组功能的要求**
+ 此功能仅适用于 AWS Organizations 中同一组织的账户。必须在 AWS Organizations 中启用[资源共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)。
+ 共享安全组的账户必须同时拥有 VPC 和安全组。
+ 您不能共享默认安全组。
+ 您无法共享位于默认 VPC 中的安全组。
+ 参与者账户可以在共享 VPC 中创建安全组，但无法共享这些安全组。
+ IAM 主体需要一组最低权限才能与 AWS RAM 共享一个安全组。使用 `AmazonEC2FullAccess` 和 `AWSResourceAccessManagerFullAccess` 托管 IAM 策略，确保 IAM 主体拥有共享和使用所共享安全组所需的权限。如果使用自定义 IAM 策略，则需要进行 `c2:PutResourcePolicy` 和 `ec2:DeleteResourcePolicy` 操作。这些是仅限权限的 IAM 操作。如果 IAM 主体未获得这些权限，则在尝试使用 AWS RAM 共享安全组时将出错。

**支持此功能的服务**
+ Amazon API Gateway
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS
+ Amazon EKS
+ Amazon EMR
+ Amazon FSx
+ Amazon ElastiCache
+ AWS Elastic Beanstalk
+ AWS Glue
+ Amazon MQ
+ Amazon SageMaker AI
+ Elastic Load Balancing
  + 应用程序负载均衡器
  + 网络负载均衡器

**此功能如何影响现有的配额**

[安全组配额](amazon-vpc-limits.md#vpc-limits-security-groups)适用。但是，对于“每个网络接口的安全组数”配额，如果参与者在弹性网络接口（ENI）上同时使用自有和共享的组，则所有者和参与者的最低配额适用。

演示此功能如何影响配额的示例：
+ 所有者账户配额：每个接口 4 个安全组
+ 参与者账户配额：每个接口 5 个安全组。
+ 所有者与参与者共享的组 SG-O1、SG-O2、SG-O3、SG-O4、SG-O5。参与者在 VPC 中已经有自己的组：SG-P1、SG-P2、SG-P3、SG-P4、SG-P5。
+ 如果参与者创建 ENI 并且仅使用自己的组，则他们可以关联所有 5 个安全组（SG-P1、SG-P2、SG-P3、SG-P4、SG-P5），因为这是他们的配额。
+ 如果参与者创建 ENI 并在其上使用任何共享的组，则他们最多只能关联 4 个组。在这种情况下，此类 ENI 的配额是所有者和参与者的最低配额。可能的有效配置将如下所示：
  + SG-O1、SG-P1、SG-P2、SG-P3
  + SG-O1、SG-O2、SG-O3、SG-O4

## 共享安全组
<a name="share-sg-org"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 与组织中的其他账户共享安全组。

------
#### [ AWS Management Console ]

**要共享安全组**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **Sharing (共享)** 选项卡。

1. 选择**共享安全组**。

1. 选择**创建资源共享**。这样，AWS RAM 控制台就会打开，您将在其中为安全组创建资源共享。

1. 输入资源共享的**名称**。

1. 在**资源 – 可选**下，选择**安全组**。

1. 选择安全组。该安全组不能是默认安全组，也不能与默认 VPC 关联。

1. 选择**下一步**。

1. 查看允许主体执行的操作，然后选择**下一步**。

1. 在**主体 – 可选**下，选择**仅允许在企业内共享**。

1. 在**主体**下，选择以下主体类型之一，然后输入相应的数字：
   + **AWS 账户**：您的组织中账户的账号。
   + **组织**：AWS Organizations ID。
   + **组织单元 (OU)**：组织中 OU 的 ID。
   + **IAM 角色**：IAM 角色的 ARN。创建该角色的账户必须与创建此资源共享的账户属于同一组织。
   + **IAM 用户**：IAM 用户的 ARN。创建该用户的账户必须与创建此资源共享的账户属于同一组织。
   + **服务主体**：您不能与服务主体共享安全组。

1. 选择**添加**。

1. 选择**下一步**。

1. 选择**创建资源共享**。

1. 在**共享资源**下，等待看到**状态**为 `Associated`。如果安全组关联失败，则可能是由于上面列出的限制之一所致。查看安全组的详细信息以及详细信息页面上的**共享**选项卡，以查看与安全组不可共享的原因相关的所有消息。

1. 返回 VPC 控制台安全组列表。

1. 选择您共享的安全组。

1. 选择 **Sharing (共享)** 选项卡。您的 AWS RAM 资源应该在其中显示。如果未显示，则资源共享创建可能失败，您可能需要重新创建。

------
#### [ Command line ]

**要共享安全组**

1. 您必须先为想要与 AWS RAM 共享的安全组创建资源共享。有关如何使用 AWS CLI 创建与 AWS RAM 的资源共享的步骤，请参阅《AWS RAM User Guide》**中的 [Creating a resource share in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html) 

1. 要查看创建的资源共享关联，请使用 [get-resource-share-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/get-resource-share-associations.html)。

------

安全组现已共享。您可以在同一 VPC 内的共享子网中[启动 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)时选择安全组。

## 停止共享安全组
<a name="stop-share-sg-org"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 停止与组织中的其他账户共享安全组。

------
#### [ AWS Management Console ]

**要停止共享安全组**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **Sharing (共享)** 选项卡。

1. 选择安全组资源共享，然后选择**停止共享**。

1. 选择**是的，停止共享**。

------
#### [ Command line ]

**要停止共享安全组**

使用 [delete-resource-share](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/delete-resource-share.html) 删除资源共享。

------

该安全组不再共享。在所有者停止共享安全组后，以下规则适用：
+ 现有的参与者弹性网络接口（ENI）将继续获取对已取消共享的安全组进行的任何安全组规则更新。取消共享只会阻止参与者与已取消共享组创建新关联。
+ 参与者无法再将已取消共享的安全组与其拥有的任何 ENI 关联。
+ 参与者可以描述和删除仍与已取消共享安全组关联的 ENI。
+ 如果参与者仍具有与已取消共享的安全组关联的 ENI，则所有者无法删除已取消共享的安全组。仅当参与者从其所有 ENI 取消关联（删除）安全组后，所有者才能删除该安全组。
+ 参与者不能使用与非共享安全组关联的 ENI 启动新的 EC2 实例。