加布里埃莱·巴托利尼:CloudNativePG 配方 3 - 什么!没有超级用户访问权限?

加布里埃莱·巴托利尼:CloudNativePG 配方 3 - 什么!没有超级用户访问权限?

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

该文章介绍了CloudNativePG中PostgreSQL集群的安全默认设置,遵循最小权限原则,平衡了保护和用户友好性。高级用户可以自定义设置。文章还讨论了默认设置的复杂性、基于主机的身份验证和启用超级用户访问的场景。CloudNativePG致力于安全和简单操作。

🔎

延伸解读

默认安全设置的实际影响

CloudNativePG 默认将 postgres 用户的密码设为 NULL,并禁止其网络访问,这直接阻止了通过密码猜测或暴力破解的攻击。同时,pg_hba 规则中仅允许通过 peer 认证从容器内部连接,且受 Kubernetes RBAC 控制。这意味着即使数据库端口暴露,外部也无法以 postgres 身份登录,显著降低了未授权访问的风险。

何时需要启用超级用户访问

文章指出,在两种典型场景下可能需要启用 postgres 超级用户:一是从传统单体数据库迁移时,应用依赖超级用户权限;二是当前 CloudNativePG 尚不支持某些数据库内资源的声明式管理,如外部服务器或特定扩展。此时可将 enableSuperuserAccess 设为 true,系统会生成一个包含超级用户密码的 Secret,且该操作可逆,关闭后密码恢复为 NULL。

避免使用 ALTER SYSTEM 的原因

在 CloudNativePG 管理的集群中,ALTER SYSTEM 命令默认被禁止,执行会报权限错误。这是因为该命令可能干扰操作员对集群(而非单个实例)的管理,并破坏 GitOps 和基础设施即代码实践。CloudNativePG 将集群视为一个整体,包含主实例和任意数量的副本,因此需要避免在单个实例上动态修改配置。如有必要,可通过设置 .spec.postgresql.enableAlterSystem 为 true 来启用。

❓

Q&A

CloudNativePG中的PostgreSQL集群如何确保安全性?

CloudNativePG遵循最小权限原则,提供安全默认设置,限制postgres用户的网络访问,并将其密码设置为NULL,以增强安全性。

如何启用CloudNativePG中的超级用户访问?

可以通过将enableSuperuserAccess设置为true来启用超级用户访问,这样可以在特定情况下使用postgres用户。

CloudNativePG的默认配置对用户友好吗?

是的,CloudNativePG的默认配置在确保安全性的同时,也考虑了用户友好性,允许高级用户根据需要自定义设置。

为什么不建议在CloudNativePG中使用ALTER SYSTEM命令?

使用ALTER SYSTEM可能会干扰操作员的管理角色,并可能破坏基础设施代码的管理,因此不建议在CloudNativePG中使用。

CloudNativePG如何处理PostgreSQL的主机身份验证?

CloudNativePG使用pg_hba文件中的认证规则来管理PostgreSQL的主机身份验证,默认使用peer认证方法。

CloudNativePG的postgres用户默认密码是什么?

postgres用户的默认密码设置为NULL,这样可以防止未经授权的身份验证尝试。

🏷️

标签

➡️

继续阅读