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

使用IAM角色连接RDS Aurora MySQL时遭遇访问拒绝求助

RDS Aurora MySQL IAM认证连接失败问题排查

问题详情

  • 环境:RDS Aurora MySQL实例
  • 已完成配置:
    • 定义IAM策略允许数据库用户jane_doe执行rds-db:connect操作
    • 在MySQL中创建jane_doe用户,认证类型设为AWSAuthenticationPlugin
    • 为jane_doe启用SSL强制要求,已下载AWS官方证书包
  • 正常情况:本地终端使用admin账号密码可成功连接,命令如下:
mysql --host=db-test-instance-1.somethinghere.us-west-2.rds.amazonaws.com --port=3306 --ssl-ca=~/Downloads/global-bundle.pem --enable-cleartext-plugin --user=admin --password=my_password
  • 异常情况:使用IAM认证令牌连接jane_doe时触发权限拒绝,命令及错误:
TOKEN="$(aws rds generate-db-auth-token --hostname db-test-instance-1.somethinghere.us-west-2.rds.amazonaws.com --port 3306 --username jane_doe --region=us-west-2b)"

mysql --host=db-test-instance-1.something here.us-west-2.rds.amazonaws.com --port=3306 --ssl-ca=~/Downloads/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN

错误信息:ERROR 1045 (28000): Access denied for user 'jane_doe'@'1.16.14.7' (using password: YES)

  • 已确认:jane_doe用户存在且持有必要数据库权限

排查与解决步骤

  1. 修正令牌生成的Region参数
    生成认证令牌时,--region需指定AWS区域(如us-west-2),而非可用区(us-west-2b)。修正后的命令:

    TOKEN="$(aws rds generate-db-auth-token --hostname db-test-instance-1.somethinghere.us-west-2.rds.amazonaws.com --port 3306 --username jane_doe --region=us-west-2)"
    
  2. 验证IAM实体的策略关联
    确保执行令牌生成操作的IAM用户/角色(而非数据库用户jane_doe)已关联正确的权限策略,示例策略:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "rds-db:connect",
                "Resource": "arn:aws:rds-db:us-west-2:你的AWS账号ID:dbuser:实例资源ID/jane_doe"
            }
        ]
    }
    

    注意:实例资源ID可在RDS控制台实例详情的「配置」标签中获取,格式为db-XXXXXXXXXXXXXXXXX。

  3. 确认数据库用户的认证插件配置
    登录数据库执行以下命令,检查jane_doe的认证插件是否正确:

    SELECT user, plugin FROM mysql.user WHERE user = 'jane_doe';
    

    需确保返回的plugin值为mysql_clear_password(AWSAuthenticationPlugin对应的底层插件)。若不符,重新创建用户:

    CREATE USER 'jane_doe'@'%' IDENTIFIED WITH mysql_clear_password AS 'RDS';
    GRANT 所需权限 ON 目标数据库.* TO 'jane_doe'@'%';
    FLUSH PRIVILEGES;
    
  4. 修正连接命令的主机名
    连接命令中的主机名存在空格(something here),需修正为与令牌生成命令一致的正确主机名:db-test-instance-1.somethinghere.us-west-2.rds.amazonaws.com。

  5. 验证本地AWS CLI身份权限
    执行aws sts get-caller-identity确认当前CLI使用的IAM实体,该实体必须拥有生成认证令牌及rds-db:connect的权限,否则生成的令牌无效。

  6. 检查SSL连接有效性
    尽管已启用SSL强制,可在连接命令中添加--ssl-mode=REQUIRED强制验证SSL连接,确保SSL配置无问题:

    mysql --host=db-test-instance-1.somethinghere.us-west-2.rds.amazonaws.com --port=3306 --ssl-ca=~/Downloads/global-bundle.pem --ssl-mode=REQUIRED --enable-cleartext-plugin --user=jane_doe --password=$TOKEN
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:38