开始使用 RDS Proxy - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

开始使用 RDS Proxy

在以下部分中,您可以了解如何设置 RDS Proxy。您还可以了解如何设置相关的安全性选项,以控制哪些人可以访问各个代理,以及各个代理如何连接到数据库实例。

设置网络先决条件

使用 RDS Proxy 需要您在 Aurora 数据库集群或 RDS 数据库实例与 RDS 代理之间拥有通用的 Virtual Private Cloud(VPC)。此 VPC 应至少有两个位于不同可用区中的子网。您的账户可以拥有这些子网,或与其他账户共享它们。有关 VPC 共享的信息,请参阅使用共享 VPC。您的客户端应用程序资源(例如 Amazon EC2、Lambda 或 Amazon ECS)可以位于同一 VPC 中,也可以位于与代理不同的 VPC 中。请注意,如果已成功连接到任何 RDS 数据库实例或 Aurora 数据库集群,则您已拥有所需的网络资源。

以下 Linux 示例展示了检查 Amazon CLI 账户拥有的 VPC 和子网的 Amazon 命令。尤其是,在使用 CLI 创建代理时,您可以将子网 ID 作为参数传递。

aws ec2 describe-vpcs aws ec2 describe-internet-gateways aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort

以下 Linux 示例展示了用于确定与特定 Aurora 数据库集群或 RDS 数据库实例对应的子网 ID 的 Amazon CLI 命令。对于 Aurora 集群,首先,您可以找到其中一个关联数据库实例的 ID。您可以通过检查数据库实例的描述输出中 DBSubnetGroupSubnets 属性中的嵌套字段来提取该数据库实例使用的子网 ID。在为该数据库服务器设置代理时,您可以指定部分或全部这些子网 ID。

$ # Optional first step, only needed if you're starting from an Aurora cluster. Find the ID of any DB instance in the cluster. $ aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text my_instance_id instance_id_2 instance_id_3 ... $ # From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text subnet_id_1 subnet_id_2 subnet_id_3 ...

作为替代方案,您可以首先找到数据库实例的 VPC ID。然后,您可以检查 VPC 以查找其子网。以下 Linux 示例展示了操作步骤。

$ # From the DB instance, find the VPC. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text my_vpc_id $ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text subnet_id_1 subnet_id_2 subnet_id_3 subnet_id_4 subnet_id_5 subnet_id_6

在 Amazon Secrets Manager 中设置数据库凭证

对于您创建的每个代理,首先使用 Secrets Manager 服务来存储用户名和密码凭证集。您可以在 RDS 数据库实例或 Aurora 数据库集群上,为代理连接到的每个数据库用户账户分别创建 Secrets Manager 密钥。

在 Secrets Manager 中,您可以使用 usernamepassword 字段的值创建这些密钥。这样一来,代理可以连接到与代理关联的任何 RDS 数据库实例或 Aurora 数据库集群上的相应数据库用户。为此,您可以使用 Credentials for other database (其他数据库的凭证)Credentials for RDS database (RDS 数据库凭证)Other type of secrets (其他密钥类型) 设置。为用户名密码字段填写相应的值,以及任何其他必填字段的占位符值。代理会忽略其他存在于密钥中的字段,如主机端口。这些详细信息由代理自动提供。

您也可以选择其他密钥类型。在这种情况下,您可以使用名为 usernamepassword 的键创建密钥。

由于代理使用的密钥不与特定数据库服务器绑定,因此,如果在多个数据库服务器上使用相同的凭证,则可对多个代理重用一个密钥。例如,您可以在一组开发和测试服务器上使用相同的凭证。

要以特定用户身份通过代理进行连接,请确保与密钥关联的密码与该用户的数据库密码相匹配。如果不匹配,您可以在 Secrets Manager 中更新关联的密钥。在这种情况下,您仍然可以连接到密钥凭证和数据库密码确实匹配的其他账户。

通过 Amazon CLI 或 RDS API 创建代理时,请为代理可访问的所有数据库用户账户指定相应密钥的 Amazon Resource Name (ARN)。在 Amazon Web Services Management Console 中,根据描述性名称选择密钥。

有关在 Secrets Manager 中创建密钥的说明,请参阅 Secrets Manager 文档中的创建密钥页面。使用下面的方法之一:

  • 使用控制台中的 Secrets Manager

  • 要使用 CLI 创建与RDS Proxy 一起使用的 Secrets Manager 密钥,请使用类似如下的命令。

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'

