我正在设置AWS RDS集群,我正在研究如何使用凭据连接到集群。选项似乎是通过用户名/密码像平时或使用IAM和使用15分钟令牌。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
提供给EC2的IAM实例角色也可以指定允许连接到集群,所以这看起来很不错,我想在这种情况下不需要令牌。
在这种情况下是否有人使用IAM,或者通常的用户/ pw更简单?文档指出,在使用IAM时,您应该将连接限制为每秒20或更低。我很难评估这是低还是低。有人知道IAM身份验证对AWS RDS的性能影响吗?
准备EC2实例
安装以下软件包和命令
yum install curl mysql -y
service mysqld start
chkconfig mysqld on
设置数据库以使用IAM
# Connect to DB
RDS_HOST="db-with-iam-support.ct5b4uz1gops.eu-central-1.rds.amazonaws.com"
REGION="eu-central-1"
# mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
mysql -h ${RDS_HOST} -P 3306 -u dbuser -p
运行此命令以创建将使用AWS身份验证令牌而不是密码的数据库用户帐户:
CREATE USER 'db_iam_user' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
(可选)运行此命令以要求用户使用SSL连接到数据库:在此处了解更多信息
GRANT USAGE ON *.* TO 'db_iam_user'@'%'REQUIRE SSL;
运行“exit”命令关闭MySQL
IAM内联策略
内联策略允许db访问用户,相应地更改db arn
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:eu-central-1:111111111111:dbuser:db-RWXD2T7YIWZU4VI2FBHSM2GE24/db_iam_user"
]
}
]
}
下载SSL证书下载AWS RDS证书pem文件,
mkdir -p /var/mysql-certs/
cd /var/mysql-certs/
curl -O https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
生成AWS身份验证令牌
身份验证令牌由数百个字符组成。它在命令行上可能很笨重。解决此问题的一种方法是将令牌保存到环境变量,然后在连接时使用该变量。
TOKEN="$(aws rds generate-db-auth-token --hostname ${RDS_HOST} --port 3306 --region ${REGION} --username db_iam_user)"
连接到数据库
mysql --host="${RDS_HOST}" \
--port=3306 \
--user=db_iam_user \
--ssl-ca=/var/mysql-certs/rds-combined-ca-bundle.pem \
--ssl-verify-server-cert \
--enable-cleartext-plugin \
--password="$TOKEN
参考:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html
https://aws.amazon.com/premiumsupport/knowledge-center/users-connect-rds-iam/