You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS CDK部署后,Lambda访问RDS PostgreSQL遇pg_hba.conf加密错误排查

问题排查与修复

1. Lambda未部署在VPC内

当前代码创建了Lambda的安全组createProjectFunctionSG,但Lambda函数本身未配置vpc和securityGroups参数,导致Lambda运行在VPC外的公共网络,无法通过VPC内的安全组规则访问RDS,同时触发PostgreSQL的加密连接限制。

修复步骤:创建Lambda时指定VPC、子网和安全组:

const createProjectFunction = new lambda.Function(this, 'CreateProject', {
  // 保留原有配置
  vpc: vpc,
  vpcSubnets: {
    subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS // 推荐使用私有子网,提升安全性
  },
  securityGroups: [createProjectFunctionSG],
});

2. PostgreSQL连接未启用SSL

错误信息中的no encryption表明Lambda连接时未使用SSL,而AWS RDS PostgreSQL默认强制要求SSL连接(尤其是部署在公有子网的实例)。

修复步骤:在Lambda的psycopg2连接中添加SSL参数:

conn = psycopg2.connect(
    user='postgres',
    host=postgres_db_endpoint,
    database=postgres_db_name,
    password=password,
    port=5432,
    sslmode='require'  # 启用强制SSL连接
)

3. 安全组规则优化(可选但推荐)

当前Postgres安全组添加了Peer.anyIpv4()的入站规则,允许所有公网IP访问,存在安全风险。既然Lambda部署在VPC内,应限制仅允许Lambda的安全组或VPC内部流量访问:

// 替换原有anyIpv4规则,仅允许Lambda安全组访问
postgresSecurityGroup.addIngressRule(createProjectFunctionSG, Port.tcp(5432));

4. 确认RDS强制SSL配置(可选)

可以在CDK中显式配置RDS的rds.force_ssl参数,确保强制启用SSL:

const postgresDb = new rds.DatabaseInstance(this, 'postgresDb', {
  // 保留原有配置
  parameters: {
    'rds.force_ssl': '1'
  }
});

内容的提问来源于stack exchange,提问作者Viktor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:37:09