例如,以下命令为两个数据库用户(一个名为 app-user,另一个名为 admin)创建 Secrets Manager 密钥。

aws secretsmanager create-secret \ --name admin_secret_name --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name proxy_secret_name --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

要查看您的 Amazon 账户拥有的密钥,请使用以下命令。

aws secretsmanager list-secrets

使用 CLI 创建代理时,将一个或多个密钥的 Amazon Resource Name (ARN) 传递给 --auth 参数。以下 Linux 示例展示了如何准备报告,其中仅包含 Amazon 账户所拥有的每个密钥的名称和 ARN。此示例使用了 --output table 版本 2 中提供的 Amazon CLI 参数。如果您使用的是 Amazon CLI 版本 1,请改用 --output text

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

要验证是否在密钥中以正确的格式存储了正确的凭据,请使用以下命令。以密钥的短名称或 ARN 代替 your_secret_name

aws secretsmanager get-secret-value --secret-id your_secret_name

输出应包括一行 JSON 编码值,如下所示。

"SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}",

设置 Amazon Identity and Access Management (IAM) 策略

在 Secrets Manager 中创建密钥后,请创建一个可以访问这些密钥的 IAM 策略。有关将 IAM 与 RDS 和 Aurora 结合使用的一般信息,请参阅 Amazon RDS 中的 Identity and Access Management

提示

如果您使用 IAM 控制台,则应用下面的过程。如果您使用 Amazon Web Services Management Console for RDS,RDS 可以自动为您创建 IAM 策略。在这种情况下,您可以跳过下面的过程。

创建用于访问您的 Secrets Manager 密钥以便与代理一起使用的 IAM 策略

  1. 登录到 IAM 控制台。按照创建角色过程进行操作,如创建 IAM 角色中所述。包括将角色添加到数据库步骤。

  2. 对于新角色,请执行添加内联策略步骤。使用与编辑 IAM 策略中相同的一般过程。将下面的 JSON 粘贴到 JSON 文本框中。替换您自己的账户 ID。将您的 Amazon 区域替换为 us-east-2。将 Amazon Resource Name (ARN) 替换为您创建的密钥。对于 kms:Decrypt 操作,请替换原定设置 Amazon KMS key 或您自己的 KMS 密钥的 ARN,具体取决于您使用哪个 KMS 密钥来加密 Secrets Manager 密钥。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. 编辑此 IAM 角色的信任策略。将下面的 JSON 粘贴到 JSON 文本框中。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

以下命令通过 Amazon CLI 执行相同的操作。

PREFIX=choose_an_identifier aws iam create-role --role-name choose_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' aws iam put-role-policy --role-name same_role_name_as_previous \ --policy-name $PREFIX-secret-reader-policy --policy-document """ same_json_as_in_previous_example """ aws kms create-key --description "$PREFIX-test-key" --policy """ { "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam::account_id:role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] } """

创建 RDS Proxy

要管理指定数据库实例集的连接,您可以创建代理。您可以将代理与 RDS for MySQL 数据库实例、PostgreSQL 数据库实例或 Aurora 数据库集群关联。

