AWS IAM用于管理对资源的访问。通过 IAM Authentication,我们可以允进行RDS 数据库身份验证,而无需使用数据库密码。IAM Authentication具有以下优势:
为名为 iam-db-user
的用户组装一个ARN((我们将在下一节中创建用户), 保存生成的 ARN:
echo \"arn:aws:rds-db:`aws configure \
get region`:`aws sts \
get-caller-identity --query "Account" --output text`:dbuser:`aws \
rds describe-db-instances --db-instance-identifier rds-pg-labs \
--query "DBInstances[*].DbiResourceId" --output text`/iam_db_user\"
输出:
"arn:aws:rds-db:us-west-2:145197526627:dbuser:db-FN4GBE6TTWLI2RS2W73NIPPM2E/iam_db_user"
在IAM控制台上创建一个新的policy,内容如下,命名为RDSAUTH_iam_db_user
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "rds-db:connect",
"Resource": "arn:aws:rds-db:us-west-2:145197526627:dbuser:db-FN4GBE6TTWLI2RS2W73NIPPM2E/iam_db_user"
}
]
}
在IAM控制台上创建一个新的Role,信任实体为EC2,并添加这个policy。创建完成后将这个Role attach到对应的EC2上。
需要使用 SSL 才能使用 RDS IAM 身份验证。
要使用 SSL验证 RDS endpoint,需要 PostgreSQL 客户端的 RDS SSL 证书副本。先下载 ssl 证书:
wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem -O /home/ec2-user/environment/rds-ca-2019-root.pem
使用以下ssl 参数, psql 在 SSL 通信期间会验证 RDS 服务器证书:
psql "sslrootcert=/home/ec2-user/environment/rds-ca-2019-root.pem sslmode=verify-full dbname=pglab"
创建一个iam_db_user
用户,然后授予rds_iam
角色:
select current_user;
CREATE USER iam_db_user with LOGIN;
GRANT rds_iam TO iam_db_user;
通过执行以下命令生成用户iam_db_user
连接数据库的authentication token:
export PGPASSWORD=`aws rds generate-db-auth-token \
--hostname $DBENDP \
--port 5432 \
--region $AWSREGION \
--username iam_db_user`
它的格式如下:
使用这个密码连接到数据库:
psql "sslrootcert=/home/ec2-user/environment/rds-ca-2019-root.pem sslmode=verify-full dbname=pglab user=iam_db_user"
select current_user;