安全配置

安全配置 #

本页介绍 easysearch.yml 中与安全模块相关的配置项,包括 TLS 加密、审计日志、节点证书、REST API 权限等。这些都是静态设置,修改后需要重启节点生效。

用户、角色、权限等安全管理操作请参见 安全 API。 详细的 TLS 证书管理请参见 TLS 安全配置。 国密算法配置请参见 国密配置


安全模块开关 #

security.enabled #

security.enabled: true
项目说明
参数security.enabled
默认值true
属性静态
说明是否启用安全模块。启用后所有 API 请求需要认证,节点间通信需要 TLS 加密

生产环境必须启用安全模块。关闭安全意味着任何人都可以读写集群数据。


审计日志 #

security.audit.type #

security.audit.type: noop
项目说明
参数security.audit.type
默认值noop(发行包默认配置)
属性静态
说明审计日志类型。noop 表示不记录审计日志,internal 表示记录到 Easysearch 索引中
行为
noop不记录审计日志(默认)
internal将审计事件记录到 Easysearch 内部索引
log4j将审计事件输出到 log4j 日志文件
webhook将审计事件发送到 Webhook 端点
debug调试模式,仅在开发环境使用

Transport 层 TLS #

Transport 层用于节点间内部通信。安全模块启用时,Transport TLS 必须配置

参数说明
security.ssl.transport.cert_file节点证书文件(PEM 格式),相对于 config/ 目录
security.ssl.transport.key_file节点私钥文件(PEM 格式)
security.ssl.transport.ca_fileCA 根证书文件,用于验证其他节点的证书
security.ssl.transport.skip_domain_verify是否跳过证书域名验证。true 表示只验证证书签发链,不验证 CN/SAN
security.ssl.transport.cert_file: instance.crt
security.ssl.transport.key_file: instance.key
security.ssl.transport.ca_file: ca.crt
security.ssl.transport.skip_domain_verify: true

证书要求 #

  • 每个节点都需要有自己的证书和私钥。
  • 所有节点的证书必须由同一个 CA 签发(或证书链中可追溯到同一根 CA)。
  • 证书文件路径相对于 config/ 目录。

HTTP 层 TLS #

HTTP 层用于客户端(REST API)通信。启用后客户端需要使用 https:// 连接。

参数默认值说明
security.ssl.http.enabledtrue是否启用 HTTPS(初始化后默认开启)
security.ssl.http.cert_fileHTTP 层证书文件
security.ssl.http.key_fileHTTP 层私钥文件
security.ssl.http.ca_fileCA 根证书文件
security.ssl.http.clientauth_modeOPTIONAL客户端证书认证模式
security.ssl.http.enabled: true
security.ssl.http.cert_file: instance.crt
security.ssl.http.key_file: instance.key
security.ssl.http.ca_file: ca.crt
security.ssl.http.clientauth_mode: OPTIONAL

clientauth_mode 说明 #

行为
NONE不要求客户端证书
OPTIONAL客户端可以提供证书,但不强制(默认)
REQUIRE强制要求客户端提供证书(双向 TLS / mTLS)

通常使用 OPTIONAL,仅在需要 mTLS 的高安全场景使用 REQUIRE


节点 DN(Distinguished Name) #

security.nodes_dn #

security.nodes_dn:
  - "CN=node-1.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
  - "CN=node-2.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
  - "CN=node-3.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
项目说明
参数security.nodes_dn
默认值空列表
属性静态
说明允许加入集群的节点证书 DN 列表。只有证书 DN 匹配此列表的节点才能加入集群。支持通配符

通配符示例

security.nodes_dn:
  - "CN=*.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"

查看证书 DN #

openssl x509 -in instance.crt -subject -noout

Admin DN #

security.authcz.admin_dn #

security.authcz.admin_dn:
  - "CN=admin.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
项目说明
参数security.authcz.admin_dn
默认值空列表
属性静态
说明Admin 客户端证书 DN 列表。持有这些 DN 证书的客户端拥有完全的集群管理权限,可以执行安全配置变更等特权操作

Admin 证书用于运行 securityadmin.sh 或其他需要特权访问的管理工具。


REST API 配置 #

security.restapi.roles_enabled #

security.restapi.roles_enabled: ["superuser", "security_rest_api_access"]
项目说明
参数security.restapi.roles_enabled
默认值
属性静态
说明允许访问安全 REST API(_security/*)的角色列表。只有拥有这些角色的用户才能通过 API 管理安全配置

安全索引初始化 #

security.allow_default_init_securityindex #

security.allow_default_init_securityindex: false
项目说明
参数security.allow_default_init_securityindex
默认值false
属性静态
说明是否允许在首次启动时自动初始化安全索引(.security 系统索引)。设为 true 时集群启动时会自动创建安全索引并初始化默认配置

系统索引保护 #

security.system_indices #

security.system_indices.enabled: true
security.system_indices.indices: [".infini-*"]
参数默认值说明
security.system_indices.enabledtrue是否启用系统索引保护(初始化后默认开启)
security.system_indices.indices受保护的系统索引模式列表。匹配的索引只能通过系统内部访问,普通用户无法直接读写

security 目录配置文件 #

除了 easysearch.yml 中的安全配置,config/security/ 目录还包含安全模块的本地配置文件:

文件说明
user.yml内置用户定义(密码哈希由初始化脚本生成)
roles.yml角色定义
roles_mapping.yml角色映射(用户/后端角色 → 安全角色)
action_groups.yml权限组定义
tenants.yml租户定义
config.yml认证与授权后端配置(LDAP、SAML 等)

这些文件在 bin/initialize.sh 初始化时自动生成。


完整配置示例 #

标准生产环境 #

# ---- 安全模块 ----
security.enabled: true
security.audit.type: noop

# ---- Transport TLS ----
security.ssl.transport.cert_file: instance.crt
security.ssl.transport.key_file: instance.key
security.ssl.transport.ca_file: ca.crt
security.ssl.transport.skip_domain_verify: true

# ---- HTTP TLS ----
security.ssl.http.enabled: true
security.ssl.http.cert_file: instance.crt
security.ssl.http.key_file: instance.key
security.ssl.http.ca_file: ca.crt
security.ssl.http.clientauth_mode: OPTIONAL

# ---- 访问控制 ----
security.allow_default_init_securityindex: true
security.nodes_dn:
  - "CN=*.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
security.authcz.admin_dn:
  - "CN=admin.infini.cloud,OU=UNIT,O=ORG,L=NI,ST=FI,C=IN"
security.restapi.roles_enabled: ["superuser", "security_rest_api_access"]

# ---- 系统索引保护 ----
security.system_indices.enabled: true
security.system_indices.indices: [".infini-*"]

延伸阅读 #