如何配置AWS EKS以实现Pod与外部服务间的TLS/SSL流量加密?
配置AWS EKS实现Pod与外部服务(RDS/MSK)的TLS/SSL加密
Pod与AWS外部服务的TLS加密核心是让Pod内应用信任服务端CA证书,同时服务端启用TLS,客户端配置加密连接。以下分场景说明具体配置步骤:
一、针对RDS的配置
开启RDS的TLS强制加密
创建或修改RDS实例时,在"连接"选项中勾选"Require SSL",确保所有连接必须使用TLS。AWS RDS默认使用自有区域CA证书,也支持自定义CA。将RDS CA证书导入EKS集群
下载对应区域的RDS CA证书包(如us-east-1-bundle.pem),通过ConfigMap挂载到Pod:kubectl create configmap rds-ca --from-file=rds-ca.pem=./us-east-1-bundle.pem在Deployment中挂载证书
修改应用Deployment,将ConfigMap挂载到容器内的证书目录,示例:spec: containers: - name: my-app volumeMounts: - name: rds-ca-volume mountPath: /etc/ssl/rds readOnly: true volumes: - name: rds-ca-volume configMap: name: rds-ca配置应用连接字符串
以PostgreSQL为例,连接串需指定SSL模式和CA证书路径:postgresql://db-user:db-pass@rds-endpoint:5432/db-name?sslmode=verify-full&sslrootcert=/etc/ssl/rds/rds-ca.pemsslmode=verify-full会验证证书的有效性和域名匹配,避免中间人攻击。
二、针对MSK的配置
启用MSK集群的TLS加密
创建MSK集群时,选择"TLS"作为客户端加密协议,同时可搭配IAM/SASL认证增强安全性。MSK默认使用AWS颁发的CA证书。获取并挂载MSK CA证书
多数基础镜像(如官方Java、Python镜像)已信任Amazon根CA,若需单独挂载,可下载Amazon根CA后创建ConfigMap挂载到Pod:kubectl create configmap msk-ca --from-file=amazon-root-ca.pem=./amazon-root-ca.pem配置Kafka客户端
以librdkafka为例,在客户端配置中指定TLS协议:bootstrap.servers=<msk-bootstrap-brokers>:9094 security.protocol=SSL ssl.ca.location=/etc/ssl/msk/amazon-root-ca.pem若镜像已信任Amazon根CA,可省略
ssl.ca.location,直接设置security.protocol=SSL。
三、通用最佳实践
- 证书安全管理:若需频繁更新证书,推荐使用AWS Secrets Manager存储证书,通过EKS Secrets Store CSI Driver挂载到Pod,避免明文存储。
- 自定义信任存储:对于Java应用,可生成包含所需CA的自定义
cacerts文件,挂载后通过JVM参数指定:JAVA_OPTS=-Djavax.net.ssl.trustStore=/path/to/custom/cacerts - 验证连接有效性:在Pod内通过
openssl测试TLS连接:
若返回openssl s_client -connect <service-endpoint>:<port> -CAfile /path/to/ca.pemVerify return code: 0 (ok),则说明加密连接正常。 - 安全组配置:确保EKS节点安全组允许访问RDS/MSK的TLS端口(如RDS 5432、MSK 9094)。
内容的提问来源于stack exchange,提问作者AndCode
相关产品推荐
相关产品推荐

