通过 RDS Proxy 连接到数据库
通过代理连接到 Aurora 数据库集群或使用 Aurora Serverless v2 的集群的方式通常与直接连接到数据库的方式相同。主要区别在于您指定代理端点而不是集群端点。默认情况下,所有代理连接都具有读/写功能,并使用写入器实例。如果您通常使用读取器端点进行只读连接,则可以为代理创建额外的只读端点。您可以通过相同的方式使用该端点。有关更多信息,请参阅 代理终端节点概述。
使用数据库凭证连接到数据库
执行以下步骤,使用数据库凭证连接到代理:
-
查找代理端点。在 Amazon Web Services 管理控制台 中,您可以在相应代理的详细信息页面上找到端点。通过 Amazon 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" } ] ] -
在客户端应用程序的连接字符串中指定该端点作为主机参数。例如,指定代理端点作为
mysql -h选项或psql -h选项的值。 -
提供您通常使用的相同数据库用户名和密码。
使用 IAM 身份验证连接到数据库
在对 RDS 代理使用 IAM 身份验证时,客户端与代理之间的身份验证有两种选择:
-
将数据库用户设置为使用常规用户名和密码进行身份验证。RDS 代理从 Secrets Manager 中检索用户名和密码凭证。从RDS 代理至底层数据库的连接不经由 IAM。
-
还可以使用端到端 IAM 身份验证,通过代理使用 IAM 连接到数据库,而无需提供数据库凭证。
要使用 IAM 身份验证连接到 RDS 代理,请使用与对 Aurora 数据库集群使用 IAM 身份验证相同的常规连接过程。有关使用 IAM 的一般信息,请参阅Amazon Aurora 中的安全性。如果使用端到端 IAM 身份验证,请向您的数据库用户提供 IAM 身份验证插件。请参阅使用 IAM 身份验证创建数据库账户。
RDS Proxy 在 IAM 用法方面的主要区别包括:
-
使用标准 IAM 身份验证时,数据库用户在数据库中拥有常规凭证。您可以设置包含这些用户名和密码的 Secrets Manager 密钥,并授权 RDS Proxy 从 Secrets Manager 中检索凭证。IAM 身份验证应用于您的客户端程序与代理之间的连接。然后,代理使用从 Secrets Manager 中检索的用户名和密码凭证对数据库进行身份验证。
-
使用端到端 IAM 身份验证时,无需为数据库凭证配置 Secrets Manager 密钥。IAM 身份验证适用于客户端与代理及代理与数据库之间的连接。
-
指定代理端点,而不是实例、集群或读取器端点。有关代理端点的详细信息,请参阅 使用 IAM 身份验证连接到数据库集群。
-
当使用 IAM 身份验证连接到代理时,确保您使用传输层安全性 (TLS)/安全套接字层 (SSL)。
您可以通过修改 IAM 策略授予特定用户对代理的访问权限。下面是一个示例。
"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"
提示
为 RDS 代理连接配置 IAM 身份验证时,请遵循以下重要准则以避免连接问题:
-
在为同一数据库用户或角色维护常规密码身份验证时,请勿授予
rds_iam角色。 -
请记住,当客户端使用 IAM 身份验证连接到 RDS 代理时,RDS 代理始终通过 Secrets Manager 使用密码身份验证连接到数据库。
-
如果您经常遇到连接终止和重新连接的情况,请撤销用户或角色的所有现有
rds_iam授权,仅使用密码身份验证。 -
确保您的密码策略符合 SCRAM-SHA-256 安全字符要求。
对同一个数据库用户混用 IAM 和密码身份验证方法可能会导致连接不稳定。
连接到 PostgreSQL 的注意事项
如果您创建新的 PostgreSQL 数据库用户来连接到 RDS 代理,请确保授予该用户对数据库的 CONNECT 权限。否则,用户将无法建立连接。有关更多信息,请参阅 使用 RDS 代理时向 PostgreSQL 数据库添加新数据库用户。
当客户端启动到 PostgreSQL 数据库的连接时,它会发送一条启动消息。此消息包含参数名称/值字符串对。有关详细信息,请参阅 PostgreSQL 文档中的 PostgreSQL 消息格式StartupMessage。
当您通过 RDS 代理进行连接时,启动消息可以包含以下当前识别的参数:
-
user -
database
启动消息还可以包含以下其他运行时参数:
有关 PostgreSQL 消息收发的更多信息,请参阅 PostgreSQL 文档中的前端/后端协议
对于 PostgreSQL,如果您使用 JDBC,我们建议您执行以下操作以避免固定:
-
将 JDBC 连接参数
assumeMinServerVersion至少设置为9.0以避免固定。这可阻止 JDBC 驱动程序在运行SET extra_float_digits = 3时,在连接启动期间执行额外的往返行程。 -
将 JDBC 连接参数
ApplicationName设置为以避免固定。这样做会阻止 JDBC 驱动程序在运行any/your-application-nameSET application_name = "PostgreSQL JDBC Driver"时,在连接启动期间执行额外的往返行程。请注意,JDBC 参数为ApplicationName,但 PostgreSQLStartupMessage参数为application_name。
有关更多信息,请参阅 避免固定 RDS 代理。有关使用 JDBC 进行连接的更多信息,请参阅 PostgreSQL 文档中的连接到数据库