我想连接到 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例。我想使用 AWS Identity and Access Management (IAM) 凭证,而不是原生身份验证方法。
解决方案
**注意:**仅当您的客户端和服务器位于同一个虚拟私有云 (VPC) 中且网络可信时,才使用未加密的 MySQL 连接。
**先决条件:**您必须启动支持 IAM 数据库身份验证的数据库实例和 Amazon Elastic Compute Cloud (Amazon EC2) 实例才能连接到数据库。
要验证 IAM 身份验证所需的配置,请使用 AWSSupport-TroubleshootRDSIAMAuthentication AWS Systems Manager Automation 运行手册。您还可以使用该运行手册来解决与 Amazon RDS 实例或 Amazon Aurora 集群的连接问题。
在 RDS 数据库实例上激活 IAM 数据库身份验证
您可以使用 Amazon RDS 控制台、AWS CLI 或 Amazon RDS API 启用 IAM 数据库身份验证。
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
如果您使用 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
**注意:**请使用您的主密码登录。
要创建使用 IAM 身份验证而不是密码的数据库用户账户,请运行以下命令:
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
默认情况下,该数据库用户没有权限。当您运行 SHOW GRANTS FOR {dbusername} 时,该数据库用户会显示为 GRANT USAGE。若要求通过 SSL 进行连接时使用用户账户,请运行以下命令:
ALTER USER {dbusername} REQUIRE SSL;
要关闭 MySQL,请运行 exit 命令。然后,注销数据库实例。
添加将数据库用户映射到 IAM 角色的 IAM 策略
完成以下步骤:
- 打开 IAM 控制台。
- 在导航窗格中,选择 Policies(策略)。
- 选择 Create policy(创建策略)。
- 输入向所需用户授予 rds-db:connect 操作权限的策略。有关详细信息,请参阅“创建和使用适用于 IAM 数据库访问的 IAM 策略”。
**注意:**确保在 Resources(资源)部分中输入数据库资源的详细信息。
- 选择 Next(下一步)。
- 对于 Name(名称),输入策略名称。
- 选择 Create policy(创建策略)。
创建允许 Amazon RDS 访问权限的 IAM 角色
完成以下步骤:
- 打开 IAM 控制台。
- 在导航页面中,选择 Roles(角色)。
- 选择 Create role(创建角色)。
- 在 Trusted entity type(可信实体类型)部分中,选择 AWS service(AWS 服务)。
- 在 Use case(用例)部分中,对于 Service or user case(服务或用户案例),选择 EC2。
- 选择 Next(下一步)。
- 使用搜索栏查找 IAM 策略。
- 选择 Next(下一步)。
- 对于 Role name(角色名称),输入此 IAM 角色的名称。
- 选择 Create role(创建角色)。
将 IAM 角色附加到 Amazon EC2 实例
完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格中,选择 Instances(实例),然后选择用于连接到 Amazon RDS 的实例。
- 将 IAM 角色附加到 EC2 实例。
- 使用 SSH 连接到 EC2 实例。
生成 AWS 身份验证令牌来识别 IAM 角色
连接到 Amazon EC2 实例后,运行以下 generate-db-auth-token AWS CLI 命令以生成身份验证令牌:
aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}
复制并存储身份验证令牌,以供以后使用。或者,使用适用于 .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 数据库实例执行创建、删除、修改、备份和恢复操作需要哪些最低权限?