使用 IAM Role 的 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/

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

  • 使用 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 实例

我遵循了顶部链接中给出的所有内容,除了最后一个命令外,一切似乎都可以正常工作。

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

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(我将其创建为"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

输入密码: 错误 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

输入密码: 错误 1045 (28000):用户"dev_user"@'xxx.xx.xx.16' 的访问被拒绝(使用密码:是)

我得到相同的"访问被拒绝..."当我在上面的命令的两个地方输入"admin"时出错。

任何帮助将不胜感激。

谢谢。

首先,参数后不应该-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

相关内容

  • 没有找到相关文章

最新更新