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

使用Python Lambda通过IAM认证连接RDS Proxy遇无效凭证错误

排查RDS Proxy IAM认证无效凭证错误

针对你遇到的"用户'lambda_user'的Proxy IAM认证失败,原因:无效凭证"问题,以下是具体排查和修复步骤:

1. 确认RDS及Proxy的IAM认证基础配置

  • 检查目标RDS实例是否已启用IAM数据库认证:在RDS控制台实例详情的"配置"标签中,确认"IAM数据库认证"状态为开启。
  • 确认RDS Proxy的认证模式包含IAM:在Proxy配置的"认证"部分,确保选择了包含IAM的模式(如IAM_SECRETS或IAM_ONLY)。
  • 验证数据库用户lambda_user已关联IAM权限:针对PostgreSQL,需执行SQL语句为用户添加IAM角色:
    CREATE USER lambda_user WITH LOGIN;
    GRANT rds_iam TO lambda_user;
    

2. 修正IAM策略的资源匹配

当前策略使用通配符arn:aws:rds-db:*:xxxxxxxxxx:dbuser:*/*,可能存在匹配不精准的问题。建议将资源限定到具体的RDS Proxy和用户,格式为arn:aws:rds-db:<region>:<account-id>:dbuser:<proxy-id>/<db-user>,示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowRDSProxyConnect",
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "arn:aws:rds-db:us-east-1:xxxxxxxxxx:dbuser:test-rds-proxy-id/lambda_user"
        }
    ]
}

注意替换<proxy-id>为你的RDS Proxy实际ID,<account-id>为AWS账号ID。

3. 检查令牌生成与连接字符串的参数一致性

  • 端点拼写错误:你代码中生成令牌的DBHostname是test-rds.proxy-xxxxxxxx.us-east-1.rds.amazonaws.com,但连接字符串中是test-rds.proxy-xxxxxxx.us-east-1.rds.amazonaws.com(少一位字符),必须保证两者完全一致。
  • 确认生成令牌的region与Proxy所在region完全匹配,端口号与Proxy配置的监听端口一致(PostgreSQL默认5432)。

4. 处理IAM令牌的URL编码问题

IAM令牌包含特殊字符,直接放入连接字符串会导致解析错误,需对令牌进行URL编码。修正后的代码示例:

import urllib.parse
import boto3

def get_db_token():
    db_client = boto3.client('rds', region_name="us-east-1")
    database_token = db_client.generate_db_auth_token(
        DBHostname='test-rds.proxy-xxxxxxxx.us-east-1.rds.amazonaws.com',
        Port=5432,
        DBUsername='lambda_user')
    return database_token

db_token = get_db_token()
# 对令牌进行URL编码
encoded_token = urllib.parse.quote_plus(db_token)
connection_string = f"postgresql://lambda_user:{encoded_token}@test-rds.proxy-xxxxxxxx.us-east-1.rds.amazonaws.com:5432/TestDatabase?sslmode=require"

5. 排查Lambda执行角色的限制

  • 检查Lambda执行角色是否存在权限边界,若有需确保权限边界允许rds-db:connect操作。
  • 确认Lambda执行角色的信任关系正确,包含lambda.amazonaws.com作为可信实体:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "lambda.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    

6. 解析RDS Proxy增强日志细节

开启RDS Proxy的增强日志后,在CloudWatch日志组中查看authentication类型的日志,其中会包含更具体的失败原因,例如:

  • 令牌签名验证失败
  • 令牌已过期
  • 资源ARN不匹配
  • 用户未关联IAM角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:20:41