Пытаюсь создать процесс аутентификации на основе ролей IAM для моего экземпляра RDS на вики AWS, но независимо от того, что я делаю, я получаю базовый сбой аутентификации, похожий на неверный пароль, без регистрации нигде, чтобы дать мне больше понимания проблемы . Мои шаги по воспроизведению:
Убедитесь, что в экземпляре RDS включена аутентификация IAM.
Создайте роль db_user_test с политикой RDSFullAccess и следующей встроенной политикой:
{
"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)
Я подтвердил, что собственный доступ работает нормально из экземпляра, поэтому я точно не буду заблокирован нигде, кроме аутентификации. Кто-нибудь когда-нибудь сталкивался с этим раньше с предложениями?
Проблема аутентификации решена. С помощью флага --debug с помощью команды aws rds generate-db-auth-token я определил, что клиент использовал найденный профиль .aws / config, который отличается от того, что необходимо для входа в систему. Удаление этой конфигурации и переформатирование встроенной политики для правильной идентификации ресурса устранило эту проблему, и теперь я могу аутентифицироваться в моем экземпляре RDS с помощью токена аутентификации.