Lambda执行角色无RDS Proxy权限致超时,请求排查
问题排查与修复方案
1. 修正Lambda IAM角色的rds-db:connect权限配置
你当前给Lambda角色配置的rds-db:connect权限用了通配符*作为Resource,AWS对这个权限的Resource有严格格式要求,通配符无法被正确解析。必须指定具体的RDS Proxy资源ARN,格式如下:
iam: role: statements: - Effect: "Allow" Action: - rds-db:connect Resource: "arn:aws:rds-db:<你的AWS区域>:<你的账号ID>:dbproxy:<你的Proxy名称>/*" - Effect: "Allow" Action: - secretsmanager:GetSecretValue Resource: "<你的ProxySecret的ARN>" # 替换为实际Secret的ARN,别用通配符
替换占位符为你实际的AWS区域、账号ID、Proxy名称和Secret ARN,同时把
secretsmanager:*缩小为GetSecretValue,遵循最小权限原则,避免过度授权。
2. 排查Lambda的VPC网络连通性(超时核心原因)
超时问题基本都是网络不通导致的,重点检查:
- Lambda必须部署在RDS Proxy所在的VPC子网里,否则根本连不到Proxy
- Lambda的安全组要允许出站访问5432端口(PostgreSQL默认端口,你的Proxy用的就是这个)
- 确认VPC路由表:Lambda所在子网的路由表要能到达Proxy所在子网(同一VPC内默认连通,但若有自定义路由规则需验证)
3. 验证RDS Proxy与数据库的关联状态
- 去AWS控制台查看RDS Proxy的目标组(
ProxyTargetGroup),确认RDS实例已被成功关联,且目标状态显示AVAILABLE - 直接测试RDS实例是否能正常连接,排除数据库本身的故障
4. 补全RDS Proxy角色的必要权限
你的RDSProxyRole目前只有secretsmanager:*权限,需要添加读取数据库实例的权限,否则Proxy无法获取数据库信息:
Policies: - PolicyName: "RDSProxyPolicy" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: - "secretsmanager:GetSecretValue" Resource: "<你的ProxySecret的ARN>" - Effect: "Allow" Action: - "rds:DescribeDBInstances" Resource: "<你的RDS实例ARN>"
5. 确认数据库用户的连接权限
确保ProxySecret里的masterpassword用户拥有连接目标数据库的权限,登录PostgreSQL执行:
GRANT CONNECT ON DATABASE <你的DBName> TO masterpassword;
修改完所有配置后,重新部署Lambda和相关AWS资源,再测试API网关触发的请求是否正常。
内容的提问来源于stack exchange,提问作者Leandro Hernández Mira
相关产品推荐
相关产品推荐

