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: sg-058bd1ef730091911 (自己)
Protocol: ALL
Port: ALL

在安全组规则中,将 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)。