通过 RDS Proxy 连接到数据库 - Amazon Relational Database Service

通过 RDS Proxy 连接到数据库

通过代理或通过连接到数据库来连接到 RDS 数据库实例的方式通常是相同的。有关更多信息,请参阅 代理终端节点概述

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

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

  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 代理,请使用与对 RDS 数据库实例使用 IAM 身份验证相同的常规连接过程。有关使用 IAM 的一般信息,请参阅Amazon RDS 中的安全性

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"

使用 Microsoft SQL Server 连接到代理的注意事项

要使用 IAM 身份验证连接到代理,请勿使用密码字段。相反,您可以在令牌字段中为每种类型的数据库驱动程序提供相应的令牌属性。例如,对 JDBC 使用 accessToken 属性,或对 ODBC 使用 sql_copt_ss_access_token 属性。或者对于 .NET SqlClient 驱动程序使用 AccessToken 属性。您不能对不支持令牌属性的客户端使用 IAM 身份验证。

在某些情况下,代理无法共享数据库连接,而是将从客户端应用程序到代理的连接固定到专用的数据库连接。有关这些条件的更多信息,请参阅 避免固定 RDS 代理

使用 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 文档中的连接到数据库