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

Node.js同VPC下Lambda连接RDS Proxy卡住故障排查

问题排查与解决指南

你遇到的连接卡住、RDS Proxy报角色无法代入的问题,由两类配置错误共同导致,按以下步骤修复即可:

1. 修复RDS Proxy IAM角色无法代入的错误

日志里的couldn't be assumed报错和你给角色加业务权限(Secrets Manager、RDS、KMS权限)无关,核心原因是角色缺失正确的信任关系配置,RDS Proxy服务本身没有权限代入这个角色拉取凭证:

  • 进入IAM控制台,找到报错ARN对应的角色arn:aws:iam::--------:role/service-role/abc
  • 打开角色的信任关系编辑页,替换为以下信任策略,允许RDS服务代入该角色:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • 补充校验项:
    • 角色绑定的权限策略中,必须指定你存储数据库账号密码的Secrets Manager密钥ARN,授予secretsmanager:GetSecretValue权限;同时要授予加密该密钥的自定义KMS密钥的kms:Decrypt权限,不要用无限制的资源通配符避免隐式拒绝
    • 检查角色是否配置了权限边界、账号是否有组织SCP策略拦截sts:AssumeRole操作

2. 修正安全组配置错误

你当前的安全组规则完全混淆了入站方向和访问链路,是连接进程持续卡住的直接原因,正确的安全组配置不需要三个组互相开放入站,按访问链路配置即可:

  • Lambda绑定的安全组(lambda-SG):
    • 入站规则:无需开放5432端口,默认拒绝所有入站即可,Lambda是连接发起方不需要被动接收流量
    • 出站规则:放通TCP 5432端口到RDS Proxy绑定的安全组
  • RDS Proxy绑定的安全组:
    • 入站规则:仅放通TCP 5432端口,来源为lambda-SG
    • 出站规则:放通TCP 5432端口到RDS实例绑定的安全组
  • RDS实例绑定的安全组(rds-SG):
    • 入站规则:仅放通TCP 5432端口,来源为RDS Proxy绑定的安全组,不需要直接放通Lambda的安全组流量
    • 出站规则:保持默认全开出站即可

安全组是有状态资源,客户端主动发起连接后,反向的回包会被自动放通,不需要双向配置入站规则,多余的交叉规则反而可能导致流量匹配异常被丢弃。

3. 连接侧校验

配置修改完成后,在Node.js代码中补充超时配置避免进程无限挂起,同时确认连接参数正确:

  • 连接主机地址填写RDS Proxy的专属端点,不要填写底层RDS实例的地址
  • 给数据库客户端配置10秒连接超时,方便快速定位问题,参考pg客户端配置:
const { Client } = require('pg')
const client = new Client({
  host: '替换为你的RDS Proxy端点',
  port: 5432,
  user: '数据库用户名',
  password: '数据库密码',
  database: '目标库名',
  connectionTimeoutMillis: 10000
})
  • 如果开启了RDS Proxy的IAM认证,需要在代码中生成对应RDS Proxy的IAM认证令牌,不要使用直连RDS的令牌逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:01:19