创建代理

  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Proxies (代理)

  3. 选择 Create proxy (创建代理)

  4. 为您的代理选择所有设置。

    对于代理配置,请提供以下信息:

    • 代理标识符。指定选择的名称,该名称在您的 Amazon 账户 ID 和当前 Amazon 区域内唯一。

    • 引擎兼容性。选择 MySQLPOSTGRESQL

    • 需要传输层安全性。如果您希望代理对所有客户端连接强制执行 TLS/SSL,则选择此设置。如果您使用与代理的加密或未加密连接,则代理在与底层数据库建立连接时使用相同的加密设置。

    • 空闲客户端连接超时。选择在代理关闭客户端连接之前该连接可以处于空闲状态的时间段。默认值为 1800 秒(30 分钟)。如果应用程序未在上一请求完成后的指定时间内提交新请求,则客户端连接视为空闲。底层数据库连接保持打开状态并返回到连接池。因此,它可以重复用于新的客户端连接。

      如果您希望代理主动删除过时的连接,请考虑减少空闲客户端连接超时。如果您的工作负载会出现峰值,请考虑增加空闲客户端连接超时以节省建立连接的成本。

    对于目标组配置,请提供以下信息:

    • 数据库。选择一个要通过此代理访问的 RDS 数据库实例或 Aurora 数据库集群。该列表仅包含具有兼容数据库引擎、引擎版本和其他设置的数据库实例和集群。如果列表为空,请创建与 RDS Proxy 兼容的新数据库实例或集群。为此,请按照 创建 Amazon RDS 数据库实例 中的过程操作。然后尝试再次创建代理。

    • 连接池最大连接数。指定一个从 1 到 100 的值。此设置表示 RDS Proxy 可用于其连接的 max_connections 值的百分比。如果您只打算对此数据库实例或集群使用一个代理,可以将此值设置为 100。有关 RDS Proxy 如何使用此设置的详细信息,请参阅 控制连接限制和超时

    • Session pinning filters (会话固定筛选条件)。(可选)这是一项高级设置,用于解决特定应用程序的性能问题。目前,唯一的选择是 EXCLUDE_VARIABLE_SETS。只有同时满足以下两个条件时才选择一个筛选条件:您的应用程序由于某些类型的 SQL 语句而未重用连接,并且您可以验证使用这些 SQL 语句重用连接不会影响应用程序的正确性。有关更多信息,请参阅“避免固定”。

    • Connection borrow timeout (连接借用超时)。在某些情况下,您可能希望代理有时使用所有可用的数据库连接。在这种情况下,您可以指定在返回超时错误之前代理等待数据库连接可用的时间。您最多可以指定五分钟的时间段。仅当代理已打开最大连接数并且所有连接均已在使用时,该设置才适用。

    • 初始化查询。(可选)您可以为代理指定一个或多个 SQL 语句,以便在打开每个新数据库连接时运行。设置通常与 SET 语句一起使用,以确保每个连接具有相同的设置,如时区和字符集。对于多个语句,请使用分号作为分隔符。您还可以在单个 SET 语句中包含多个变量,例如 SET x=1, y=2。初始化查询目前不支持 PostgreSQL。

    对于连接,请提供以下信息:

    • Secrets Manager 密钥。至少选择一个 Secrets Manager 密钥,该密钥包含要使用此代理访问的 RDS 数据库实例或 Aurora 数据库集群的数据库用户凭证。

    • IAM role (IAM 角色)。选择一个有权访问您之前所选的 Secrets Manager 密钥的 IAM 角色。您还可以选择 Amazon Web Services Management Console 来创建新 IAM 角色并使用该角色。

    • IAM Authentication (IAM 身份验证)。选择是要求还是禁止对代理连接进行 IAM 身份验证。IAM 身份验证或本机数据库身份验证的选择适用于访问此代理的所有数据库用户。

    • Subnets (子网)。此字段预填充与您的 VPC 关联的所有子网。您可以删除此代理不需要的任何子网。必须至少保留两个子网。

    提供其他连接配置:

    • VPC security group (VPC 安全组)。选择现有的 VPC 安全组。您还可以选择 Amazon Web Services Management Console 来创建新安全组并使用该安全组。

      注意

      该安全组必须允许访问代理连接到的数据库。同一安全组用于从应用程序到代理的入口以及从代理到数据库的出口。例如,假设您对数据库和代理使用同一安全组。在这种情况下,请确保您指定该安全组中的资源可以与同一安全组中的其他资源进行通信。

      使用共享 VPC 时,您不能使用 VPC 的默认安全组,也不能使用属于其他账户的安全组。选择属于您账户的安全组。如果不存在,请创建一个。有关此限制的详细信息,请参阅使用共享 VPC

    (可选)提供高级配置:

    • Enable enhanced logging (启用增强型日志记录)。您可以启用该设置来解决代理兼容性或性能问题。

      启用该设置后,RDS Proxy 会在其日志中包含有关 SQL 语句的详细信息。这些信息可帮助您调试涉及 SQL 行为或代理连接的性能和可扩展性的问题。调试信息包括您通过代理提交的 SQL 语句的文本。因此,只有在需要调试,并且仅当您已采取安全措施来保护日志中显示的任何敏感信息时,才启用该设置。

      为了最大限度地减少与代理相关的开销,在您启用该设置 24 小时后,RDS Proxy 会自动禁用它。暂时启用它以解决特定问题。

  5. 选择 Create Proxy (创建代理)

要创建代理,请使用 Amazon CLI 命令 create-db-proxy--engine-family 值区分大小写。

对于 Linux、macOS 或 Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

对于 Windows:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]
提示

如果您尚不知道要用于 --vpc-subnet-ids 参数的子网 ID,请参阅 设置网络先决条件 获取有关如何查找可以使用的子网 ID 的示例。

注意

安全组必须允许访问代理连接到的数据库。同一安全组用于从应用程序到代理的入口以及从代理到数据库的出口。例如,假设您对数据库和代理使用同一安全组。在这种情况下,请确保您指定该安全组中的资源可以与同一安全组中的其他资源进行通信。

