使用IAM Role的AWS RDS MySQL连接无效

时间:2018-05-17 05:13:28

标签: amazon-rds amazon-iam aws-iam

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

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

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

  • 使用AWS RDS的MySQL
  • 在我的MySQL实例上启用IAM身份验证
  • 为EC2创建IAM角色
  • 为上述IAM角色创建了内联策略,并授予了所需的“操作”。还包括“资源”(我的数据库的用户名端点),如下所示:

    {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "rds-db:connect"
               ],
               "Resource": [
                   "arn:aws:rds-db:<my-region>:<my-account-id>:dbuser:<my-db-resource-id>/<my-db-username>"
               ]
           }
       ]
    }
    
  • 将此IAM角色分配给我创建的EC2实例

我遵循了link at the top中给出的所有内容,除了最后一个命令外,一切似乎都有效。

在我创建数据库用户的链接中,如下所示:

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命令中,如果我传递 master user-id (我将其创建为'admin')并输入密码,我会收到如下错误:

[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

输入密码: ERROR 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):用户'dev_user'@'xxx.xx.xx.16'的访问被拒绝(使用密码:是)

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

任何帮助都将受到高度赞赏。

谢谢。

1 个答案:

答案 0 :(得分:2)

首先,-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