我想将我预置的 Amazon Aurora 数据库集群配置为可公开访问,并保护我的 Aurora 数据库集群与外部连接的安全。
简短描述
要使您的 Aurora 数据库集群可公开访问,集群中的实例必须拥有公共 IP 地址并在公共子网中运行。
对于 Aurora 数据库实例,无法选择特定的子网。相反,在创建实例时,必须选择数据库子网组。确保创建具有相似网络配置的数据库子网组。例如,为公共子网创建一个数据库子网组,为私有子网创建另一个数据库子网组。
将数据库实例配置为允许来自 VPC 外部的连接后,您可以使用 TLS 来保护这些连接。
**注意:**除非必须可公开访问,否则最佳安全做法是不允许来自 VPC 外部的连接。
解决方法
将数据库实例的“可公开访问”设置设为“是”
Amazon Relational Database Service (Amazon RDS) 数据库实例的 Publicly accessible(可公开访问)设置用于控制是否向数据库实例分配公共 IP 地址。当您将此设置设为 no(否)时,数据库实例将不会拥有公共 IP 地址。当您将此设置设为 yes(是)时,数据库实例将同时拥有公共 IP 地址和私有 IP 地址。
要将数据库实例的 Publicly accessible(可公开访问)设置更改为 yes(是),请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库),然后选择数据库实例。
- 选择 Modify(修改)。
- 在 Connectivity(连接)部分中,选择 Additional configuration(其他配置),然后选择 Publicly accessible(可公开访问)。
- 选择 Continue(继续)。
- 在 Schedule modifications(计划修改)部分中,选择最适合您的使用案例的选项。
**注意:**Apply immediately(立即应用)选项可能会导致停机。有关详细信息,请参阅使用计划修改设置。
- 选择 Modify DB instance(修改数据库实例)。
在公共子网中运行数据库实例
为确保您的数据库实例所在的公共子网可以访问互联网,请完成以下步骤:
- 创建互联网网关并将其附加到 VPC。
- 在导航窗格中,选择 Subnets(子网)。
- 验证数据库子网组中的所有子网是否均使用具有互联网网关的路由表。
- 如果子网使用 VPC 的主路由表,请为互联网网关添加 0.0.0.0/0 路由。您还可以创建一个包含指向互联网网关路由的自定义路由表,然后将该路由表关联至子网。
- 要添加您要从中连接到数据库实例的源公共 IP 地址,请配置入站安全组规则。
对于 Type(类型),选择 MySQL/Aurora 或 PostgreSQL。
对于 Source(源),选择 Custom(自定义),然后手动输入 CIDR 范围。或者,选择 My IP(我的 IP),以从同一工作站连接到数据库实例。
保护数据库集群与 VPC 外部连接的安全
使用 TLS 对 VPC 外部的连接进行加密,因为数据传输是通过互联网进行的。要确认您使用的是最高级别的安全性,请使用 ssl-ca 参数传递证书颁发机构 (CA) 证书,然后开启主机名验证。
要测试 TLS 连接,请根据您使用的 Aurora 版本运行以下命令。
Amazon Aurora MySQL 兼容版 5.6
mysql -h test-aurora-56.cluster-############.us-east-1.rds.amazonaws.com -u test_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-verify-server-cert
**注意:**请将 test-aurora-56.cluster-############.us-east-1.rds.amazonaws.com 替换为您的集群端点。将 test_user 替换为您的用户名。将 rds-combined-ca-bundle.pem 替换为您的 CA 路径。
Amazon Aurora MySQL 兼容版 5.7 及更高版本
mysql -h test-aurora-57.cluster-############.us-east-1.rds.amazonaws.com -u test_user --ssl-ca=rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY
**注意:**请将 test-aurora-57.cluster-############.us-east-1.rds.amazonaws.com 替换为您的集群端点。将 test_user 替换为您的用户名。将 rds-combined-ca-bundle.pem 替换为您的 CA 路径。
Amazon Aurora PostgreSQL 兼容版
psql -h test-aurora-pg.cluster-############.us-east-1.rds.amazonaws.com -p 5432 "dbname=postgres user=test_user sslrootcert=rds-combined-ca-bundle.pem sslmode=verify-full"
**注意:**请将 test-aurora-pg.cluster-############.us-east-1.rds.amazonaws.com 替换为您的集群端点。将 5432 替换为您的集群端口。将 postgres 替换为您的数据库用户名,将 test_user 替换为您的用户名。将 rds-combined-ca-bundle.pem 替换为您的 CA 路径。
您还可以对数据库集群强制使用 TLS。对于 Aurora MySQL 兼容版,请在数据库用户级别设置 TLS。对于 Aurora PostgreSQL 兼容版,请将 rds.force_ssl 参数设置为 1。
相关信息
使用 SSL/TLS 加密与数据库集群的连接
利用 SSL/TLS 保护 Aurora PostgreSQL 数据
如何使用堡垒主机从我的 Linux 或 macOS 计算机连接到我的 Amazon RDS 数据库实例?
如何在 Amazon RDS 控制台中配置私有和公有 Aurora 端点?