AWS IAM 角色 RDS 身份验证失败

AWS IAM 角色 RDS 身份验证失败

尝试按照 AWS wiki 为我的 RDS 实例创建一个基于 IAM 角色的身份验证流程,但无论我做什么,似乎都会出现类似于错误密码的基本身份验证失败,并且没有任何日志记录可以让我更深入地了解问题。我的重现步骤:

确保在 RDS 实例中启用了 IAM 身份验证。

使用 RDSFullAccess 策略和以下内联策略创建角色 db_user_test:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "rds-db:connect",
        "Resource": "arn:aws:rds:us-west-1:##########:db:foo_bar_instance/db_user_test"
    }
]
}

用角色标记测试 ec2 实例。

登录 RDS 实例并启用授权:

mysql> CREATE USER db_user_test IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT USAGE ON *.* TO 'db_user_test'@'%'REQUIRE SSL;
Query OK, 0 rows affected (0.01 sec)

mysql> show grants for 'db_user_test'@'%';
+------------------------------------------------------+
| Grants for db_user_test@%                            |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'db_user_test'@'%' REQUIRE SSL |
+------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

生成令牌并尝试进行身份验证:

[root@ip-10-101-115-129 ~]# bash -x test_auth_new.sh
+ RDSHOST=foo.bar.us-west-1.rds.amazonaws.com
++ aws rds generate-db-auth-token --hostname foo.bar.us-west-1.rds.amazonaws.com --port 3306 --username db_user_test
+ TOKEN='foo.bar.us-west-1.rds.amazonaws.com:3306/?TOKEN_HERE'
+ SSL_CERT=/root/rds-combined-ca-bundle.pem
+ mysql --host=foo.bar.us-west-1.rds.amazonaws.com --port=3306 --verbose --ssl-ca=/root/rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY --user=db_user_test '--password=foo.bar.us-west-1.rds.amazonaws.com:3306/?TOKEN_HERE' --enable-cleartext-plugin
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'db_user_test'@'10.101.115.129' (using password: YES)

我已经验证了本机访问在实例中工作正常,因此除了身份验证之外,我绝对不会在任何地方被阻止。有人遇到过这种情况并能给出建议吗?

答案1

身份验证问题已解决。我使用 --debug 标志发出 aws rds generate-db-auth-token 命令确定客户端使用的 .aws/config 配置文件与登录所需的配置文件不同。将此配置移开并重新格式化内联策略以正确识别资源解决了此问题,现在我能够使用身份验证令牌对我的 RDS 实例进行身份验证。

相关内容