使用 AWS PrivateLink 管理和连接到 Amazon Aurora DSQL 集群
借助适用于 Amazon Aurora DSQL 的 AWS PrivateLink,您可以在 Amazon Virtual Private Cloud 中预置接口 Amazon VPC 端点(接口端点)。这些端点可从位于本地(通过 Amazon VPC 及 Direct Connect)或其它 AWS 区域(通过 Amazon VPC 对等连接)中的应用程序直接访问。使用 AWS PrivateLink 和接口端点,您可以简化应用程序与 Aurora DSQL 之间的私有网络连接。
Amazon VPC 中的应用程序无需公有 IP 地址,即可使用 Amazon VPC 接口端点访问 Aurora DSQL。
接口端点由一个或多个弹性网络接口(ENI)表示,这些接口是从 Amazon VPC 中的子网分配的私有 IP 地址。通过接口端点向 Aurora DSQL 发出的请求仍留在 AWS 网络上。有关如何将 Amazon VPC 与本地网络连接的更多信息,请参阅 Direct Connect User Guide 和《AWS Site-to-Site VPN VPN User Guide》。
有关接口端点的一般信息,请参阅《AWS PrivateLink User Guide》中的 Access an AWS service using an interface Amazon VPC endpoint。
适用于 Aurora DSQL 的 Amazon VPC 端点类型
Aurora DSQL 需要两种不同类型的 AWS PrivateLink 端点。
-
管理端点:此端点用于 Aurora DSQL 集群上的管理操作,例如
get、create、update、delete和list。请参阅使用 AWS PrivateLink 管理 Aurora DSQL 集群。 -
连接端点:此端点用于通过 PostgreSQL 客户端连接到 Aurora DSQL 集群。请参阅使用 AWS PrivateLink 连接到 Aurora DSQL 集群。
使用适用于 Aurora DSQL 的 AWS PrivateLink 时的注意事项
Amazon VPC 注意事项面向适用于 Aurora DSQL 的 AWS PrivateLink。有关更多信息,请参阅《AWS PrivateLink 指南》中的使用接口 VPC 端点访问 AWS 服务和 AWS PrivateLink 配额。
使用 AWS PrivateLink 管理 Aurora DSQL 集群
您可以使用 AWS Command Line Interface或 AWS 软件开发工具包(SDK)通过 Aurora DSQL 接口端点管理 Aurora DSQL 集群。
创建 Amazon VPC 端点
要创建 Amazon VPC 接口端点,请参阅《AWS PrivateLink Guide》中的 Create an Amazon VPC endpoint。
aws ec2 create-vpc-endpoint \ --regionregion\ --service-name com.amazonaws.region.dsql \ --vpc-idyour-vpc-id\ --subnet-idsyour-subnet-id\ --vpc-endpoint-type Interface \ --security-group-idsclient-sg-id\
要对 Aurora DSQL API 请求使用默认区域 DNS 名称,请在创建 Aurora DSQL 接口端点时不要禁用私有 DNS。启用私有 DNS 后,从 Amazon VPC 内向 Aurora DSQL 服务发出的请求将自动解析到 Amazon VPC 端点的私有 IP 地址,而不是公有 DNS 名称。启用私有 DNS 后,在 Amazon VPC 内发出的 Aurora DSQL 请求将自动解析到 Amazon VPC 端点。
如果未启用私有 DNS,请使用 --region 和 --endpoint-url 参数以及 AWS CLI 命令,通过 Aurora DSQL 接口端点来管理 Aurora DSQL 集群。
使用端点 URL 列出集群
在以下示例中,将 AWS 区域 us-east-1 和 Amazon VPC 端点 ID vpce-1a2b3c4d-5e6f.dsql.us-east-1.vpce.amazonaws.com 的 DNS 名称替换为您自己的信息。
aws dsql --regionus-east-1--endpoint-url https://vpce-1a2b3c4d-5e6f---dsql---us-east-1---vpce.amazonaws.com.rproxy.govskope.calist-clusters
API 操作
有关在 Aurora DSQL 中管理资源的文档,请参阅 Aurora DSQL API 参考。
管理端点策略
通过全面测试和配置 Amazon VPC 端点策略,有助于确保 Aurora DSQL 集群安全、合规,并符合组织的特定访问控制和治理要求。
示例:完整的 Aurora DSQL 访问策略
以下策略将授予通过指定的 Amazon VPC 端点访问所有 Amazon DSQL 操作和资源的完全访问权限。
aws ec2 modify-vpc-endpoint \ --vpc-endpoint-id vpce-xxxxxxxxxxxxxxxxx \ --region region \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "dsql:*", "Resource": "*" } ] }'
示例:受限的 Aurora DSQL 访问策略
以下策略仅允许这些 Aurora DSQL 操作。
-
CreateCluster -
GetCluster -
ListClusters
所有其它 Aurora DSQL 操作均会遭拒绝。
使用 AWS PrivateLink 连接到 Aurora DSQL 集群
AWS PrivateLink 端点设置完毕并处于活动状态后,就可以使用 PostgreSQL 客户端连接到 Aurora DSQL 集群了。以下连接说明概述了为通过 AWS PrivateLink 端点进行连接而构造正确的主机名的步骤。
设置 AWS PrivateLink 连接端点
步骤 1:获取集群的服务名称
在创建用于连接到集群的 AWS PrivateLink 端点时,首先需要获取特定于集群的服务名称。
步骤 2:创建 Amazon VPC 端点
使用在上一步中获得的服务名称,创建 Amazon VPC 端点。
重要
以下连接说明仅适用于在启用私有 DNS 时连接到集群。创建端点时请勿使用 --no-private-dns-enabled 标志,因为这会使下面的连接说明无法正常发挥作用。如果您禁用私有 DNS,则需要创建自己的通配符私有 DNS 记录,该记录指向已创建的端点。
通过 Direct Connect 或 Amazon VPC 对等连接进行连接时的额外设置
可能需要进行一些额外的设置,才能使用本地设备上的 AWS PrivateLink 连接端点通过 Amazon VPC 对等连接或 Direct Connect 连接到 Aurora DSQL 集群。如果您的应用程序与 AWS PrivateLink 端点在同一个 Amazon VPC 中运行,则无需此设置。上面创建的私有 DNS 条目无法在端点的 Amazon VPC 之外正确解析,但您可以创建自己的私有 DNS 记录,这些记录将解析为您的 AWS PrivateLink 连接端点。
创建指向 AWS PrivateLink 端点的完全限定域名的私有 CNAME DNS 记录。所创建的 DNS 记录的域名应由以下各个部分构造而成:
服务名称中的服务标识符。例如:
dsql-fnh4这些区域有:AWS 区域
使用以下格式的域名创建 CNAME DNS 记录:*.service-identifier.region.on.aws
域名的格式之所以重要,有两个原因:
使用
verify-fullSSL 模式时,用于连接到 Aurora DSQL 的主机名必须与 Aurora DSQL 的服务器证书相匹配。这可确保最高级别的连接安全性。Aurora DSQL 使用用于连接到 Aurora DSQL 的主机名的集群 ID 部分来标识连接的集群。
如果无法创建私有 DNS 记录,您仍然可以连接到 Aurora DSQL。请参阅在无私有 DNS 的情况下使用 AWS PrivateLink 端点连接到 Aurora DSQL 集群。
使用 AWS PrivateLink 连接端点连接到 Aurora DSQL 集群
AWS PrivateLink 端点设置完毕并处于活动状态(检查 State 是否为 available)后,就可以使用 PostgreSQL 客户端连接到 Aurora DSQL 集群了。有关使用 AWS SDK 的说明,您可以按照 Programming with Aurora DSQL 中的指导进行操作。您必须更改集群端点以匹配主机名格式。
构造主机名
通过 AWS PrivateLink 进行连接的主机名不同于公有 DNS 主机名。您需要使用以下组件来构造它。
-
Your-cluster-id -
服务名称中的服务标识符。例如:
dsql-fnh4 -
AWS 区域。例如:
us-east-1
采用以下格式:cluster-id.service-identifier.region.on.aws
示例:使用 PostgreSQL 进行连接
# Set environment variables export CLUSTERID=your-cluster-idexport REGION=us-east-1 export SERVICE_IDENTIFIER=dsql-fnh4 # This should match the identifier in your service name # Construct the hostname export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws" # Generate authentication token export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME) # Connect using psql psql -d postgres -h $HOSTNAME -U admin
在无私有 DNS 的情况下使用 AWS PrivateLink 端点连接到 Aurora DSQL 集群
上面的连接说明依赖于私有 DNS 记录。如果您的应用程序与您的 AWS PrivateLink 端点在同一 Amazon VPC 中运行,则会为您创建 DNS 记录。或者,如果您通过 Amazon VPC 对等连接或 Direct Connect 从本地设备进行连接,则可以创建自己的私有 DNS 记录。但是,由于您的安全团队施加了网络限制,因此并非始终可以设置 DNS 记录。如果您的应用程序必须使用 Direct Connect 或从对等连接的 Amazon VPC 进行连接,并且无法设置 DNS 记录,那么您仍然可以连接到 Aurora DSQL。
Aurora DSQL 使用主机名的集群 ID 部分来标识连接的集群,但是如果无法设置 DNS 记录,Aurora DSQL 支持使用 amzn-cluster-id 连接选项指定目标集群。使用此选项,可以在连接时使用 AWS PrivateLink 端点的完全限定域名作为主机名。
重要
使用 AWS PrivateLink 端点的完全限定域名或 IP 地址进行连接时,不支持 verify-full SSL 模式。因此,最好设置私有 DNS。
示例:使用 PostgreSQL 指定集群 ID 连接选项
# Set environment variables export CLUSTERID=your-cluster-idexport REGION=us-east-1 export HOSTNAME=vpce-04037adb76c111221-d849uc2p.dsql-fnh4.us-east-1.vpce.amazonaws.com # This should match your endpoint's fully-qualified domain name # Construct the hostname used to generate the authentication token export AUTH_HOSTNAME="$CLUSTERID.dsql.$REGION.on.aws" # Generate authentication token export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $AUTH_HOSTNAME) # Specify the amzn-cluster-id connection option export PGOPTIONS="-c amzn-cluster-id=$CLUSTERID" # Connect using psql psql -d postgres -h $HOSTNAME -U admin
排查 AWS PrivateLink 问题
常见问题和解决方案
下表列出了将 AWS PrivateLink 与 Aurora DSQL 结合使用时相关的常见问题和解决方案。
| 问题 | 可能的原因 | 解决方案 |
|---|---|---|
|
连接超时 |
安全组配置不正确 |
使用 Amazon VPC Reachability Analyzer 可确保网络设置支持端口 5432 上的流量。 |
|
DNS 解析失败 |
未启用私有 DNS |
确认 Amazon VPC 端点是在启用私有 DNS 的情况下创建的。 |
|
身份验证失败 |
凭证不正确或令牌过期 |
生成新的身份验证令牌并验证用户名。 |
|
找不到服务名称 |
集群 ID 不正确 |
在获取服务名称时,请仔细检查您的集群 ID 和 AWS 区域。 |
相关资源
有关更多信息,请参阅以下资源: