AWS RDS PostgreSQL配置强制SSL后仍可非SSL连接,如何禁用?
解决AWS RDS PostgreSQL无法禁用非SSL连接的问题
以下是针对当前情况的排查和解决步骤:
1. 确认rds.force_ssl参数是否真正生效
连接到PostgreSQL实例后,执行以下命令查看参数状态:
SHOW rds.force_ssl;
如果返回值不是1,说明参数组未正确应用:
- 检查实例是否确实关联了你的自定义参数组(在RDS控制台的实例配置页面查看)
- 确认参数组的数据库版本家族与实例版本完全匹配(比如实例是PostgreSQL 14,参数组也必须是14版本家族)
- 若上述都没问题,尝试再次重启实例,确保参数生效
2. 验证当前连接是否真的是非SSL连接
有时候客户端会自动启用SSL连接,可能你误以为是通过非SSL连接成功。执行以下命令检查当前连接的SSL状态:
SELECT ssl FROM pg_stat_activity WHERE pid = pg_backend_pid();
返回t表示当前是SSL连接,f才是非SSL连接。如果是t,说明你的强制SSL已经生效,只是客户端默认开启了SSL。
3. 为数据库用户强制添加SSL要求
即使全局参数生效,也可以为每个用户单独设置强制SSL,作为双重保障:
ALTER USER your_username REQUIRE SSL;
替换your_username为实际的数据库用户名,对所有需要连接的用户执行此操作。
4. 检查是否存在例外情况
- 如果你使用的是RDS的超级用户(
postgres),尝试对该用户也执行上述ALTER USER命令 - 确认没有使用RDS只读副本或其他关联实例,这些实例可能未同步参数组设置
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

