数据安全
网络边界、身份认证 和 权限控制 用于降低事件发生的概率;当硬件损坏、口令泄露或误操作已经发生时,还需要依靠数据层机制控制影响并完成恢复。
数据安全要回答四个问题:数据是 完整 的吗?丢了能 恢复 吗?被拿走了会 泄密 吗?发生了什么能 查清 吗?
完整性
磁盘坏块、内存位翻转、存储固件缺陷,都可能造成 静默数据损坏:数据坏了,但没有任何报错。
Pigsty 默认启用页级数据校验和(pg_checksum:true),
集群初始化时以 data-checksums 建库,PostgreSQL 会在页面写入时计算校验和,并在读取时检查页面损坏。
页校验和主要发现存储介质、I/O 路径或写入后发生的页面损坏,不能检测所有内存错误、逻辑错误或应用写入的错误数据,也不能替代备份。
CRIT 参数模板 更进一步:校验和强制启用,不受参数影响;
同时启用 严格同步复制(synchronous_mode_strict),在没有可用同步副本时阻塞需要同步确认的写入。
该模式以不丢失已确认事务为目标,但仍依赖客户端没有降低 synchronous_commit、同步副本正常参与提交,以及故障切换只选择包含所需 WAL 的节点。RPO 需要通过目标拓扑上的故障演练验证。
可恢复性
副本主要处理节点故障,备份则处理误删除、逻辑错误、集群损坏和更大范围的灾难。 高可用 可以缩短主库故障造成的中断,但如果有人误删了数据,复制也会把误操作同步到其他副本。备份因此无可替代。
Pigsty 默认启用 pgBackRest(pgbackrest_enabled):
基础备份加上持续归档的 WAL,构成 时间点恢复(PITR)能力,可以将集群恢复到备份与 WAL 保留窗口内的目标时刻。
备份仓库由 pgbackrest_method 选择:
| 仓库 | 位置 | 默认保留策略 | 加密 |
|---|---|---|---|
local(默认) | 本地 /pg/backup 目录 | 最近 2 份全量备份 | 无 |
minio | MinIO 或 S3 对象存储 | 14 天 | AES-256-CBC |
对于防误删场景,还有两项辅助机制:
- 延迟从库:为关键集群声明一个
pg_delay: 1h的延迟副本。在错误操作尚未回放前,可以暂停复制并提取数据。延迟副本最终仍会追上主库,不能代替备份。 - 移除保护:
pg_safeguard与etcd_safeguard开启后,对应的移除剧本会拒绝执行,降低误删集群的风险。
备份的存在不等于恢复的能力。恢复演练应当成为例行工作:原理与决策见 时间点恢复,配置与操作见 PGSQL 备份恢复。
保密性
静态数据的保密性分三层展开:
备份加密。MinIO 备份仓库默认启用 AES-256-CBC 加密,但默认加密口令(pgBackRest)是公开的,生产环境必须修改。
ha/safe 模板按集群名称区分加密口令:
pgbackrest_repo:
minio:
cipher_type: aes-256-cbc
cipher_pass: 'pgBR.${pg_cluster}' # 示例值,部署前必须替换
pgBR.${pg_cluster} 是可预测的示例值,configure -g 也不会替换它。生产环境应使用独立随机口令,并与备份分开保存;口令丢失会导致备份无法恢复。
本地备份仓库默认不加密。加密可以降低备份文件被单独复制或介质被盗时的泄露风险,但如果密钥与备份位于同一主机,保护效果仍会受到限制。
传输加密。备份上传 MinIO 走 HTTPS,PostgreSQL 客户端与流复制可以通过 HBA 强制 SSL。客户端还应验证服务端证书,详见 加密通信。
静态加密。PostgreSQL 上游内核目前没有通用的内置透明数据加密(TDE),Pigsty 提供两条现实路径:
使用 Percona PostgreSQL 内核的 pg_tde 扩展实现表级透明加密(参见 pgtde 配置模板);
或使用 pgsodium、pgcrypto、anonymizer 等 安全扩展 在列级实现加密与脱敏 —— safe 模板已预装这一类扩展。
此外,全盘加密(LUKS、dm-crypt)在操作系统层解决介质被盗问题,与数据库层方案互补。
审计与追溯
出了问题,要能回答“谁在什么时候做了什么”。Pigsty 的日志审计分层递进:
默认基线:所有 DDL 语句被记录(log_statement: ddl),执行超过 100ms 的查询被记录(log_min_duration_statement: 100),
PostgreSQL 18 及以上版本还会记录连接授权事件。
CRIT 模板:记录连接与断开事件(log_connections 与 log_disconnections);PostgreSQL 18 还会区分连接接收、认证与授权阶段。
pgaudit 扩展:需要语句级的细粒度审计(对象级读写、按角色审计)时,安装 pgaudit 并加入 pg_libs 预加载。
safe 模板已预装该扩展,加载与审计策略需按需求显式声明。
启用 INFRA 日志组件并完成 Vector 配置后,PostgreSQL 日志会汇入 VictoriaLogs 集中存储(默认保留 15 天,可按合规要求调整)。 日志和指标为安全事件的检索、告警与回溯提供输入,但事件判定、响应和证据保全仍需要配套流程。