

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

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

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

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

![\[具有 2 个子网、2 个安全组的 VPC，子网中的服务器关联了不同的安全组\]](http://docs.amazonaws.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)
+ [与 Amazon 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.amazonaws.cn/vpc/latest/userguide/images/security-group-details.png)
