如何允许用户使用其 IAM 凭证向 Amazon RDS for MySQL 数据库实例进行身份验证?
我想连接到运行 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 数据库身份验证,请执行以下步骤:
- 在 RDS 数据库实例上激活 IAM 数据库身份验证。
- 创建使用 AWS 身份验证令牌的数据库用户账户。
- 添加将数据库用户映射到 IAM 角色的 IAM 策略。
- 创建允许 Amazon RDS 访问权限的 IAM 角色。
- 将 IAM 角色附加到 Amazon EC2 实例。
- 生成 AWS 身份验证令牌来识别 IAM 角色。
- 下载 SSL 根证书文件或证书捆绑包文件。
- 使用 IAM 角色凭证和身份验证令牌连接到 RDS 数据库实例。
- 使用 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 实例。
生成 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 数据库引擎的数据库实例。
相关信息
相关内容
- AWS 官方已更新 10 个月前
- AWS 官方已更新 2 年前