Соединение AWS RDS MySQL с использованием роли IAM не работает - PullRequest
0 голосов
/ 17 мая 2018

Хотел бы заранее сообщить, что я новичок в AWS в целом.В своем проекте я пытаюсь использовать AWS RDS MySQL с использованием аутентификации IAM (роль IAM) из приложения Java, развернутого в Tomcat на экземпляре EC2.Прежде чем попробовать это из Java, я пытаюсь сделать это из командной строки на экземпляре EC2.Я перехожу по этой ссылке, чтобы сделать это:

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

До сих пор я сделал следующее (прошу прощения, если я не использую правильные терминологии):

  • MySQL с использованием AWS RDS
  • Включена аутентификация IAM на моем экземпляре MySQL
  • Создана роль IAM для EC2
  • Создана встроенная политика для вышеуказанной роли 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, если я передам свой основной идентификатор пользователя (я создал его как '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" в обоих местах в команде выше.

Любая помощь будет высоко ценится.

Спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Прежде всего, после параметра -p не должно быть пробела.

Во-вторых, если вы хотите выполнить aws rds generate-db-auth-token... inline, он должен быть помечен галочками, а не одинарными кавычками.

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
...