Оригинал: CloudNativePG Recipe 3 — What!?! No superuser access? — 11 марта 2024.
Главный принцип здесь — principle of least authority (PoLA). По умолчанию пользователь postgres не имеет сетевого доступа и пароль у него NULL. enableSuperuserAccess: false — это дефолт оператора.
pg_hba по умолчанию
Правила host-based authentication в кластере CloudNativePG проверяются через pg_hba_file_rules. Дефолт:
- локальный peer-доступ для пользователя
postgres(только изнутри пода); - сертификатная аутентификация для роли репликации;
- SCRAM-SHA-256 для всех остальных пользователей.
Доступ к учётке postgres — только локально через Kubernetes RBAC (kubectl exec).
Когда нужен суперпользователь
Два сценария, в которых стоит включить суперюзера:
- Lift-and-shift миграции из монолитных архитектур, где приложение делает что-то, требующее суперпользовательских прав.
- Текущие ограничения CloudNativePG в плане декларативного управления некоторыми объектами (foreign servers и т. п.).
Включается через enableSuperuserAccess: true. Оператор создаст отдельный секрет с учёткой суперпользователя. Откатить можно в любой момент.
Команда ALTER SYSTEM
CloudNativePG не рекомендует использовать ALTER SYSTEM: эта команда ломает GitOps-подход и может конфликтовать с управлением через оператор. Файл postgresql.auto.conf по умолчанию закрыт правами на запись. Если очень надо — можно включить через .spec.postgresql.enableAlterSystem.
Вывод
CloudNativePG балансирует жёсткую безопасность по умолчанию и операционную гибкость для тех, кто знает, что делает.