如何从 VPC 外部连接到 Amazon Aurora 数据库集群?
上次更新日期:2021 年 1 月 28 日
我有一个 Amazon Aurora 数据库集群,我想从 VPC 外部连接到该集群。我还想从外部连接保护我的 Aurora 数据库集群。我该如何操作?
简短描述
要直接从 VPC 外部连接到 Amazon Aurora 数据库集群,集群中的实例必须满足以下要求:
- 数据库实例必须具有公有 IP 地址
- 数据库实例必须在可公开访问的子网中运行
除了配置数据库实例以使其可以从 VPC 外部连接之外,您还可以使用传输层安全性 (TLS)(以前称为安全套接字层 (SSL))来保护连接。
解决方法
将数据库实例的可公开访问设置为“是”
Amazon Relational Database Service (Amazon RDS) 数据库实例的可公开访问设置控制向数据库实例分配公有 IP 地址。
- 如果设置为否,则数据库实例将没有公有 IP 地址。
- 如果设置为是,则数据库实例将具有公有和私有 IP 地址。
要将数据库实例的可公开访问设置更改为是,请执行以下步骤:
- 打开 Amazon RDS 控制台。
- 从导航窗格中选择 Databases (数据库),然后选择数据库实例。
- 选择 Modify (修改)。
- 在 Connectivity (连接)下,展开 Additional configuratio (其他配置)部分,然后选择 Publicly accessible (可公开访问)。
- 选择 Continue (继续)。
- 选择 Modify DB Instance (修改数据库实例)
注意:您无需选择 Apply Immediately (立即应用)。有关立即应用如何影响停机时间的更多信息,请参阅 Using the Apply Immediately parameter。
在公有子网中运行数据库实例
公有子网是与路由表关联的子网,路由表具有通往互联网网关的路由,通常为默认路由 0.0.0.0/0。此路由使子网中的数据库实例能够与 VPC 外部的资源进行通信。
对于 Amazon Aurora 数据库实例,您无法选择特定的子网,而是在创建实例时选择数据库子网组。
数据库子网组是属于 VPC 的子网的集合。在创建底层主机时,Amazon RDS 会从数据库子网组中随机选择一个子网。通常,一个 VPC 具有公有子网和私有子网。如果数据库子网组同时包含公有子网和私有子网,则可以在公有子网或私有子网中启动底层主机。如果底层主机在私有子网中启动,则无法从 VPC 外部连接到数据库实例。
而是应创建具有类似网络配置的子网的数据库子网组。例如,公有子网的数据库子网组和私有子网的第二个数据库子网组。有关更多信息,请参阅 Working with a DB instance in a subnet group。
请遵循以下步骤,以确保数据库实例使用的子网可以访问互联网:
- 验证是否有互联网网关连接到您的 VPC。
- 验证数据库子网组中的所有子网是否都使用具有互联网网关的路由表。
- 在安全组的入站规则中添加要连接到数据库实例的源公有 IP 地址。
- 对于规则类型,选择 MySQL/Aurora 或 PostgreSQL,具体取决于您的引擎类型。
- 对于源,手动输入 CIDR 范围,或选择 My IP 以从同一工作站连接到数据库实例。
从 VPC 外部的连接保护数据库集群
您可以使用 TLS 加密来自 VPC 外部的连接,因为数据通过互联网进行传输。要确保您使用的是最高级别的安全性,请使用 ssl-ca 参数传递 CA 证书,然后启用主机名验证。根据您所使用的 Aurora 版本,使用以下示例命令执行 TLS 连接。
Aurora MySQL 5.6 及更高版本:
mysql -h test-aurora-56.cluster-xxxxxxxxxxxx.us-east-1.rds.amazonaws.com -u master_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert
Aurora MySQL 5.7 及更高版本:
mysql -h test-aurora-57.cluster-xxxxxxxxxxxx.us-east-1.rds.amazonaws.com -u master_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY
Aurora PostgreSQL:
psql -h test-aurora-pg.cluster-xxxxxxxxxxxx.us-east-1.rds.amazonaws.com -p 5432 "dbname=postgres user=master_user sslrootcert=rds-combined-ca-bundle.pem sslmode=verify-full"
注意:您还可以为数据库集群强制执行 TLS。对于 Aurora MySQL,您必须在数据库用户级别强制执行 TLS。对于 Aurora PostgreSQL,将参数 rds.force_ssl 设置为 1。