通过命令行使用 IAM 身份验证连接到数据库实例:Amazon CLI 和 psql 客户端 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过命令行使用 IAM 身份验证连接到数据库实例:Amazon CLI 和 psql 客户端

可以使用 Amazon CLI 和 psql 命令行工具从命令行连接到 Amazon RDS for PostgreSQL 数据库实例,如下所述。

先决条件

以下是使用 IAM 身份验证连接到数据库实例的先决条件:

注意

有关使用具有 IAM 身份验证的 pgAdmin 连接到数据库的信息,请参阅博客文章使用 IAM 身份验证通过 pgAdmin Amazon Aurora PostgreSQL 或 Amazon RDS for PostgreSQL 进行连接

生成 IAM 身份验证令牌

身份验证令牌包含几百个字符,因此,很难使用命令行对其进行处理。该问题的解决方式是,将令牌保存到一个环境变量中,然后在连接时使用此变量。以下示例说明了如何使用 Amazon CLI 通过 generate-db-auth-token 命令获取签名的身份验证令牌,并将其存储在 PGPASSWORD 环境变量中。

export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )"

在该示例中,generate-db-auth-token 命令的参数如下所示:

  • --hostname – 要访问的数据库实例(集群终端节点)的主机名。

  • --port – 用于连接到数据库实例的端口号

  • --region – 在其中运行数据库实例的 Amazon 区域

  • --username – 要访问的数据库账户

生成的令牌的前几个字符与以下内容类似。

rdspostgres.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 记录代替数据库实例端点来生成身份验证令牌。

连接到 Amazon RDS 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 与 PostgreSQL 数据库实例结合使用

    要下载 SSL 证书,请参阅 使用 SSL/TLS 加密与数据库实例的连接

  • dbname – 要访问的数据库

  • user – 要访问的数据库账户

  • password – 已签名的 IAM 身份验证令牌

注意

您不能使用自定义 Route 53 DNS 记录代替数据库实例端点来生成身份验证令牌。

以下示例演示了使用 psql 进行连接。在该示例中,psql 将环境变量 RDSHOST 用于主机,将环境变量 PGPASSWORD 用于生产的令牌。/sample_dir/ 则是包含公有密钥的 SSL 证书文件的完整路径。

export RDSHOST="rdspostgres.123456789012.us-west-2.rds.amazonaws.com" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username jane_doe )" psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=/sample_dir/global-bundle.pem dbname=DBName user=jane_doe password=$PGPASSWORD"

如果您想通过代理连接到数据库实例,请参阅使用 IAM 身份验证连接到代理