使用共享 VPC 时,您不能使用 VPC 的默认安全组,也不能使用属于其他账户的安全组。选择属于您账户的安全组。如果不存在,请创建一个。有关此限制的详细信息,请参阅使用共享 VPC

要创建代理所需的信息和关联,您还可以使用 register-db-proxy-targets 命令。指定目标组名称 default。创建每个代理时,RDS Proxy 会自动创建一个此名称的目标组。

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances), or [--db-cluster-endpoint endpoint_name] # rds db cluster endpoint (all instances)

要创建 RDS 代理,请调用 Amazon RDS API 操作 CreateDBProxy。传递具有 AuthConfig 数据结构的参数。

创建每个代理时,RDS Proxy 会自动创建一个名为 default 的目标组。通过调用函数 RegisterDBProxyTargets,将 RDS 数据库实例或 Aurora 数据库集群与目标组关联。

查看 RDS Proxy

创建一个或多个 RDS 代理后,您可以查看所有代理以检查其配置详细信息,并选择要修改、删除以及执行其他操作的代理。

使用代理的任何数据库应用程序都要求在连接字符串中使用代理终端节点。

查看您的代理

  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在Amazon Web Services Management Console的右上角,选择在其中创建了 RDS Proxy 的Amazon区域。

  3. 在导航窗格中,选择 Proxies (代理)

  4. 选择 RDS 代理的名称以显示其详细信息。

  5. 在详细信息页面上,Target groups (目标组) 部分显示了代理与特定 RDS 数据库实例或 Aurora 数据库集群的关联方式。您可以访问指向默认目标组页面的链接,以查看有关代理与数据库之间关联的更多详细信息。在该页面上,您可以看到创建代理时指定的设置,如最大连接百分比、连接借用超时、引擎兼容性和会话固定筛选条件。

要使用 CLI 查看您的代理,请使用 describe-db-proxies 命令。默认情况下,它会显示您的 Amazon 账户拥有的所有代理。要查看单个代理的详细信息,请通过 --db-proxy-name 参数指定其名称。

aws rds describe-db-proxies [--db-proxy-name proxy_name]

要查看与代理关联的其他信息,请使用以下命令。

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

使用以下命令序列查看有关与代理关联的内容的更多详细信息:

  1. 要获取代理列表,请运行 describe-db-proxies

  2. 要显示连接参数(如代理可以使用的最大连接百分比),请运行 describe-db-proxy-target-groups --db-proxy-name,并使用代理的名称作为参数值。

  3. 要查看与返回的目标组关联的 RDS 数据库实例或 Aurora 数据库集群的详细信息,请运行 describe-db-proxy-targets

要使用 RDS API 查看您的代理,请使用 DescribeDBProxies 操作。该操作将返回 DBProxy 数据类型的值。

要查看代理连接设置的详细信息,请将此返回值中的代理标识符与 DescribeDBProxyTargetGroups 操作一起使用。该操作将返回 DBProxyTargetGroup 数据类型的值。

要查看与代理关联的 RDS 实例或 Aurora 数据库集群,请使用 DescribeDBProxyTargets 操作。该操作将返回 DBProxyTarget 数据类型的值。

通过 RDS Proxy 连接到数据库

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

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

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

  1. 查找代理终端节点。在 Amazon Web Services Management Console 中,您可以在相应代理的详细信息页面上找到终端节点。通过 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" } ] ]
  2. 在客户端应用程序的连接字符串中指定该终端节点作为主机参数。例如,指定代理终端节点作为 mysql -h 选项或 psql -h 选项的值。

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

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

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

要使用 IAM 身份验证连接到RDS Proxy,请遵循与使用 IAM 身份验证连接到 RDS 数据库实例或 Aurora 集群相同的常规过程。有关将 IAM 与 RDS 和 Aurora 结合使用的一般信息,请参阅 Amazon RDS 中的安全性

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

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

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

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

  • 在直接数据库 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

  • replication

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

有关 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

  • 将 JDBC 连接参数 preferQueryMode 设置为 extendedForPrepared 以避免固定。extendedForPrepared 可以确保扩展模式仅用于预编译语句。

    preferQueryMode 参数的默认值为 extended,它对所有查询都使用扩展模式。扩展模式使用一系列的 PrepareBindExecuteSync 请求以及相应的响应。这种系列类型会导致 RDS 代理中的连接固定。

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