首页 > 解决方案 > 使用 IAM 角色的 AWS RDS MySQL 连接不起作用

问题描述

想提前通知我一般来说我是 AWS 新手。对于我的项目,我正在尝试从部署在 EC2 实例上的 Tomcat 上的 Java 应用程序中使用 IAM 身份验证(IAM 角色)来使用 AWS RDS MySQL。在从 Java 中尝试之前,我正在从 EC2 实例上的命令提示符中尝试它。我正在按照此链接进行操作:

https://aws.amazon.com/premiumsupport/knowledge-center/users-connect-rds-iam/

到目前为止,我已经完成了以下操作(如果我没有使用正确的术语,请原谅):

我遵循了顶部链接中给出的所有内容,除了最后一个命令之外,一切似乎都有效。

如链接中我创建的数据库用户如下:

CREATE USER dev_user IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

链接中最后一个不起作用的命令是:

mysql -h {db or cluser endpoint} --ssl-ca={certificate file name with complete path} --ssl-verify-server-cert -u {dbusername2} -p"{authenticationtoken}" --enable-cleartext-plugin

每次我运行此命令时,它都会要求输入密码,然后出现错误。我不知道如何解决它。

在上面的 mysql 命令中,如果我传递我的主用户 ID(我将其创建为“管理员”)并输入它的密码,我会收到如下错误:

[ec2-user@ip-xxx-xx-xx-16 ~]$ mysql -h <endpoint of my RDS DB instance> --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert -u admin -p 'aws rds generate-db-auth-token --hostname <endpoint of my RDS DB instance> --port 3306 --username dev_user' --enable-cleartext-plugin

输入密码:错误 1059 (42000):标识符名称 'aws rds generate-db-auth-token --hostname --port' 太长

如果在同一个命令中,我提供了上面创建的数据库用户(dev_user)。如果在命令中提供“dev_user”作为用户以及是否输入密码,我会收到以下错误。[在这种情况下,上面的链接没有设置密码,所以当它要求输入密码时我该怎么办?]

[ec2-user@ip-xxx-xx-xx-16 ~]$ mysql -h <endpoint of my RDS DB instance> --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert -u dev_user -p 'aws rds generate-db-auth-token --hostname <endpoint of my RDS DB instance> --port 3306 --username dev_user' --enable-cleartext-plugin

输入密码:ERROR 1045 (28000): Access denied for user 'dev_user'@'xxx.xx.xx.16'(使用密码:YES)

当我在上面命令的两个位置输入“admin”时,我得到相同的“访问被拒绝...”错误。

任何帮助将不胜感激。

谢谢你。

标签: amazon-rdsamazon-iamaws-iam

解决方案


首先,-p参数后面不应该有空格。

其次,如果要aws rds generate-db-auth-token...内联执行,应该用记号标记,而不是单引号。

mysql -h <endpoint of my RDS DB instance> --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert -u dev_user -p`aws rds generate-db-auth-token --hostname <endpoint of my RDS DB instance> --port 3306 --username dev_user` --enable-cleartext-plugin

推荐阅读