通过 RDS Proxy 连接到数据库 - Amazon Aurora

通过 RDS Proxy 连接到数据库

通过代理连接到 Aurora 数据库集群或使用 Aurora Serverless v2 的集群的方式通常与直接连接到数据库的方式相同。主要区别在于您指定代理端点而不是集群端点。默认情况下,所有代理连接都具有读/写功能,并使用写入器实例。如果您通常使用读取器端点进行只读连接,则可以为代理创建额外的只读端点。您可以通过相同的方式使用该端点。有关更多信息,请参阅 代理终端节点概述

使用本机身份验证连接到代理

执行以下步骤,使用本机身份验证连接到代理:

  1. 查找代理端点。在 AWS Management Console 中,您可以在相应代理的详细信息页面上找到端点。通过 AWS CLI,您可以使用 describe-db-proxies 命令。下面的示例演示如何操作。

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. 在客户端应用程序的连接字符串中指定该端点作为主机参数。例如,指定代理端点作为 mysql -h 选项或 psql -h 选项的值。

  3. 提供您通常使用的相同数据库用户名和密码。

使用 IAM 身份验证连接到代理

在将 IAM 身份验证与RDS Proxy结合使用时,请将数据库用户设置为使用常规用户名和密码进行身份验证。IAM 身份验证适用于从 Secrets Manager 中检索用户名和密码凭证的RDS Proxy。从RDS 代理至底层数据库的连接不经由 IAM。

要使用 IAM 身份验证连接到 RDS 代理,请使用与对 Aurora 数据库集群使用 IAM 身份验证相同的常规连接过程。有关使用 IAM 的一般信息,请参阅Amazon Aurora 中的安全性

RDS Proxy 在 IAM 用法方面的主要区别包括:

  • 您不会使用授权插件配置每个单独的数据库用户。数据库用户在数据库中仍有常规的用户名和密码。您可以设置包含这些用户名和密码的 Secrets Manager 密钥,并授权 RDS Proxy 从 Secrets Manager 中检索凭证。

    IAM 身份验证应用于您的客户端程序与代理之间的连接。然后,代理使用从 Secrets Manager 中检索的用户名和密码凭证对数据库进行身份验证。

  • 指定代理端点,而不是实例、集群或读取器端点。有关代理端点的详细信息,请参阅 使用 IAM 身份验证连接到数据库集群

  • 在直接数据库 IAM 身份验证情况下,您可以有选择地选取数据库用户并将其配置为使用特殊身份验证插件进行标识。然后,您便可以使用 IAM 身份验证连接到这些用户。

    在代理使用案例中,您需要为代理提供包含某些用户的用户名和密码(本机身份验证)的密钥。然后,您便可以使用 IAM 身份验证连接到代理。在这里,您可以通过使用代理端点而非数据库端点生成身份验证令牌来实现此目的。您还可以使用与您所提供密钥的用户名之一匹配的用户名。

  • 当使用 IAM 身份验证连接到代理时,确保您使用传输层安全性 (TLS)/安全套接字层 (SSL)。

您可以通过修改 IAM 策略授予特定用户对代理的访问权限。下面是一个示例。

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

使用 PostgreSQL 连接到代理的注意事项

对于 PostgreSQL,当客户端启动到 PostgreSQL 数据库的连接时,它会发送一条启动消息。此消息包含参数名称/值字符串对。有关详细信息,请参阅 PostgreSQL 文档中的 PostgreSQL 消息格式中的 StartupMessage

通过 RDS 代理进行连接时,启动消息可以包含以下当前识别的参数:

  • user

  • database

启动消息还可以包含以下其他运行时参数:

有关 PostgreSQL 消息收发的更多信息,请参阅 PostgreSQL 文档中的前端/后端协议

对于 PostgreSQL,如果您使用 JDBC,我们建议您执行以下操作以避免固定:

  • 将 JDBC 连接参数 assumeMinServerVersion 至少设置为 9.0 以避免固定。这可阻止 JDBC 驱动程序在运行 SET extra_float_digits = 3 时,在连接启动期间执行额外的往返行程。

  • 将 JDBC 连接参数 ApplicationName 设置为 any/your-application-name 以避免固定。这样做会阻止 JDBC 驱动程序在运行 SET application_name = "PostgreSQL JDBC Driver" 时,在连接启动期间执行额外的往返行程。请注意,JDBC 参数为 ApplicationName,但 PostgreSQL StartupMessage 参数为 application_name

有关更多信息,请参阅 避免固定 RDS 代理。有关使用 JDBC 进行连接的更多信息,请参阅 PostgreSQL 文档中的连接到数据库