通过命令行使用 IAM 身份验证连接到数据库集群:AWS CLI 和 psql 客户端
可以使用 AWS CLI 和 psql 命令行工具从命令行连接到 Aurora PostgreSQL 数据库集群,如下所述。
先决条件
以下是使用 IAM 身份验证连接到数据库集群的先决条件:
注意
有关使用具有 IAM 身份验证的 pgAdmin 连接到数据库的信息,请参阅博客文章使用 IAM 身份验证通过 pgAdmin Amazon Aurora PostgreSQL 或 Amazon RDS for PostgreSQL 进行连接
生成 IAM 身份验证令牌
身份验证令牌包含几百个字符,因此,很难使用命令行对其进行处理。该问题的解决方式是,将令牌保存到一个环境变量中,然后在连接时使用此变量。以下示例说明了如何使用 AWS CLI 通过 generate-db-auth-token
命令获取签名的身份验证令牌,并将其存储在 PGPASSWORD
环境变量中。
export RDSHOST="
mypostgres-cluster.cluster-123456789012.us-west-2.rds.amazonaws.com
" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port5432
--regionus-west-2
--usernamejane_doe
)"
在该示例中,generate-db-auth-token
命令的参数如下所示:
-
--hostname
– 要访问的数据库集群(集群终端节点)的主机名。 -
--port
– 用于连接到数据库集群的端口号 -
--region
– 在其中运行数据库集群的 AWS 区域 -
--username
– 要访问的数据库账户
生成的令牌的前几个字符与以下内容类似。
mypostgres-cluster.cluster-123456789012.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=jane_doe&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900...
注意
您不能使用自定义 Route 53 DNS 记录或 Aurora 自定义端点代替数据库集群端点来生成身份验证令牌。
连接到 Aurora PostgreSQL 集群
使用 psql 进行连接的一般格式如下所示。
psql "host=
hostName
port=portNumber
sslmode=verify-full sslrootcert=full_path_to_ssl_certificate
dbname=DBName
user=userName
password=authToken
"
参数如下所示:
-
host
– 要访问的数据库集群(集群终端节点)的主机名。 -
port
– 用于连接到数据库集群的端口号 -
sslmode
– 要使用的 SSL 模式当您使用
sslmode=verify-full
时,SSL 连接将针对 SSL 证书中的终端节点验证数据库集群终端节点。 -
sslrootcert
– 包含公有密钥的 SSL 证书文件的完整路径有关更多信息,请参阅利用 SSL/TLS 保护 Aurora PostgreSQL 数据。
要下载 SSL 证书,请参阅 使用 SSL/TLS 加密与数据库集群的连接。
-
dbname
– 要访问的数据库 -
user
– 要访问的数据库账户 -
password
– 已签名的 IAM 身份验证令牌
注意
您不能使用自定义 Route 53 DNS 记录或 Aurora 自定义端点代替数据库集群端点来生成身份验证令牌。
以下示例演示了使用 psql 进行连接。在该示例中,psql 将环境变量 RDSHOST
用于主机,将环境变量 PGPASSWORD
用于生产的令牌。/sample_dir/
则是包含公有密钥的 SSL 证书文件的完整路径。
export RDSHOST="
mypostgres-cluster.cluster-123456789012.us-west-2.rds.amazonaws.com
" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port5432
--regionus-west-2
--usernamejane_doe
)" psql "host=$RDSHOST port=5432
sslmode=verify-full sslrootcert=/sample_dir/
global-bundle.pem dbname=DBName
user=jane_doe
password=$PGPASSWORD"
如果您想通过代理连接到数据库集群,请参阅使用 IAM 身份验证连接到代理。