RDS Proxy可以通过连接池和多路复用帮助进行连接管理,并通过自动连接到备用数据库实例同时保留应用程序连接,使应用程序能够更好地应对数据库故障。RDS Proxy 还可以通过对数据库实施 IAM 身份验证并将凭证安全地存储在 AWS Secrets Manager 中来帮助添加一层安全性。
进入RDS Proxy页面,创建一个Proxy:
在Proxy configuration部分中,将Proxy identifier设置为rds-pg-labs-proxy
并选择PostgreSQL引擎; 空闲客户端连接超时 设置选择合适的值,该值确定代理在终止空闲客户端连接之前保留它们的时间。默认值为 1,800 秒(30 分钟);在Target group configuration,选择之前创建的数据库;Connection pool maximum connections部分,定义了代理可以在数据库上建立的最大连接数,以参数值百分比表示:
在Authentication部分,选择创建一个新的IAM Role;选择一开始创建的secret manager; 与 RDS 实例不同,RDS Proxy 一次仅支持一种身份验证方法,因此代理只能使用本机身份验证(用户名/密码)或 IAM 身份验证。这里先不选择IAM Authentication
:
接下来,选择代理的子网以及安全组,最后创建proxy:
代理可能需要几分钟才能可用。为了通过代理连接到数据库实例,需要找到proxy的Endpoint:
有兴趣可以查看RDS Proxy自动创建出来的Role,上面的权限如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetSecretValue",
"Action": [
"secretsmanager:GetSecretValue"
],
"Effect": "Allow",
"Resource": [
"arn:aws:secretsmanager:us-west-2:145197526627:secret:secretPostgresMasterUser-NhpOuf"
]
},
{
"Sid": "DecryptSecretValue",
"Action": [
"kms:Decrypt"
],
"Effect": "Allow",
"Resource": [
"arn:aws:kms:us-west-2:145197526627:key/2b18c9d9-1e00-43aa-a6d7-51a3a38ec199"
],
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.us-west-2.amazonaws.com"
}
}
}
]
}
信任实体:
这里我们把RDS Proxy Endpoint保存为环境变量:
AWSREGION=`aws configure get region`
PRXENDP=`aws rds describe-db-proxies \
--db-proxy-name rds-pg-labs-proxy \
--region $AWSREGION \
--query 'DBProxies[].Endpoint' \
--output text`
使用用户名和密码连接到RDS Proxy:
psql -h $PRXENDP -U $DBUSER -d pglab -W
上面一样可以正常执行命令:
如果选择的是IAM认证,使用以下方式进行连接:
## Download the SSL CA certificate for RDS Proxy
wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
## Set SSL related environment variables that `psql` will use
export PGSSLMODE='verify-full'
export PGSSLROOTCERT='./AmazonRootCA1.pem'
## Generate the token and set it in the `PGPASSWORD` environment variable that `psql` will use
export PGPASSWORD=`aws rds generate-db-auth-token \
--hostname $PRXENDP \
--port 5432 \
--region $AWSREGION \
--username $DBUSER`
## Connect using `psql`
psql -h $PRXENDP -U $DBUSER -d pglab