我有一个预置的 Amazon Aurora 数据库集群,我想将其配置为可公开访问。我还想从外部连接保护我的 Aurora 数据库集群。我该如何操作?
简短描述
要直接从 Amazon Virtual Private Cloud(Amazon VPC)外部连接到 Aurora 数据库集群,集群中的实例必须满足以下要求:
- 数据库实例具有公有 IP 地址。
- 数据库实例在可公开访问的子网中运行。
除了将数据库实例配置为从 VPC 外部连接外,您还可以使用传输层安全性协议(TLS)保护连接。
解决方法
将数据库实例的“可公开访问”设置为“是”
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 外部的资源进行通信。
对于 Aurora 数据库实例,您无法选择特定的子网,而是在创建实例时选择数据库子网组。
数据库子网组是属于 VPC 的子网的集合。在创建底层主机时,Amazon RDS 会从数据库子网组中随机选择一个子网。通常,VPC 具有公有子网和私有子网。如果数据库子网组包含公有子网和私有子网,则在公有子网或私有子网中启动底层主机。如果底层主机在私有子网中启动,则无法从 VPC 外部连接到数据库实例。
而是应创建具有类似网络配置的子网的数据库子网组。例如,为公有子网创建一个数据库子网组,为私有子网创建第二个数据库子网组。有关更多信息,请参阅在子网组中使用数据库实例。
遵循以下步骤,以确保数据库实例使用的子网可以访问互联网:
- 验证是否有互联网网关连接到您的 VPC。
- 验证数据库子网组中的所有子网是否都使用具有互联网网关的路由表。
- 如果子网使用 VPC 的主路由表,则为互联网网关添加路由(目标为 0.0.0.0/0)。
- 如果需要,创建一个自定义路由表,其中包含到互联网网关的路由,然后将其关联到子网。
- 在安全组的入站规则中添加要连接到数据库实例的源公有 IP 地址。
- 对于规则 Type(类型),选择 MySQL/Aurora 或 PostgreSQL,具体取决于您的引擎类型。
- 对于 Source(源),手动输入 CIDR 范围,或选择 My IP(我的 IP)以从同一工作站连接到数据库实例。
从 VPC 外部的连接保护数据库集群
您可以使用 TLS 加密来自 VPC 外部的连接,因为数据通过互联网进行传输。要确认您使用的是最高级别的安全性,请使用 ssl-ca 参数传递 CA 证书,然后开启主机名验证。根据您所使用的 Aurora 版本,使用以下示例命令执行 TLS 连接。
Amazon 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
Amazon 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。
相关信息
将 SSL/TLS 与 Aurora MySQL 数据库集群配合使用
使用 SSL 保护 Aurora PostgreSQL 数据
如何使用堡垒主机从我的 Linux/macOS 计算机连接到我的 Amazon RDS 数据库实例?
如何在 Amazon RDS 控制台中配置私有和公有 Aurora 端点?