--- title: "安全注意事项" weight: 160 icon: fa-solid fa-lock description: "DCS、REST API 及凭据处理的安全注意事项。" module: [PATRONI] categories: [概念] aliases: [/patroni/security/] upstream_link: "https://patroni.readthedocs.io/en/latest/security.html" --- Patroni 集群有两个需要防范未授权访问的接口:分布式配置存储(DCS)和 Patroni REST API。 -------- ## 保护 DCS Patroni 和 [**patronictl**](/zh/docs/patroni/patronictl#patronictl) 都会向 DCS 读写数据。 尽管 DCS 本身不包含任何敏感信息,但它允许修改部分 Patroni/PostgreSQL 配置,因此首要保护对象就是 DCS 本身。 具体的保护方式取决于所使用的 DCS 类型。各类 DCS 的认证和加密参数(令牌/基本认证/客户端证书)详见 [**配置说明**](/zh/docs/patroni/config/yaml#yaml)。 通用建议是为所有 DCS 通信启用 TLS。 -------- ## 保护 REST API 保护 REST API 是一项更为复杂的任务。 Patroni REST API 的使用方包括:Patroni 自身(领导者竞选期间)、[**patronictl**](/zh/docs/patroni/patronictl#patronictl) 工具(故障转移/主从切换/重新初始化/重启/重载等操作)、HAProxy 或其他负载均衡器(HTTP 健康检查),以及监控系统。 从安全角度来看,REST API 端点分为两类:安全端点(**`GET`** 请求,仅读取信息)和非安全端点(**`PUT`**、**`POST`**、**`PATCH`**、**`DELETE`** 请求,会变更节点状态)。 非安全端点可通过设置 **`restapi.authentication.username`** 和 **`restapi.authentication.password`** 参数启用 HTTP 基本认证加以保护。安全端点在未启用 TLS 的情况下无法得到保护。 当 REST API 启用 TLS 且已建立 PKI 基础设施时,可对 API 服务端和客户端实现所有端点的双向认证。 **`restapi`** 配置节的参数用于配置客户端对服务端的 TLS 认证。**`verify_client`** 参数控制 API 服务端的验证策略:**`required`** 表示对所有 API 调用(含安全与非安全端点)都要求客户端证书验证通过;**`optional`** 表示仅对非安全 API 调用要求;**`none`** 表示对任何调用都不要求。 **`ctl`** 配置节的参数用于配置客户端(即与 patroni 共用同一配置文件的 [**patronictl**](/zh/docs/patroni/patronictl#patronictl) 工具)对服务端的 TLS 认证。将 **`insecure: true`** 可禁用客户端对服务端证书的验证。TLS 客户端参数的详细说明请参阅 [**配置说明**](/zh/docs/patroni/config/yaml#patronictl_settings)。 保护 PostgreSQL 数据库本身免受未授权访问超出了本文档的范围,相关内容请参阅 。