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

3 分钟阅读
0

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

简短描述

用户可以使用 IAM 用户或角色凭证以及身份验证令牌连接到 Amazon RDS 数据库实例或集群。出于以下原因,IAM 数据库身份验证比原生身份验证方法更安全:

  • IAM 数据库身份验证令牌是使用您的 AWS 访问密钥生成的。您无需存储数据库用户凭证。
  • 身份验证令牌的有效期为 15 分钟,因此您无需强制执行密码重置。
  • IAM 数据库身份验证需要安全套接字层(SSL)连接。传入和传出数据库实例的所有数据均经过加密。
  • 如果您的应用程序正在 Amazon Elastic Compute Cloud(Amazon EC2)上运行,则可以使用 EC2 实例配置文件凭证来访问数据库。您无需在实例上存储数据库密码。

要使用 IAM 角色来设置 IAM 数据库身份验证,请执行以下步骤:

  1. 在 RDS 数据库实例上激活 IAM 数据库身份验证。
  2. 创建使用 AWS 身份验证令牌的数据库用户账户。
  3. 添加将数据库用户映射到 IAM 角色的 IAM 策略。
  4. 创建允许 Amazon RDS 访问权限的 IAM 角色。
  5. 将 IAM 角色附加到 Amazon EC2 实例。
  6. 生成 AWS 身份验证令牌来识别 IAM 角色。
  7. 下载 SSL 根证书文件或证书捆绑包文件。
  8. 使用 IAM 角色凭证和身份验证令牌连接到 RDS 数据库实例。
  9. 使用 IAM 角色凭证和 SSL 证书连接到 RDS 数据库实例。

解决方法

在开始之前,您必须启动一个支持 IAM 数据库身份验证的数据库实例,并启动一个 Amazon EC2 实例才能连接到数据库。

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

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

注意: 如果您选择立即应用,则所有待处理的修改也会立即应用,而不是在维护时段内应用。这可能会导致您的实例长时间中断。有关详细信息,请参阅使用“立即应用”设置

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

1.    运行以下命令连接到数据库实例或集群端点。输入主密码登录。

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

2.    创建使用 AWS 身份验证令牌而不是密码的数据库用户账户:

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

3.    默认情况下,数据库用户在创建时不会获得任何权限。当您运行 SHOW GRANTS FOR {dbusername} 时,系统会显示 GRANT USAGE。如需要求用户账户使用 SSL 进行连接,请运行以下命令:

ALTER USER {dbusername} REQUIRE SSL;

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

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

1.    打开 IAM 控制台

2.    从导航窗格中选择策略

3.    选择创建策略

4.    输入允许对所需用户执行 rds-db:connect 操作的策略。有关创建此策略的详细信息,请参阅创建和使用适用于 IAM 数据库访问的 IAM 策略

**注意:**确保使用数据库资源的详细信息(例如,您的数据库实例标识符和数据库用户名)来编辑 Resource 值。

5.    选择下一步: 标记

6.    选择下一步: 审核

7.    对于名称,输入策略名称。

8.    选择创建策略

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

1.    打开 IAM 控制台

2.    从导航窗格中选择角色

3.    选择创建角色

4.    选择 AWS 服务

5.    选择 EC2

6.    在选择您的使用案例中,选择 EC2,然后选择下一步: 权限

7.    在搜索栏中,查找您以前在“添加映射数据库用户的 IAM 策略”部分创建的 IAM 策略。

8.    选择下一步: 标记

9.    选择**下一步:**审核

10.    对于角色名称,输入此 IAM 角色的名称。

11.    选择创建角色

将 IAM 角色附加到 Amazon EC2 实例

1.    打开 Amazon EC2 控制台

2.    选择用于连接到 Amazon RDS 的 EC2 实例。

3.    将新创建的 IAM 角色附加到 EC2 实例。

4.    使用 SSH 连接到 EC2 实例

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

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

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

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

复制并存储此身份验证令牌以备日后使用。令牌在创建 15 分钟后过期。

或者,您可以使用 AWS SDK 生成令牌。

下载 SSL 根证书文件或证书捆绑包文件

运行以下命令下载适用于所有区域的根证书:

$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

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

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

**注意:**如果您的应用程序不接受证书链,请运行以下命令下载证书捆绑包:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

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/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

捆绑包命令:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

**注意:**如果您使用的是 MariaDB 客户端,则不需要选择 --enable-cleartext-plugin 选项。

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

下载证书文件后,使用 SSL 连接到数据库实例。有关详细信息,请参阅连接到运行 MySQL 数据库引擎的数据库实例

相关信息

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

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

AWS 官方
AWS 官方已更新 1 年前