我正在设置AWS RDS群集,我正在研究如何使用凭据连接到群集。这些选项似乎是通过用户名/密码,或者使用IAM并使用15分钟令牌。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
提供给EC2的IAM实例角色也可以指定允许连接到群集,所以这看起来很不错,我想在这种情况下不需要令牌。
在这种情况下是否有人使用IAM,或者通常的用户/ pw更简单?文档指出,在使用IAM时,您应该将连接限制为每秒20或更低。我很难评估这个是低还是低。任何人都知道IAM身份验证对AWS RDS的性能影响吗?
答案 0 :(得分:0)
准备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;
运行“退出”命令以关闭MySQL
IAM内联政策
允许用户访问数据库的内联策略,相应地更改数据库信息
{
"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/