IAM Role for RDS

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

  • IAM 数据库身份验证令牌是使用您的 AWS 访问密钥生成的。您无需存储数据库用户凭证。

  • 身份验证令牌的有效期为 15 分钟,因此您无需强制执行密码重置。

  • IAM 数据库身份验证需要安全套接字层(SSL)连接。传入和传出数据库实例的所有数据均经过加密。

  • 如果您的应用程序正在 Amazon Elastic Compute Cloud(Amazon EC2)上运行,则可以使用 EC2 实例配置文件凭证来访问数据库。您无需在实例上存储数据库密码。

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

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

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

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

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

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

$ RDSHOST={database or cluster endpoint}
$ mysql -h RDSHOST -P 3306 -u admin -p

$ TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-east-1 --username admin)"
$ mysql -h RDSHOST -P 3306 -u admin -p

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

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

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

ALTER USER {dbusername} REQUIRE SSL;

运行 exit 命令关闭 MySQL。

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

如果是通过EC2连接RDS,则绑定IAM 角色到EC2,这个角色拥有管理RDS的权限。参考IAM Roles for Amazon EC2.

如果是本地CLI配置连接RDS,则可以通过IAM Identity Center授权,设置aws configure sso的短期有效权限,之后就可以执行后续的步骤。参考IAM Identity Center for human

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

所有 AWS 区域的证书捆绑包

特定 AWS 区域的证书捆绑包

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

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

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

RDSHOST="database-1.sjdhsgbs.us-east-1.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-east-1 --username {db username})"

根据您使用的证书(根证书或捆绑包),运行以下命令之一:

根证书命令,比如我是在美东1安装的数据库,下载的是美东1的证书,执行以下命令后成功连接到数据库:

mysql --host=$RDSHOST --port=3306 --ssl-ca=us-east-1-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

捆绑包命令:

mysql --host=$RDSHOST --port=3306 --ssl-ca=rds-combined-ca-bundle.pem --enable-cleartext-plugin --user='iamuser' --password=$TOKEN

在连接到MySQL数据库时,使用SSL可以增强安全性,保护数据传输的安全。首先,您需要根据您的证书类型(根证书或捆绑包)选择合适的连接命令。如果您使用根证书,应使用以下命令连接MySQL:

mysql --host=$RDSHOST --port=3306 --ssl-ca=rds-ca-2019-root.pem --enable-cleartext-plugin --user='iamuser' --password=$TOKEN

若您使用的是捆绑包,连接命令如下:

mysql --host=$RDSHOST --port=3306 --ssl-ca=rds-combined-ca-bundle.pem --enable-cleartext-plugin --user='iamuser' --password=$TOKEN

通过这些命令,您可以通过安全的SSL连接来访问您的MySQL数据库,确保数据在传输过程中的安全性和完整性。更多详细信息和帮助,请参考AWS官方文档

参考资料

https://repost.aws/zh-Hans/knowledge-center/users-connect-rds-iam

最后更新于