安全组规则
安全组的规则控制允许达到与该安全组相关联资源的入站流量。这些规则还控制允许离开实例的出站流量。
您可以添加或删除安全组规则(又被称为授权或撤销入站或出站访问)。适用于入站数据流(进入)或出站数据流(离开)的规则。您可以授予对特定源或目标的访问权限。
安全组规则基本信息
-
您可以指定允许规则,但不可指定拒绝规则。
-
当您首次创建安全组时,它没有入站规则。因此,在将入站规则添加到安全组之前,不允许入站流量。
-
首次创建安全组时,它具有允许来自资源的所有出站流量的出站规则。您可以删除该规则并添加只允许特定出站流量的出站规则。如果您的安全组没有出站规则,则不允许出站流量。
-
当您将多个安全组与一个资源相关联时,来自每个安全组的规则将聚合形成一组规则,用于确定是否允许访问。
-
添加、更新或删除规则时,您的更改会自动应用于与安全组关联的所有资源。某些规则变更产生的影响可能会取决于跟踪流量的方式。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的连接跟踪。
-
当您创建安全组规则时,Amazon 会将唯一 ID 分配给规则。当您使用 API 或 CLI 修改或删除某规则时,您可以使用该规则的 ID。
限制
安全组无法阻止发送至 Route 53 Resolver 或来自其的 DNS 请求,Route 53 Resolver 有时称为“VPC+2 IP 地址”(请参阅《Amazon Route 53 开发人员指南》中的Amazon Route 53 Resolver)或 AmazonProvidedDNS。要通过 Route 53 Resolver 筛选 DNS 请求,请使用 Route 53 Resolver DNS Firewall。
安全组规则的组成部分
-
协议:允许的协议。最常见的协议为 6 (TCP)、17 (UDP) 和 1 (ICMP)。
-
端口范围:对于 TCP、UDP 或自定义协议,允许的端口范围。您可以指定单个端口号(例如
22
)或端口号范围(例如7000-8000
)。 -
ICMP 类型和代码:对于 ICMP,ICMP 类型和代码。例如,对于 ICMP 回应请求使用类型 8,对 ICMPv6 回显请求使用键入 128。
-
源或目标:允许的流量的源(入站规则)或目标(出站规则)。指定下列项之一:
-
一个 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
。有关更多信息,请参阅 使用托管式前缀列表将 CIDR 块分组。 -
安全组的 ID。例如,
sg-1234567890abcdef0
。有关更多信息,请参阅 引用安全组。
-
-
(可选)描述:您可以添加规则的说明;这可帮助您在以后识别它。描述的长度最多为 255 个字符。允许的字符包括 a-z、A-Z、0-9、空格和 ._-:/()#,@[]+=;{}!$*。
引用安全组
当您指定一个安全组作为规则的源或目标时,该规则会影响与安全组关联的所有实例。实例可以使用其私有 IP 地址,通过指定的协议和端口沿指定方向进行通信。
例如,下面的内容表示安全组的入站规则,该入站规则引用了安全组 sg-0abcdef1234567890。此规则允许来自与 sg-0abcdef1234567890 关联的实例的入站 SSH 流量。
来源 | 协议 | 端口范围 |
---|---|---|
sg-0abcdef1234567890 |
TCP | 22 |
在安全组规则中引用安全组时,请注意以下几点:
-
两个安全组必须属于同一 VPC 或对等 VPC。
-
不得向引用安全组的安全组添加引用安全组中的任何规则。
-
对于入站规则,与安全组关联的 EC2 实例可以接收来自与引用安全组关联的 EC2 实例的私有 IP 地址的入站流量。
-
对于出站规则,与安全组关联的 EC2 实例可以向与引用安全组关联的 EC2 实例的私有 IP 地址发送出站流量。
限制
如果您将路由配置为通过中间设备在不同子网中的两个实例之间转发流量,则必须确保这两个实例的安全组允许流量在实例之间流动。每个实例的安全组必须引用另一个实例的私有 IP 地址或包含另一个实例的子网的 CIDR 范围作为源。如果您引用另一个实例的安全组作为源,则安全组不允许流量在实例之间流动。
示例
下图显示了一个在两个可用区内分布子网,此外还拥有一个互联网网关和一个应用程序负载均衡器的 VPC。每个可用区都有一个用于 Web 服务器的公有子网和一个用于数据库服务器的私有子网。负载均衡器、Web 服务器和数据库服务器有单独的安全组。创建以下安全组规则以允许流量。
-
向负载均衡器安全组添加规则,以允许来自互联网的 HTTP 和 HTTPS 流量。来源是 0.0.0.0/0。
-
向 Web 服务器的安全组添加规则,以仅允许来自负载均衡器的 HTTP 和 HTTPS 流量。来源是负载均衡器的安全组。
-
向数据库服务器的安全组添加规则,以允许来自 Web 服务器的数据库请求。来源是 Web 服务器的安全组。
安全组大小
源或目标的类型决定了将每条规则计入每个安全组可以拥有的最大规则数量的方式。
-
引用 CIDR 块的规则计为一条规则。
-
无论引用的安全组大小如何,引用其他安全组的规则均计为一条规则。
-
引用客户托管式前缀列表的规则计为前缀列表的最大大小。例如,如果前缀列表的最大大小为 20,则引用此前缀列表的规则计为 20 条规则。
-
引用 Amazon 托管式前缀列表的规则计为前缀列表的权重。例如,如果前缀列表的权重为 10,则引用此前缀列表的规则计为 10 条规则。有关更多信息,请参阅 可用的 Amazon 托管前缀列表。
过时的安全组规则
如果您的 VPC 具有与其他 VPC 的 VPC 对等连接,或者如果它使用其他账户共享的 VPC,则您的 VPC 中的安全组规则可引用该对等 VPC 或共享 VPC 中的安全组。这样,与所引用安全组关联的资源以及与进行引用的安全组关联的资源可以相互通信。
如果删除了共享 VPC 中的安全组,或者删除了 VPC 对等连接,则安全组规则将会标记为过时。与任何其他的安全组规则一样,您可以删除过时的安全组规则。有关更多信息,请参阅《Amazon VPC 对等连接指南》中的使用过时的安全组规则。
使用安全组规则
以下任务说明了如何使用安全组规则。
所需的权限
向安全组添加规则
当您向安全组添加规则时,这一新规则会自动应用于与该安全组关联的任何资源。
如果您有 VPC 对等连接,则可以从对等 VPC 中引用安全组作为您的安全组规则中的源或目标。有关更多信息,请参阅 Amazon VPC 对等连接指南中的更新安全组以引用对等 VPC 安全组。
有关管理安全组规则所需权限的信息,请参阅 管理安全组规则。
警告
如果您选择 Anywhere-IPv4,则将允许来自所有 IPv4 地址的流量。如果您选择 Anywhere-IPv6,则将允许来自所有 IPv6 地址的流量。如果为端口 22(SSH)或 3389(RDP)添加规则,则系统仅授权特定的 IP 地址范围访问您的实例。
使用控制台添加规则
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Security Groups(安全组)。
-
选择安全组。
-
依次选择 Actions(操作)、Edit inbound rules(编辑入站规则),或 Actions(操作)、Edit outbound rules(编辑出站规则)。
-
对于每一条规则,选择 Add rule(添加规则),然后执行以下操作:
-
对于Type(类型),选择要允许的协议类型。
-
对于 TCP 或 UDP,您必须输入允许的端口范围。
-
对于自定义 ICMP,您必须从 Protocol(协议)中选择 ICMP 类型名称,并从 Port range(端口范围)中选择代码名称(如果适用)。
-
对于任何其他类型,则会自动配置协议和端口范围。
-
-
对于 Source type(源类型)(入站规则)或 Destination type(目的地类型)(出站规则),请执行以下操作之一以允许流量:
-
选择 Custom(自定义),然后以 CIDR 表示法输入 IP 地址、CIDR 块、其他安全组或前缀列表。
-
选择 Anywhere-IPv4 可允许来自任何 IPv4 地址(入站规则)的流量,或允许流量到达所有 IPv4 地址(出站规则)。这会自动为 0.0.0.0/0 IPv4 CIDR 块添加规则。
-
选择 Anywhere-IPv6 可允许来自任何 IPv6 地址(入站规则)的流量,或允许流量到达所有 IPv6 地址(出站规则)。这会自动为 ::/0 IPv6 CIDR 块添加规则。
-
选择 My IP(我的 IP)以仅允许来自(入站规则)或流向(出站规则)您本地计算机的公有 IPv4 地址的流量。
-
-
(可选)对于 Description(描述),指定规则的简单描述。
-
-
选择 Save rules(保存规则)。
使用 Amazon CLI 向安全组添加规则
使用 authorize-security-group-ingress 和 authorize-security-group-egress 命令。
更新安全组规则
当您更新规则时,更新的规则将自动应用于与安全组关联的任何资源。
有关管理安全组规则所需权限的信息,请参阅 管理安全组规则。
使用控制台更新规则
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Security Groups(安全组)。
-
选择安全组。
-
依次选择 Actions(操作)、Edit inbound rules(编辑入站规则),或 Actions(操作)、Edit outbound rules(编辑出站规则)。
-
根据需要更新规则。
-
选择 Save rules(保存规则)。
使用 Amazon CLI 更新安全组规则
使用 modify-security-group-rules、update-security-group-rule-descriptions-ingress 和 update-security-group-rule-descriptions-egress 命令。
为安全组规则添加标签
向资源添加标签以帮助整理和识别资源,例如,按用途、拥有者或环境。您可以为安全组规则添加标签。每个安全组规则的标签键必须是唯一的。如果您添加的标签中的键已经与安全组关联,它将更新该标签的值。
使用控制台为规则添加标签
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Security Groups(安全组)。
-
选择安全组。
-
在 Inbound rules(入站规则)或 Outbound rules(出站规则)选项卡上,选中规则的复选框,然后选择 Manage tags(管理标签)。
-
Manage tags(管理标签)页面显示分配给规则的所有标签。要添加标签,请选择 Add tag(添加标签),然后输入标签键和值。要删除标签,请选择要删除的标签旁边的 Remove(删除)。
-
选择 Save changes(保存更改)。
使用 Amazon CLI 标记规则
使用 create-tags 命令。
删除安全组规则
当您从安全组中删除规则时,此更改会自动应用于与该安全组关联的任何实例。
使用控制台更新安全组规则
通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/
。 -
在导航窗格中,选择 Security Groups(安全组)。
-
选择安全组。
-
选择 Actionis (操作),然后选择 Edit inbound rules (编辑入站规则) 以删除入站规则,或选择 Edit outbound rules (编辑出站规则) 以删除出站规则。
-
选择要删除的规则旁边的 Delete (删除) 按钮。
-
选择 Save rules (保存规则)。或者选择预览更改,查看您的更改,然后选择确认。
使用 Amazon CLI 删除安全组规则
使用 revoke-security-group-ingress 和 revoke-security-group-egress 命令。
示例规则
Web 服务器
以下是 Web 服务器安全组的示例规则。Web 服务器可以接收来自所有 IPv4 和 IPv6 地址的 HTTP 及 HTTPS 流量,并将 SQL 或 MySQL 流量发送到数据库服务器。
警告
在为端口 22(SSH)或 3389(RDP)添加规则以便访问 EC2 实例时,我们建议您仅授权特定 IP 地址范围。如果您指定 0.0.0.0/0(IPv4)和 ::/(IPv6),则任何人都可以使用指定协议从任何 IP 地址访问您的实例。
入站 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
源 | 协议 | 端口范围 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0.0.0.0/0 |
TCP |
80 |
允许从所有 IPv4 地址进行入站 HTTP 访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
::/0 | TCP | 80 | 允许从所有 IPv6 地址进行入站 HTTP 访问 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0.0.0.0/0 |
TCP |
443 |
允许从所有 IPv4 地址进行入站 HTTPS 访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
::/0 | TCP | 443 | 允许从所有 IPv6 地址进行入站 HTTPS 访问 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
您网络的公有 IPv4 地址范围 |
TCP |
22 |
(可选)允许来自您网络中 IPv4 IP 地址的入站 SSH 访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
您网络的 IPv6 地址范围 |
TCP | 22 | (可选)允许来自您网络中 IPv6 IP 地址的入站 SSH 访问 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
您网络的公有 IPv4 地址范围 |
TCP |
3389 |
(可选)允许来自您网络中 IPv4 IP 地址的入站 RDP 访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
您网络的 IPv6 地址范围 |
TCP | 3389 | (可选)允许来自您网络中 IPv6 IP 地址的入站 RDP 访问 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
此安全组的 ID |
全部 | 全部 | (可选)允许与此安全组相关联的其他服务器的入站流量 |
出站 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
目的地 | 协议 | 端口范围 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
运行 Microsoft SQL Server 的实例的安全组 ID |
TCP |
1433 |
允许出站 Microsoft SQL Server 访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
运行 MySQL 的实例的安全组 ID |
TCP |
3306 |
允许出站 MySQL 访问 |
数据库服务器
数据库服务器需要有允许入站特定协议的规则,例如 MySQL 或 Microsoft SQL Server。有关示例,请参阅《Amazon EC2 用户指南》中的 数据库服务器规则。有关 Amazon RDS 数据库实例的安全组的更多信息,请参阅 Amazon RDS 用户指南 中的使用安全组控制访问。
排查可达性问题
Reachability Analyzer 是一款静态配置分析工具。使用 Reachability Analyzer 可分析和调试 VPC 中两个资源之间的网络可达性。如果可以访问这些资源,则 Reachability Analyzer 会生成有关这些资源间虚拟路径的逐跳详细信息,否则会确定障碍组件。例如,它可以识别缺失或配置错误的安全组规则。
有关更多信息,请参阅 Reachability Analyzer 角色指南。