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

3 分钟阅读
0

我想连接到 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例。我想使用 AWS Identity and Access Management (IAM) 凭证,而不是原生身份验证方法。

解决方案

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

连接到 Amazon RDS 数据库实例或集群,请使用 IAM 用户或角色凭证以及身份验证令牌。

注意:仅当您的客户端和服务器位于同一个虚拟私有云 (VPC) 中且网络可信时,才使用未加密的 MySQL 连接

先决条件

您必须启动支持 IAM 数据库身份验证的数据库实例和 Amazon Elastic Compute Cloud (Amazon EC2) 实例才能连接到数据库。

要验证 IAM 身份验证所需的配置,请使用 AWSSupport-TroubleshootRDSIAMAuthentication AWS Systems Manager Automation 运行手册。您还可以使用该运行手册来解决与 Amazon RDS 实例或 Aurora 集群的连接问题。

在 RDS 数据库实例上激活 IAM 数据库身份验证

您可以使用 Amazon RDS 控制台、AWS 命令行界面 (AWS CLI) 或 Amazon RDS API 启用 IAM 数据库身份验证。如果您使用 Amazon RDS 控制台修改数据库实例,请选择 Apply Immediately(立即应用)以激活 IAM 数据库身份验证。有关详细信息,请参阅 Amazon RDS 数据库实例

注意: 如果您选择 Apply Immediately(立即应用),则任何待处理的修改也会立即生效。有关详细信息,请参阅计划修改设置

创建使用 AWS 身份验证令牌的数据库用户账户

连接到数据库实例或集群端点,请运行以下命令。

$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

注意: 请使用您的主密码登录。

创建使用 AWS 身份验证令牌而不是密码的数据库用户账户,请运行以下命令:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

默认情况下,数据库用户没有权限。当您运行 SHOW GRANTS FOR {dbusername} 时,数据库用户会显示为 GRANT USAGE。如需要求用户账户通过 SSL 进行连接,请运行以下命令:

ALTER USER {dbusername} REQUIRE SSL;

要关闭 MySQL,请运行 exit 命令。然后,从数据库实例注销。

添加将数据库用户映射到 IAM 角色的 IAM 策略

完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择 Policies(策略)。
  3. 选择 Create Policy(创建策略)。
  4. 输入允许对所需用户执行 rds-db:connect 操作的策略。有关创建此策略的详细信息,请参阅创建和使用适用于 IAM 数据库访问的 IAM 策略
    **注意:**确保在 Resources(资源)部分中输入数据库资源的详细信息。
  5. 选择 Next(下一步)。
  6. 选择 Next(下一步)。
  7. 对于 Name(名称),输入策略名称。
  8. 选择 Create policy(创建策略)。

创建允许 Amazon RDS 访问权限的 IAM 角色

完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航页面中,选择 Roles(角色)。
  3. Trusted entity(可信实体)类型部分中,选择 Create role(创建角色)。
  4. 选择 AWS service(AWS 服务)。
  5. Use case(用例)部分中,对于 Service or user case(服务或用户案例),选择 EC2
  6. 对于 Use case(用例),选择 EC2,然后选择 Next(下一步)。
  7. 在搜索栏中,查找您以前在“添加映射数据库用户的 IAM 策略”部分创建的 IAM 策略。
  8. 选择 Next(下一步)。
  9. 对于 Role Name(角色名称),输入此 IAM 角色的名称。
  10. 选择 Create Role(创建角色)。

将 IAM 角色附加到 Amazon EC2 实例

完成以下步骤:

  1. 打开 Amazon EC2 控制台
  2. 选择用于连接到 Amazon RDS 的 EC2 实例。
  3. 将新创建的 IAM 角色附加到 EC2 实例。
  4. 通过 SSH 连接到 EC2 实例

生成 AWS 身份验证令牌来识别 IAM 角色

连接到 Amazon EC2 实例后,运行以下 AWS CLI generate-db-auth-token 命令以生成身份验证令牌

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

复制并存储此身份验证令牌以备日后使用。或者,使用适用于 .NET 的 AWS SDK 来生成令牌。

下载 SSL 根证书捆绑包文件

要下载所有 AWS 区域的证书捆绑包,请参阅所有 AWS 区域的证书捆绑包

使用 IAM 角色凭证和身份验证令牌连接到 RDS 数据库实例

下载证书文件后,运行以下命令通过 SSL 连接到数据库实例:

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN

注意: 如果您使用 MariaDB 客户端,则不包括 --enable-cleartext-plugin 选项。

使用 IAM 角色凭证和 SSL 证书连接到 RDS 数据库实例

下载证书文件后,通过 SSL 连接到数据库实例

相关信息

适用于 MariaDB、MySQL 和 PostgreSQL 的 IAM 数据库身份验证

用户对 Amazon RDS 数据库实例执行创建、删除、修改、备份和恢复操作需要哪些最低权限?