AWS Security Group(安全组)
AWS 里 安全组(Security Group, SG)不是“防火墙规则表”,而是一套 关系型访问控制架构
安全组是在 网络接口 (ENI) 级别运行的,而不是在子网级别。这意味着即使两个实例在同一个子网内,如果它们的安全组规则不允许通信,它们也无法互相访问。
AWS 安全组(Security Group, SG)有以下关键特性
| 关键特性 | 说明 |
|---|---|
| 有状态 (Stateful) | 如果你允许入站请求,响应流量会自动允许流出,不受出站规则限制。 |
| 白名单机制 | 默认拒绝所有流量。你只能添加“允许”规则,不能设置“拒绝”规则。 |
| 即时生效 | 修改规则后,变更会立即应用到所有关联的资源上。 |
| 拓扑关系 | 安全组之间可以 互相引用,形成拓扑关系。也可以包含 自引用规则(self-referencing SG rule),在规则中引用自身安全组 |
安全组可以绑定到:
EC2 实例
ENI(弹性网卡)
ALB / NLB
RDS
EKS Pod(通过 ENI / SG for Pod)
📌 一个资源可以绑多个 SG,多个 SG 规则没有顺序概念
📌 一个 SG 也可以被多个资源复用
引用安全组作为源(Security Group Referencing)
这是 AWS 架构设计中最优雅的功能之一。在设置规则时,源(Source)不仅可以是 IP 地址(如 10.0.0.5/32),还可以是 另一个安全组 ID 。典型场景如下:
场景 :Web 层服务器需要访问数据库层。为 Web 层服务器创建一个安全组,如
sg-web-servers做法 :在数据库安全组中添加规则:允许来自安全组
sg-web-servers的 3306 端口访问。好处 :当 Web 层实例由于自动缩容(Auto Scaling)增加或减少时,你不需要手动更新 IP 地址列表,权限会自动随安全组标签流转。不关心 IP 变化,不关心实例扩缩容,只关心 角色之间的通信关系
AWS EKS Security Group
AWS EKS 默认的 Security Group 如下图所示:
其中只包含了一条规则,即允许所有来源于 安全组自己 的流量, 任何挂了这个安全组的 ENI,可以无条件互相通信 ,这是一条 自引用规则(self-referencing SG rule) 。
Inbound: |
在安全组规则中,将 Source(源) 设置为自身的 Security Group ID ,其本质含义是:
凡是关联了这个安全组的资源,彼此之间可以无障碍通信
这正是 AWS 实现集群内部成员相互信任的核心手段。
在 EKS 的上下文中,这主要解决了以下通信需求:
- 控制平面与工作节点通信 :EKS 的控制平面(Master Nodes)和工作节点(Worker Nodes)都需要关联这个安全组。
- Pod 间通信 :某些核心组件(如 kubelet 与 API Server 的交互)需要跨节点通信。
- EFA (Elastic Fabric Adapter) 支持 :正如你截图中右侧 Description 提到的“Allows EFA traffic…”,EFA 高性能网络通常要求节点间拥有全开放的内网访问权限,以便进行极低延迟的数据交换。
这种配置比写死 IP 地址要高级得多,因为无论你的 EKS 集群如何扩容(增加 Node),新节点只要关联了这个 SG ID,就自动获得了进入“信任圈”的通行证。
EKS API Server Endpoint ( https://3F54290E45FB092995.sk1.ap-east-1.eks.amazonaws.com )实际上是 AWS 在你的 VPC 内部创建的 条件网络接口 (Cross-account ENI)。