如何配置AWS Firewall规则允许EKS集群访问EC2上的数据库且不开放公网访问
EKS集群访问EC2托管数据库的安全组配置方案
核心逻辑是通过AWS安全组的资源引用能力配置访问规则,完全不需要开放公网权限,仅允许EKS侧指定资源访问数据库。
1. 确认EKS侧需要放行的安全组
根据你的集群部署模式,选择对应的安全组即可:
- 托管节点组模式:使用EKS集群默认的集群安全组(名称格式一般为
eks-cluster-sg-<集群名称>-<随机后缀>),或者你自定义绑定给节点实例的安全组 - Fargate无节点模式:使用EKS Fargate Pod默认关联的安全组(名称格式一般为
eks-fargate-sg-<集群名称>-<随机后缀>) - 已开启Pod安全组功能:直接使用你绑定给数据库访问工作负载的Pod专属安全组,权限粒度更精细
2. 配置数据库EC2的安全组入站规则
打开数据库EC2实例绑定的安全组配置页,添加如下入站规则:
- 端口范围:填写你的数据库服务端口,比如MySQL填
3306、PostgreSQL填5432 - 协议:默认
TCP即可 - 源地址:不要填写IP段,直接选择上一步拿到的EKS侧安全组ID作为源
- 描述:可选填写
EKS集群内部访问数据库,方便后续运维识别
安全组之间的引用是AWS原生的访问控制能力,只有关联了对应源安全组的资源才能命中这条规则,完全不会开放给公网,符合最小权限原则。
3. 连通性验证
你可以在EKS集群中启动临时Pod验证连通性,参考命令:
kubectl run -it --rm db-conn-test --image=busybox:1.36 -- nc -zv <数据库EC2内网IP> <数据库端口>
如果返回open或者succeeded提示,说明配置生效。
可选优化建议
- 若仅部分工作负载需要访问数据库,建议开启EKS的Security Groups for Pods功能,仅给对应工作负载绑定专用安全组,数据库安全组仅放行该Pod安全组,进一步收窄访问范围
- 建议不要给数据库EC2实例分配公网IP,所有访问均走VPC内网链路,完全规避公网暴露风险
内容的提问来源于stack exchange,提问作者Tim Holum
相关产品推荐
相关产品推荐

