跳至内容

当我使用 IAM 身份验证尝试连接到 Amazon RDS for MySQL 时,为什么会收到“Access Denied”错误?

2 分钟阅读
0

我想使用 AWS Identity and Access Management (IAM) 身份验证连接到我的 Amazon Relational Database Service (Amazon RDS) for MySQL 实例。但是,我收到“Access Denied”错误。

简短描述

当 IAM 角色权限不足、IAM 身份验证已关闭、数据库用户配置错误或连接字符串错误时,可能会出现此错误消息。您可能会收到类似于以下内容的错误消息:

“ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)”

使用 AWSSupport-TroubleshootRDSIAMAuthentication 运行手册来自动验证对 Amazon RDS 实例进行 IAM 身份验证所需的配置,然后使用解决方法来解决此错误。

解决方法

IAM 角色权限不足

要使用 IAM 数据库身份验证连接到 Amazon RDS for MySQL 实例,您必须有权访问 rds-db:connect 操作。有关详细信息,请参阅创建和使用适用于 IAM 数据库访问的 IAM 策略

如果您使用服务控制策略 (SCP),请确保您的策略允许连接到数据库实例。有关详细信息,请参阅使用 AWS Organizations 创建组织策略

启用 IAM 身份验证

默认情况下,数据库实例的 IAM 身份验证处于关闭状态。要启用 IAM 身份验证,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 选择实例。
  3. 选择 Modify(修改)。
  4. 对于 Database Authentication(数据库身份验证),选择 Password(密码)。
  5. 选择 IAM 数据库身份验证。
  6. 要更新您的配置设置,请选择 Continue(继续)。
  7. 要修改实例,请选择 Apply(应用)。

**注意:**如果您在更新集群配置设置时选择 Apply Immediately(立即应用),则所有待处理的修改都将立即应用,而不是在维护时段内应用。此操作可能会导致您的 Amazon RDS for MySQL 实例长时间中断。有关详细信息,请参阅计划修改设置

数据库用户配置错误

AWSAuthenticationPlugin 用于处理 Amazon RDS for MySQL 实例的 IAM 身份验证。要确认此插件是否已连接到您的 IAM 角色,请运行以下命令:

select user,plugin,host from mysql.user where user like '%db-user-name%';

**注意:**请将 db-user-name 替换为您的数据库用户名。

输出示例:

+------+-------------------------+------+|
user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)

如果 IAM 角色使用特定主机,则必须使用该主机名。此外,请确保您具有访问指定数据库的权限。

要查看授予用户的权限,请使用以下命令:

show grants for user;

**注意:**请将 user 替换为用户名。

要向其他用户授予权限,请使用以下命令:

grant select on mydb.mytable to user;

**注意:**请将 mydb 替换为您的数据库实例名称,将 mytable 替换为您的表名称,将 user 替换为您的用户名。

有关详细信息,请参阅 MySQL 网站上的 GRANT Statement(GRANT 语句)

连接字符串不正确

连接到 Amazon RDS for MySQL 数据库,请在连接字符串中使用 --enable-cleartext-plugin 选项。--enable-cleartext-plugin 语法充当身份验证令牌,在进行数据库连接和配置数据库用户时,必须使用该语法。

连接字符串示例:

$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$

相关信息

如何允许用户通过其 Amazon IAM 凭证向 Amazon RDS for MySQL 数据库实例进行身份验证?

IAM 数据库身份验证

没有评论