# Elasticsearch 搜索与分析平台测评

> Elasticsearch 7.x/8.x 搜索与分析平台三级等保现场测评取证命令单：按 GB/T 22239-2019 安全计算环境控制点组织 curl REST API、elasticsearch.yml 与 _security/_slm/_license 等只读取证命令，覆盖 xpack 安全开关与 7.x/8.x 默认值差异、内置 elastic 超管与角色最小权限、审计日志订阅限制与外送补偿、TLS 加密与静态加密责任边界、快照 SLM 备份恢复、API Key 撤销与 ILM 索引保留各环节，给出判定要点、高风险提示、示例输出与版本差异核验说明。

---

LLMS index: [llms.txt](/wikis/llms.txt)

---

> 定位：Elasticsearch 搜索与分析平台三级等保现场测评**取证命令单**，按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。
> 适用范围：Elasticsearch 7.x / 8.x（RPM/DEB 包安装、压缩包自解压与容器化部署均适用），以官方现行文档为准；7.x 与 8.x 安全默认值差异显著，须先确认版本再套用判定口径（见参考依据「命令核验说明」）。
> 配套文章：[22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)、[16、安全评估加固记录表3.0](../../../reinforce/其他系统或设备/16安全评估加固记录表3.0/)、[17、网络设备、安全设备、服务器、数据库和应用系统的加固方案](../../../reinforce/其他系统或设备/17网络设备安全设备服务器数据库和应用系统的加固方案/)。
>
> 使用说明：
>
> - 本文所有命令均为**只读取证**命令，不修改配置、不重启服务、不新增/删除任何索引、角色或凭证；确需变更由被测单位运维方在授权下实施。
> - 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排；命令回显本身即证据，须连同命令行一起截图。
> - `curl -u elastic` 仅携带用户名，口令由运维现场交互输入，**不得**以 `elastic:口令` 形式写进命令历史；`-k` 仅用于忽略自签证书告警，取证场景可接受，报告中应注明。
> - 命令不存在或输出与示例差异较大时，先确认版本与部署形态（RPM/DEB/压缩包/容器），再换用等效命令或转入 `elasticsearch.yml`、`GET /_license` 等配置与 API 取证，**不得据命令缺失直接判不符合**。
> - 示例输出中的地址、账户、路径、证书主体均为演示值，现场须替换为真实取证结果并对涉及个人信息、内网管理地址与口令散列的内容脱敏后再入报告。
>
> 不适用标识说明：
>
> - 使用 `【不适用】` 明确标记现场可判定为不适用的控制点。
> - 判定依据采用 GB/T 28448-2019"按测评对象实际功能、是否直接处理数据、是否具备该类安全机制判定"的原则；Elasticsearch 兼具平台与数据承载双重角色，索引内业务数据的部分控制点（如字段级脱敏实现）常需按责任边界转由应用层测评。

## 基础信息

> **对应控制点**：非独立控制点（测评对象与资产确认）；部署形态与冗余情况佐证 8.1.2.1 网络架构 e) 关键设备硬件冗余
>
> **判定要点**：版本号、集群健康状态、节点清单与角色、索引规模、许可类型与到期时间五项均可取证且与实际架构一致 → 符合；版本或许可信息依赖口头说明、无法确认 → 部分符合。
>
> **取证要求**：版本与集群信息回显截图、节点清单截图、索引清单截图、许可回显截图、服务状态与配置文件路径截图。

**核查命令**：

```bash
systemctl status elasticsearch --no-pager | head -n 12
ls -l /etc/elasticsearch/elasticsearch.yml
curl -sS -k -u elastic "https://127.0.0.1:9200/"
curl -sS -k -u elastic "https://127.0.0.1:9200/_cluster/health?pretty"
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/nodes?v"
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/indices?v" | head -n 20
curl -sS -k -u elastic "https://127.0.0.1:9200/_license?pretty"
```

- 备注：8.x 默认对 HTTP 层启用 TLS（首次启动自动配置），取证走 `https`；7.x 默认未启用 TLS 时改用 `http://127.0.0.1:9200/`，用哪种协议、哪个通、哪个被拒，本身就是 7.x/8.x 安全基线差异的第一份证据。`GET /_license` 回显 `type`（取值 missing/trial/basic/standard/dev/silver/gold/platinum/enterprise）与 `status`（active/valid/invalid/expired），许可类型直接决定后续审计、DLS/FLS 等控制点的判定口径。
- 预期证据：版本回显截图（`version.number`）、集群健康截图（`status`/`number_of_nodes`）、节点清单截图、索引清单截图、许可截图、服务状态截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;es-node-1&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cluster_name&#34;</span> : <span class="s2">&#34;demo-es&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cluster_uuid&#34;</span> : <span class="s2">&#34;uX1d**************&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;version&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;number&#34;</span> : <span class="s2">&#34;8.14.3&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;build_flavor&#34;</span> : <span class="s2">&#34;default&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;build_type&#34;</span> : <span class="s2">&#34;rpm&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;lucene_version&#34;</span> : <span class="s2">&#34;9.11.1&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;minimum_wire_compatibility_version&#34;</span> : <span class="s2">&#34;7.17.0&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;tagline&#34;</span> : <span class="s2">&#34;You Know, for Search&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cluster/health?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;cluster_name&#34;</span> : <span class="s2">&#34;demo-es&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;status&#34;</span> : <span class="s2">&#34;green&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;number_of_nodes&#34;</span> : 3,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;number_of_data_nodes&#34;</span> : <span class="m">3</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cat/nodes?v
</span></span><span class="line"><span class="cl">ip            heap.percent ram.percent cpu node.role master name
</span></span><span class="line"><span class="cl">192.168.10.5           <span class="m">62</span>          <span class="m">78</span>   <span class="m">6</span> cdfhilmrstw *      es-node-1
</span></span><span class="line"><span class="cl">192.168.10.6           <span class="m">55</span>          <span class="m">77</span>   <span class="m">4</span> cdfhilmrstw -      es-node-2
</span></span><span class="line"><span class="cl">192.168.10.7           <span class="m">58</span>          <span class="m">76</span>   <span class="m">5</span> cdfhilmrstw -      es-node-3
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_license?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;license&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;status&#34;</span> : <span class="s2">&#34;active&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;type&#34;</span> : <span class="s2">&#34;basic&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;issue_date&#34;</span> : <span class="s2">&#34;2026-01-15T00:00:00.000Z&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div>
</details>


## 身份鉴别

> **对应控制点**：GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)
>
> **判定要点**：安全特性启用（8.x 默认启用，7.x 须显式配置且属整改重点）、内置 elastic 超管口令非默认/非弱口令、认证域（native/ldap/active_directory/oidc 等）配置清晰、未启用匿名访问、失败口令被拒（401）→ 符合；安全已启用但超管共用、口令长期未轮换、或依赖匿名访问放行 → 部分符合；安全特性未启用且 9200 对外可达 → 不符合（高风险）。
>
> **取证要求**：`xpack.security.enabled` 配置截图、无凭证与错误口令探测回显截图、内置用户与业务用户清单截图、认证域配置截图、口令轮换制度与记录。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


安全特性未启用（7.x basic/trial 许可下默认 `false` 且未显式开启）而 9200 端口对内网/互联网可达时，任何客户端无需鉴别即可读写全部索引，等同未授权访问入口，按《高风险判定指引》中"互联网设备/UIP 未授权访问"同类口径判高风险；8.x 虽默认启用，但若现场被显式关闭（`xpack.security.enabled: false`）同样判高风险。

判定口径详见 [22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)。
</div>


### A. 安全特性开关与 7.x/8.x 默认差异

**核查命令**：

```bash
grep -n "xpack.security.enabled" /etc/elasticsearch/elasticsearch.yml
grep -n "xpack.security.autoconfiguration.enabled" /etc/elasticsearch/elasticsearch.yml
# 无凭证探测：回显 401 说明安全开启；返回集群信息（200）即安全未开启
curl -sS -k "https://127.0.0.1:9200/" -o /dev/null -w "https无凭证:%{http_code}\n" 2>/dev/null
curl -sS -u elastic "http://127.0.0.1:9200/" -o /dev/null -w "http无凭证:%{http_code}\n" 2>/dev/null
```

- 备注：官方现行文档明确 `xpack.security.enabled` **默认 `true`**；7.17 文档则明确 basic/trial 许可下**默认 `false`**、gold 及以上许可默认 `true`，即 7.x 免费许可下不显式配置就是关闭状态。8.x 另有 `xpack.security.autoconfiguration.enabled`（默认 `true`）在首次启动时自动生成证书并写入 `elasticsearch.yml`，故 8.x 节点配置文件里通常能看到自动写入的 `xpack.security.*` 行；7.x 无此机制，需逐项手工配置。无凭证探测是判定安全开关最直接的现场证据：安全开启回显 `401`，未开启直接回显集群信息。
- 预期证据：配置行截图、两次探测的状态码回显截图（含"401"阴性证据）。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n <span class="s2">&#34;xpack.security.enabled&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">xpack.security.enabled: true（8.x 自动配置写入；7.x 正确整改后亦应显式为 true）
</span></span><span class="line"><span class="cl">curl -sS -k https://127.0.0.1:9200/ -o /dev/null -w <span class="s2">&#34;https无凭证:%{http_code}\n&#34;</span>
</span></span><span class="line"><span class="cl">https无凭证:401
</span></span><span class="line"><span class="cl">（无凭证请求被拒绝，安全特性生效；若回显 <span class="m">200</span> 并输出集群信息，即为 7.x 默认关闭形态，判不符合/高风险）
</span></span></code></pre></div>
</details>


### B. 内置 elastic 超管与口令核查

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/user/elastic?pretty"
# 错误口令实测：预期 401（验证鉴别生效与失败处理，非口令猜测，仅做一次）
curl -sS -k -u elastic:deliberately-wrong "https://127.0.0.1:9200/" -o /dev/null -w "%{http_code}\n"
```

- 备注：官方文档内置用户共六个：`elastic`（超管）、`kibana_system`、`logstash_system`、`beats_system`、`apm_system`、`remote_monitoring_user`。7.x 经 `elasticsearch-setup-passwords` 工具首次设置内置用户口令（设置一次后 bootstrap 口令即失效）；8.x 首次启动自动为 `elastic` 生成口令，RPM/DEB 安装启动时**不**回显口令，须由运维用 `elasticsearch-reset-password` 重置后交付。现场判定：访谈口令设置与轮换流程（是否随机生成、是否定期更换、是否写入台账），并用运维提供的真实口令登录实测、用故意错误口令验证 401，**严禁**进行口令字典猜测。
- 预期证据：`elastic` 用户信息截图（`enabled`、`roles`）、错误口令 401 回显截图、口令管理制度与轮换记录。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/user/elastic?pretty
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;elastic&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;username&#34;</span> : <span class="s2">&#34;elastic&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;superuser&#34;</span> <span class="o">]</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic:deliberately-wrong https://127.0.0.1:9200/ -o /dev/null -w <span class="s2">&#34;%{http_code}\n&#34;</span>
</span></span><span class="line"><span class="cl"><span class="m">401</span>
</span></span><span class="line"><span class="cl">（超管口令由 8.x 首启自动生成并于交付时重置，按季度轮换；错误口令被拒）
</span></span></code></pre></div>
</details>


### C. 用户清单与认证域（realms）

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/user?pretty" | head -n 40
grep -n -A4 "xpack.security.authc.realms" /etc/elasticsearch/elasticsearch.yml
ls -l /etc/elasticsearch/users /etc/elasticsearch/users_roles 2>/dev/null
```

- 备注：`GET /_security/user` 返回 native realm 用户与全部内置用户（需 `read_security` 权限），核对是否存在共用账户、离职人员残留账户、长期未登录账户。认证域配置（`xpack.security.authc.realms.native/ldap/active_directory/oidc/...`）核验是否接入统一认证：接入 LDAP/AD/OIDC 的需同步到认证平台侧核对账户生命周期；使用 file realm 的核对 `/etc/elasticsearch/users`、`users_roles` 文件权限（600/640 并归属 elasticsearch 运行账户）。
- 预期证据：用户清单截图（脱敏）、认证域配置截图、统一认证平台对接说明、文件权限截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/user?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;elastic&#34;</span> : <span class="o">{</span> <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;superuser&#34;</span> <span class="o">]</span>, <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;demo-user&#34;</span> : <span class="o">{</span> <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;demo-readonly&#34;</span> <span class="o">]</span>, <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;kibana_system&#34;</span> : <span class="o">{</span> <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;kibana_system&#34;</span> <span class="o">]</span>, <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">grep -n -A4 <span class="s2">&#34;xpack.security.authc.realms&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">xpack.security.authc.realms.native.native1:
</span></span><span class="line"><span class="cl">  order: <span class="m">0</span>
</span></span><span class="line"><span class="cl">（业务账户走 native realm 并按角色最小授权；未启用匿名访问）
</span></span></code></pre></div>
</details>


### D. 匿名访问与 API Key

**核查命令**：

```bash
grep -n "xpack.security.authc.anonymous" /etc/elasticsearch/elasticsearch.yml
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/api_key?pretty" | head -n 30
```

- 备注：匿名访问由 `xpack.security.authc.anonymous.username`（默认 `_es_anonymous_user`）、`roles`（必填）、`authz_exception`（默认 `true`）三项组成，配置文件无此配置段即未启用；无凭证探测 401 可交叉印证。API Key 默认启用（`xpack.security.authc.api_key.enabled` 默认 `true`），`GET /_security/api_key` 枚举密钥清单——仅有 `manage_own_api_key` 权限的调用者只能看到自己的 Key，故建议以超管取证；核对无效/过期 Key 是否及时撤销、Key 是否按人员而非应用共享。
- 预期证据：匿名配置阴性截图（无输出或 401）、API Key 清单截图（脱敏）、Key 生命周期管理说明。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n <span class="s2">&#34;xpack.security.authc.anonymous&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">（无输出：未配置匿名访问）
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/api_key?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;api_keys&#34;</span> : <span class="o">[</span>
</span></span><span class="line"><span class="cl">    <span class="o">{</span> <span class="s2">&#34;id&#34;</span> : <span class="s2">&#34;a1b2********&#34;</span>, <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;logbeat-writer&#34;</span>, <span class="s2">&#34;invalidated&#34;</span> : <span class="nb">false</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">    <span class="o">{</span> <span class="s2">&#34;id&#34;</span> : <span class="s2">&#34;c3d4********&#34;</span>, <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;old-report-key&#34;</span>, <span class="s2">&#34;invalidated&#34;</span> : <span class="nb">true</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">（API Key 按应用命名发放，废弃 Key 已标记 invalidated）
</span></span></code></pre></div>
</details>


## 访问控制

> **对应控制点**：GB/T 22239-2019 8.1.4.2 访问控制 a)~f)
>
> **判定要点**：角色按最小权限划分且绑定到索引/操作粒度、`superuser` 仅绑定极少数账户、无共享超管、监听地址收敛且管理/查询来源受防火墙或 IP 过滤限制、启用文档/字段级安全（订阅允许时）→ 符合；有角色体系但普遍使用 `elastic` 超管或权限粒度过粗 → 部分符合；超管共享、9200 对全网开放且无访问控制 → 不符合（高风险）。
>
> **取证要求**：角色清单与定义截图（含 `field_security`/`query` 字段）、superuser 绑定账户清单截图、监听地址与端口截图、防火墙/IP 过滤策略截图、DLS/FLS 许可与配置证据。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


业务系统普遍共用 `elastic` 超管账户（无法区分操作者、口令扩散面失控）、或 9200 对 0.0.0.0/公网开放且无防火墙 ACL 与 IP 过滤补偿，判高风险；审计中另需关注具备 `write`/`manage` 权限的角色被随意授予查询类账户的情形。

判定口径详见 [22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)。
</div>


### A. 角色清单与最小权限

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/role?pretty" | head -n 60
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/role/superuser?pretty"
grep -n -v "^#" /etc/elasticsearch/roles.yml 2>/dev/null | head -n 20
```

- 备注：`GET /_security/role` 返回 native realm 中定义的角色（需 `read_security` 权限），角色定义中可核对：索引级权限（`indices[].names` 与 `privileges`，是否按索引模式收敛到 `read`/`create_index` 等最小集合）、文档级安全（`indices[].query`）、字段级安全（`indices[].field_security`）。注意官方文档明确该 API **无法返回 roles 文件中定义的角色**，故需同步核查 `/etc/elasticsearch/roles.yml`（如使用）。
- 预期证据：角色定义截图（权限粒度与绑定索引）、`superuser` 角色定义截图、roles.yml 截图、授权审批记录。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/role?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;demo-readonly&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;cluster&#34;</span> : <span class="o">[</span> <span class="s2">&#34;monitor&#34;</span> <span class="o">]</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;indices&#34;</span> : <span class="o">[</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;names&#34;</span> : <span class="o">[</span> <span class="s2">&#34;app-log-*&#34;</span> <span class="o">]</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;privileges&#34;</span> : <span class="o">[</span> <span class="s2">&#34;read&#34;</span> <span class="o">]</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;field_security&#34;</span> : <span class="o">{</span> <span class="s2">&#34;grants&#34;</span> : <span class="o">[</span> <span class="s2">&#34;@timestamp&#34;</span>, <span class="s2">&#34;message&#34;</span>, <span class="s2">&#34;src_ip&#34;</span> <span class="o">]</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;query&#34;</span> : <span class="s2">&#34;{\&#34;term\&#34;:{\&#34;env\&#34;:\&#34;prod\&#34;}}&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span> <span class="o">]</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">（只读角色限定 app-log-* 索引 <span class="nb">read</span> 权限并启用字段级安全，未授予 write/manage）
</span></span></code></pre></div>
</details>


### B. superuser 绑定清单与服务账户

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/user?pretty" | grep -B3 "superuser" | head -n 20
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/service?pretty"
```

- 备注：用 `GET /_security/user` 全量回显后检索绑定 `superuser` 的账户，输出"superuser 绑定清单"作为取证页；理想状态仅 `elastic` 及极少数运维账户，出现业务账户即记录整改。`GET /_security/service` 枚举服务账户（当前官方文档标注仅有 `elastic/fleet-server`），核对是否存在未使用的服务账户与凭证。
- 预期证据：superuser 绑定清单截图、服务账户截图、超管使用审批记录。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/user?pretty <span class="p">|</span> grep -B3 superuser
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;elastic&#34;</span> : <span class="o">{</span> <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;superuser&#34;</span> <span class="o">]</span>, <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;es-admin&#34;</span> : <span class="o">{</span> <span class="s2">&#34;roles&#34;</span> : <span class="o">[</span> <span class="s2">&#34;superuser&#34;</span> <span class="o">]</span>, <span class="s2">&#34;enabled&#34;</span> : <span class="nb">true</span> <span class="o">}</span>,
</span></span><span class="line"><span class="cl">（superuser 仅绑定 <span class="m">2</span> 个运维账户，业务账户均使用 demo-readonly 等受限角色）
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/service?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span> <span class="s2">&#34;elastic/fleet-server&#34;</span>: <span class="o">{</span> <span class="s2">&#34;role_descriptor&#34;</span>: <span class="o">{</span> <span class="s2">&#34;cluster&#34;</span>: <span class="o">[</span> <span class="s2">&#34;monitor&#34;</span>, ... <span class="o">]</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span>
</span></span></code></pre></div>
</details>


### C. 监听地址、端口与来源限制

**核查命令**：

```bash
grep -n -E "network.host|http.host|transport.host" /etc/elasticsearch/elasticsearch.yml
ss -lntp | grep -E "9200|9300"
grep -n "xpack.security.http.filter" /etc/elasticsearch/elasticsearch.yml
firewall-cmd --list-all 2>/dev/null || iptables -L INPUT -n -v --line-numbers 2>/dev/null | head -n 20
```

- 备注：核对 `network.host`/`http.host` 与实际监听（`ss` 回显）一致，严禁生产环境缺省监听 `0.0.0.0` 且无 ACL。来源限制可用节点级 IP 过滤（`xpack.security.http.filter.allow/deny`，官方文档标注为动态设置）或宿主机防火墙/安全组实现，两种证据取其一即可，但须与网络架构图互相印证。
- 预期证据：监听地址截图、IP 过滤或防火墙策略截图、网络架构图、云安全组截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n -E <span class="s2">&#34;network.host|http.host&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">network.host: 192.168.10.5
</span></span><span class="line"><span class="cl">ss -lntp <span class="p">|</span> grep <span class="m">9200</span>
</span></span><span class="line"><span class="cl">LISTEN <span class="m">0</span> <span class="m">1024</span> *:9200 users:<span class="o">((</span><span class="s2">&#34;java&#34;</span>,pid<span class="o">=</span>2311,fd<span class="o">=</span>312<span class="o">))</span>
</span></span><span class="line"><span class="cl">（监听由 network.host 决定；防火墙仅对应用网段 192.168.30.0/24 放行 9200/tcp）
</span></span></code></pre></div>
</details>


### D. 文档/字段级安全与许可边界

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/role?pretty" | grep -E "field_security|\"query\"" | head -n 10
curl -sS -k -u elastic "https://127.0.0.1:9200/_license?pretty" | grep -E "\"type\"|\"status\""
```

- 备注：DLS/FLS 由角色定义承载（A 节已取证），节点侧开关 `xpack.security.dls_fls.enabled` 默认 `true`。注意许可边界：DLS/FLS、审计日志等属付费订阅层级功能，Basic 许可下仅有 TLS、RBAC、file/native 认证等基础安全功能（官方 2019 年公告：自 6.8.0/7.1.0 起免费）；现场以 `GET /_license` 回显的类型对照官方订阅页判定，Basic 许可下未启用 DLS/FLS **不得直接判不符合**，应结合防火墙限源、账号最小授权等补偿措施综合判定并出具整改建议。
- 预期证据：`field_security`/`query` 配置截图、许可类型截图、订阅页对照截图、补偿措施证据。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_license?pretty <span class="p">|</span> grep -E <span class="s2">&#34;\&#34;type\&#34;|\&#34;status\&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;type&#34;</span> : <span class="s2">&#34;basic&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;status&#34;</span> : <span class="s2">&#34;active&#34;</span>
</span></span><span class="line"><span class="cl">（Basic 许可：具备 TLS+RBAC 基线，DLS/FLS 未启用；以索引级最小授权+防火墙限源补偿，列入升级建议）
</span></span></code></pre></div>
</details>


## 安全审计

> **对应控制点**：GB/T 22239-2019 8.1.4.3 安全审计 a)~d)
>
> **判定要点**：`xpack.security.audit.enabled` 启用且订阅层级覆盖（审计日志仅在特定订阅层级提供），审计事件覆盖鉴别成功/失败、越权访问、安全配置变更等，审计文件在各节点落盘并轮转、留存不少于 6 个月，或经 logstash/rsyslog 外送集中日志审计系统 → 符合；审计未启用但集群/节点日志已外送日志审计系统、可追溯主要操作且留存达标 → 部分符合；审计与外送全无、操作不可追溯 → 不符合（高风险）。
>
> **取证要求**：审计配置截图、审计文件清单与样例截图（脱敏）、日志外送配置截图、日志审计平台留存期限证据（检索 6 个月前记录）、订阅层级证据。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


安全审计未启用、集群与节点日志亦未外送任何日志审计系统，登录、查询、安全配置变更完全不可追溯，按《高风险判定指引》审计类高风险口径判高风险；审计启用但留存不足 6 个月、或普通账户可删除审计文件的，一并记录为部分符合/不符合并出具整改建议。

判定口径详见 [22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)。
</div>


### A. 审计开关与事件范围

**核查命令**：

```bash
grep -n "xpack.security.audit" /etc/elasticsearch/elasticsearch.yml
```

- 备注：官方文档明确 `xpack.security.audit.enabled` **默认 `false`**，启用需写入各节点配置并重启（8.x 需重启生效，9.5+ 起才支持动态开关）。默认事件列表为：`access_denied`、`access_granted`、`anonymous_access_denied`、`authentication_failed`、`connection_denied`、`tampered_request`、`run_as_denied`、`run_as_granted`、`security_config_change`——注意**默认不包含 `authentication_success`**，如需记录成功登录须显式加入 `xpack.security.audit.logfile.events.include`，现场取证时务必核对这一点。官方审计文档同时声明 "Audit logs are only available on certain subscription levels"，审计属付费订阅功能，与 `GET /_license` 回显互相印证。
- 预期证据：审计配置行截图、事件范围配置截图、许可类型截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n <span class="s2">&#34;xpack.security.audit&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">xpack.security.audit.enabled: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">xpack.security.audit.logfile.events.include: authentication_success,authentication_failed,access_denied,security_config_change
</span></span><span class="line"><span class="cl">（审计已启用并显式补充 authentication_success；默认列表不含成功登录事件，未显式配置时登录成功不可审计，应记录为整改建议）
</span></span></code></pre></div>
</details>


### B. 审计文件与留存

**核查命令**：

```bash
ls -l /var/log/elasticsearch/ | head -n 20
ls -l /var/log/elasticsearch/*_audit.json 2>/dev/null | head -n 10
```

- 备注：官方文档明确审计事件持久化到**每个集群节点**的 `<clustername>_audit.json` 专用文件。现场核对：文件在各数据/主节点均存在、按轮转策略滚动生成历史文件、最早文件时间戳能证明留存期。轮转与留存的具体默认值随版本差异较大，本文不作固定口径，以现场文件清单、归档脚本与日志平台留存截图为准；留存要求不少于 6 个月。
- 预期证据：审计文件清单截图（含时间跨度）、最早/最晚文件时间戳截图、归档与留存制度。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ls -l /var/log/elasticsearch/ <span class="p">|</span> grep audit（节选）
</span></span><span class="line"><span class="cl">-rw-r--r-- <span class="m">1</span> elasticsearch elasticsearch <span class="m">10485760</span> Sep <span class="m">01</span> 00:00 demo-es_audit.json
</span></span><span class="line"><span class="cl">-rw-r--r-- <span class="m">1</span> elasticsearch elasticsearch <span class="m">10485760</span> Aug <span class="m">01</span> 00:00 demo-es_audit-2026-08-01.json
</span></span><span class="line"><span class="cl">-rw-r--r-- <span class="m">1</span> elasticsearch elasticsearch <span class="m">10485760</span> Jul <span class="m">01</span> 00:00 demo-es_audit-2026-07-01.json
</span></span><span class="line"><span class="cl">（审计文件按月滚动，历史文件转储至日志平台集中留存 <span class="m">180</span> 天）
</span></span></code></pre></div>
</details>


### C. 补偿措施：集群日志外送

**核查命令**：

```bash
journalctl -u elasticsearch --no-pager | tail -n 20
grep -R -i "elasticsearch" /etc/rsyslog.conf /etc/rsyslog.d /etc/logstash/conf.d 2>/dev/null | head -n 10
```

- 备注：审计日志需付费订阅而现场普遍为 Basic 许可，此时判定落到补偿措施：`elasticsearch.log`/`gc.log` 等集群与节点日志经 Logstash、rsyslog 或 Filebeat 外送集中日志审计系统，覆盖服务启停、配置变更（部分版本记录于 `security_config_change` 事件或日志）与异常访问，且平台留存不少于 6 个月。现场须在日志平台检索一条 6 个月前的记录作为留存证据，仅本地轮转、无外送的按部分符合偏下记录。
- 预期证据：rsyslog/Logstash 配置截图、日志平台检索界面截图（含历史记录）、外送链路说明、访谈记录。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -R -i <span class="s2">&#34;elasticsearch&#34;</span> /etc/logstash/conf.d（节选）
</span></span><span class="line"><span class="cl">input <span class="o">{</span> beats <span class="o">{</span> <span class="nv">port</span> <span class="o">=</span>&gt; <span class="m">5044</span> <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">output <span class="k">if</span> <span class="o">[</span>fields<span class="o">][</span>app<span class="o">]</span> <span class="o">==</span> <span class="s2">&#34;elasticsearch&#34;</span> <span class="o">{</span> elasticsearch <span class="o">{</span> <span class="nv">hosts</span> <span class="o">=</span>&gt; <span class="o">[</span><span class="s2">&#34;https://192.168.40.10:9200&#34;</span><span class="o">]</span> <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">（节点日志经 Filebeat→Logstash 上送日志审计平台，平台留存 <span class="m">180</span> 天，可检索 2026-03 以前记录）
</span></span></code></pre></div>
</details>


## 入侵防范

> **对应控制点**：GB/T 22239-2019 8.1.4.4 入侵防范 a)~h)、8.1.4.5 恶意代码防范
>
> **判定要点**：版本在官方维护期内且漏洞修补有记录（7.x 全线已停止维护，8.x 维护至 2027-01）、脚本类型/上下文按需收敛、9200/9300 暴露面收敛且启用 TLS、插件清单最小化、宿主机具备恶意代码防护 → 符合；部分项缺失但有等效补偿（限源、WAF/IPS、EDR）且证据齐全 → 部分符合；使用已停止维护版本且存在未修补高危漏洞、或 9200 对公网开放 → 不符合（高风险）。
>
> **取证要求**：版本回显截图、EOL 对照截图、脚本与 TLS 配置截图、端口监听截图、插件清单截图、漏洞扫描与整改记录、防恶意代码软件截图。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


版本已超出官方支持期（官方 EOL 页：7.17.x 维护期至 2025-04-15、支持期至 2026-01-15；8.x 维护期至 2027-01-15、支持期至 2027-07-15）且存在未修补的高危漏洞，判高风险；9200 明文 HTTP 直连互联网或跨不可信网络区域且无加密与限源补偿，一并判高风险。

判定口径详见 [22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)。
</div>


### A. 版本与 EOL 管理

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/" | grep -E "number|lucene_version"
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/plugins?v"
```

- 备注：以根端点回显的 `version.number` 对照官方 EOL 页（`elastic.co/support/eol`）核对维护状态：官方政策为每个大版本维护期取"GA 后 30 个月"与"下一代大版本 GA 后 18 个月"二者较长者。本文撰写时官方页面示值：7.17.x 维护期已于 2025-04-15 结束、支持期已于 2026-01-15 结束（即 7.x 全线已停止维护）；8.x 维护期至 2027-01-15、支持期至 2027-07-15；另 8.17 维护至 8.19 发布、8.18 维护至 9.2 发布，以 EOL 页当前公示为准。已停止维护的版本须要求被测单位提供漏洞扫描报告与升级计划。`GET /_cat/plugins?v` 核查插件清单与版本一致性，记录来源不明的第三方插件。
- 预期证据：版本截图、EOL 页对照截图、插件清单截图、漏洞扫描报告、升级工单。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/ <span class="p">|</span> grep -E <span class="s2">&#34;number|lucene_version&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;number&#34;</span> : <span class="s2">&#34;8.14.3&#34;</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;lucene_version&#34;</span> : <span class="s2">&#34;9.11.1&#34;</span>,
</span></span><span class="line"><span class="cl">（8.x 维护期内；对照 support/eol 页 8.x 维护期至 2027-01-15）
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cat/plugins?v
</span></span><span class="line"><span class="cl">name      component       version
</span></span><span class="line"><span class="cl">es-node-1 analysis-icu    8.14.3
</span></span><span class="line"><span class="cl">es-node-1 repository-s3   8.14.3
</span></span><span class="line"><span class="cl">（仅官方随版本分发的插件，与节点版本一致）
</span></span></code></pre></div>
</details>


### B. 脚本攻击面收敛

**核查命令**：

```bash
grep -n -E "script.allowed_types|script.allowed_contexts" /etc/elasticsearch/elasticsearch.yml
```

- 备注：官方文档明确两项默认值均为"不限制"——`script.allowed_types` 默认同时允许 `inline` 与 `stored` 脚本，`script.allowed_contexts` 默认允许全部上下文；设为 `none` 可分别全禁。业务无脚本需求时建议收敛为 `none`（使用 Kibana 的注意官方提示：部分 Kibana 功能依赖 inline 脚本，须保留 `inline`）。未配置属普遍形态，现场记录默认态并结合暴露面与访问控制判定，一般作为加固建议而非不符合项。
- 预期证据：脚本配置截图（含"未配置即默认允许"的阴性说明）、业务脚本使用场景说明。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n -E <span class="s2">&#34;script.allowed_types|script.allowed_contexts&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">（无输出：按官方文档默认允许 inline/stored 两类脚本与全部上下文）
</span></span><span class="line"><span class="cl">（整改建议：无脚本业务场景时收敛 script.allowed_types: none；如需保留，仅放行实际使用的上下文）
</span></span></code></pre></div>
</details>


### C. 端口暴露面与 TLS 配置核查

**核查命令**：

```bash
ss -lntp | grep -E "9200|9300"
grep -n -E "xpack.security.http.ssl|xpack.security.transport.ssl" /etc/elasticsearch/elasticsearch.yml | head -n 20
curl -sS -k -u elastic "https://127.0.0.1:9200/_ssl/certificates?pretty" 2>/dev/null | head -n 30
```

- 备注：9200 为 HTTP 层、9300 为节点间传输层，核对监听范围与防火墙策略（呼应访问控制 C 节）。TLS 取证以 `elasticsearch.yml` 实际生效配置为准——官方文档明确**节点信息 API 会隐去全部 ssl 设置**，不能靠 `GET /_nodes` 核对 TLS；8.x 起可用 SSL 证书 API（`GET _ssl/certificates`）查看节点加载的证书与到期时间（字段以实际版本回显为准）。9300 应仅监听集群内网且启用 transport TLS，严禁暴露到业务/办公网段。
- 预期证据：端口监听截图、TLS 配置行截图、证书清单与到期时间截图、防火墙策略截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ss -lntp <span class="p">|</span> grep -E <span class="s2">&#34;9200|9300&#34;</span>
</span></span><span class="line"><span class="cl">LISTEN <span class="m">0</span> <span class="m">1024</span> *:9200 users:<span class="o">((</span><span class="s2">&#34;java&#34;</span>,pid<span class="o">=</span>2311,fd<span class="o">=</span>312<span class="o">))</span>
</span></span><span class="line"><span class="cl">LISTEN <span class="m">0</span> <span class="m">1024</span> 192.168.10.5:9300 users:<span class="o">((</span><span class="s2">&#34;java&#34;</span>,pid<span class="o">=</span>2311,fd<span class="o">=</span>287<span class="o">))</span>
</span></span><span class="line"><span class="cl">grep -n -E <span class="s2">&#34;xpack.security.(http|transport).ssl&#34;</span> /etc/elasticsearch/elasticsearch.yml（节选）
</span></span><span class="line"><span class="cl">xpack.security.http.ssl.enabled: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">xpack.security.http.ssl.keystore.path: certs/http.p12
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.enabled: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.verification_mode: full
</span></span><span class="line"><span class="cl">（HTTP 层与传输层均已启用 TLS，transport 证书校验模式为默认 full）
</span></span></code></pre></div>
</details>


### D. 运行账户与恶意代码防范

**核查命令**：

```bash
ps -ef | grep [e]lasticsearch
systemctl status elasticsearch --no-pager | head -n 8
systemctl list-units --type=service --state=running | grep -i -E "clam|edr|antivir|hids"
```

- 备注：进程属主应为专用 `elasticsearch` 低权账户（RPM/DEB 默认），不应以 root 运行。Elasticsearch 本体对索引数据仅作存储与检索，不执行上传的可执行文件，恶意代码防范判定落在宿主机防恶意代码软件/EDR/HIDS 的安装、病毒库更新与拦截记录（软件名因单位而异，`systemctl list-units` 现场确认）；容器化部署的另行核查镜像来源与扫描记录。
- 预期证据：进程属主截图、防恶意代码软件运行与病毒库截图、拦截记录、镜像扫描报告（容器部署）。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ps -ef <span class="p">|</span> grep <span class="o">[</span>e<span class="o">]</span>lasticsearch
</span></span><span class="line"><span class="cl">elastic+  <span class="m">2311</span>     <span class="m">1</span>  <span class="m">2</span> Aug30 ?  06:12:33 /usr/share/elasticsearch/jdk/bin/java ... org.elasticsearch.bootstrap.Elasticsearch
</span></span><span class="line"><span class="cl">systemctl list-units --type<span class="o">=</span>service --state<span class="o">=</span>running <span class="p">|</span> grep -i -E <span class="s2">&#34;edr|hids&#34;</span>
</span></span><span class="line"><span class="cl">  edr-agent.service  loaded active running  EDR Agent
</span></span><span class="line"><span class="cl">（以专用低权账户运行；宿主机部署 EDR，病毒库当日更新）
</span></span></code></pre></div>
</details>


## 数据完整性

> **对应控制点**：GB/T 22239-2019 8.1.4.7 数据完整性 a)b)
>
> **判定要点**：节点间传输层启用 TLS（`xpack.security.transport.ssl.enabled`）且证书校验模式为默认 `full`，8.x 首启自动配置已覆盖；传输完整性另有 TCP 校验与 TLS MAC 保障；索引数据具备快照/SLM 备份等可校验的保护机制 → 符合；仅部分节点启用或校验模式降为 `certificate`/`none` → 部分符合；传输层完全未加密且跨不可信网络 → 不符合。
>
> **取证要求**：transport TLS 配置截图、证书清单截图、快照仓库与 SLM 策略截图、节点间通信链路说明。

### A. 传输层 TLS（transport）

**核查命令**：

```bash
grep -n "xpack.security.transport.ssl" /etc/elasticsearch/elasticsearch.yml
curl -sS -k -u elastic "https://127.0.0.1:9200/_ssl/certificates?pretty" 2>/dev/null | head -n 30
```

- 备注：`xpack.security.transport.ssl.enabled` 设置本身默认 `false`（7.x/8.x 相同），但 8.x 首次启动由安全自动配置生成证书并写入生效配置，7.x 需手工配置；官方现行文档同时说明节点间默认采用 mTLS 且 `client_authentication` 默认 `required`、`verification_mode` 默认 `full`（证书+主机名校验），现场如出现 `certificate` 或 `none` 记录为降级项。SSL 证书 API（`GET _ssl/certificates`，8.x 起）可核验各节点加载证书的到期时间，字段名以实际版本回显为准。
- 预期证据：transport TLS 配置行截图、证书清单与到期时间截图、节点间链路说明（内网/TLS）。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -n <span class="s2">&#34;xpack.security.transport.ssl&#34;</span> /etc/elasticsearch/elasticsearch.yml（节选）
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.enabled: <span class="nb">true</span>
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.verification_mode: full
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.keystore.path: certs/transport.p12
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.truststore.path: certs/transport.p12
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_ssl/certificates?pretty（节选，字段以实际版本为准）
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;subject_dn&#34;</span> : <span class="s2">&#34;CN=es-node-1&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;expiry&#34;</span> : <span class="s2">&#34;2027-08-30T00:00:00.000Z&#34;</span>
</span></span><span class="line"><span class="cl">（传输层启用 TLS、校验模式 full，证书在有效期内）
</span></span></code></pre></div>
</details>


### B. 快照与 SLM

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_snapshot?pretty"
curl -sS -k -u elastic "https://127.0.0.1:9200/_slm/policy?pretty" | head -n 40
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/snapshots/demo-repo?v"
```

- 备注：`GET /_snapshot` 列出注册的快照仓库及其类型/设置（无任何仓库时返回错误，该阴性结果本身即"未配置快照备份"的证据）；`GET /_slm/policy`（7.4.0+）返回策略定义与最近一次快照成功/失败信息；`GET /_cat/snapshots/<仓库>` 回显各快照状态（SUCCESS/PARTIAL/FAILED 等），出现 PARTIAL/FAILED 需追查原因。快照数据完整性由仓库侧（对象存储校验、异地副本）补强，作为访谈取证。
- 预期证据：仓库清单截图、SLM 策略与最近执行结果截图、快照状态截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_snapshot?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;demo-repo&#34;</span> : <span class="o">{</span> <span class="s2">&#34;type&#34;</span> : <span class="s2">&#34;fs&#34;</span>, <span class="s2">&#34;settings&#34;</span> : <span class="o">{</span> <span class="s2">&#34;location&#34;</span> : <span class="s2">&#34;/data/snapshots&#34;</span> <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cat/snapshots/demo-repo?v
</span></span><span class="line"><span class="cl">id                   repository status start_time indices
</span></span><span class="line"><span class="cl">snapshot-2026.09.01  demo-repo  SUCCESS 01:30:02   <span class="m">12</span>
</span></span><span class="line"><span class="cl">snapshot-2026.08.31  demo-repo  SUCCESS 01:30:01   <span class="m">12</span>
</span></span><span class="line"><span class="cl">（每日 SLM 快照全部 SUCCESS，仓库位于独立数据盘并同步至备份平台）
</span></span></code></pre></div>
</details>


## 数据保密性

> **对应控制点**：GB/T 22239-2019 8.1.4.8 数据保密性 a)b)
>
> **判定要点**：HTTP 层启用 TLS 且明文请求被拒（8.x 默认形态）、传输协议不低于 TLSv1.2、密钥与口令经 keystore 存储且配置文件无明文口令、静态存储依赖磁盘/文件系统加密并有责任说明 → 符合；HTTP 层明文对外或明文口令残留 → 部分符合/不符合；鉴别信息明文传输且跨不可信区域 → 不符合（高风险）。
>
> **取证要求**：HTTP TLS 配置与协议协商截图、明文探测截图、keystore 键清单截图、配置文件无明文口令截图、磁盘加密证据或补偿说明、响应脱敏责任说明。

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">高风险提示</div>


HTTP 层未启用 TLS 且 9200 跨安全域可达，口令与鉴别信息明文传输，可被链路窃听，判高风险；Elasticsearch 本体对静态数据**不提供开箱即用的加密**（官方文档明确自管部署需自行配置磁盘级加密），敏感业务数据落盘无磁盘加密且无访问控制补偿的，一并记录高风险。

判定口径详见 [22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)。
</div>


### A. HTTP 层 TLS

**核查命令**：

```bash
grep -n "xpack.security.http.ssl" /etc/elasticsearch/elasticsearch.yml
curl -sS "http://127.0.0.1:9200/" -o /dev/null -w "http探测:%{http_code}\n" 2>/dev/null
openssl s_client -connect 127.0.0.1:9200 -brief </dev/null 2>&1 | head -n 8
```

- 备注：`xpack.security.http.ssl.enabled` 设置默认 `false`（7.x/8.x 相同），8.x 首启自动配置会写入并启用；7.x 未配置时为明文 HTTP，需重点取证。协议版本：官方文档默认 `supported_protocols` 在 JVM 支持 TLSv1.3 时为 `TLSv1.3,TLSv1.2`（及更低兼容项），以 `openssl s_client` 实际协商结果为准，低于 TLSv1.2 记录整改。明文探测回显非 200（连接失败/400）即为 TLS 生效证据；7.x 明文返回 200 则为高风险证据。
- 预期证据：HTTP TLS 配置截图、明文探测回显截图、TLS 协商版本与套件截图、证书有效期截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS http://127.0.0.1:9200/ -o /dev/null -w <span class="s2">&#34;http探测:%{http_code}\n&#34;</span>
</span></span><span class="line"><span class="cl">http探测:400
</span></span><span class="line"><span class="cl">（明文请求被拒绝，HTTP 层 TLS 生效；7.x 未启用 TLS 时该探测返回 200，属高风险证据）
</span></span><span class="line"><span class="cl">openssl s_client -connect 127.0.0.1:9200 -brief &lt;/dev/null
</span></span><span class="line"><span class="cl">Protocol version: TLSv1.3
</span></span><span class="line"><span class="cl">Ciphersuite: TLS_AES_256_GCM_SHA384
</span></span><span class="line"><span class="cl">Peer certificate: <span class="nv">CN</span><span class="o">=</span>es-node-1
</span></span><span class="line"><span class="cl">（协商 TLSv1.3，证书主体与配置一致）
</span></span></code></pre></div>
</details>


### B. 密钥存储与配置文件

**核查命令**：

```bash
/usr/share/elasticsearch/bin/elasticsearch-keystore list
grep -R -n -i "password\|secret\|key_passphrase" /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/jvm.options 2>/dev/null
```

- 备注：`elasticsearch-keystore list` 为**只读**命令，仅列出 keystore 中安全设置的键名（不输出值），核对口令/密钥类设置是否入 keystore 而非明文落配置；压缩包部署路径为 `<安装目录>/bin/elasticsearch-keystore`，以现场为准。`elasticsearch.yml` 中应无明文口令（官方早已废弃 realm 的 `bind_password` 明文写法，改用 keystore）；若发现明文口令记录整改并要求立即轮换。
- 预期证据：keystore 键清单截图、配置文件无明文口令截图（阴性证据）、keystore 文件权限截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/usr/share/elasticsearch/bin/elasticsearch-keystore list（节选）
</span></span><span class="line"><span class="cl">keystore.seed
</span></span><span class="line"><span class="cl">xpack.security.http.ssl.keystore.secure_password
</span></span><span class="line"><span class="cl">xpack.security.transport.ssl.keystore.secure_password
</span></span><span class="line"><span class="cl">grep -R -n -i <span class="s2">&#34;password&#34;</span> /etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">（无输出：配置文件无明文口令，密钥均入 keystore，文件归属 elasticsearch 运行账户）
</span></span></code></pre></div>
</details>


### C. 静态加密责任边界

**核查命令**：

```bash
lsblk -f
df -hT /var/lib/elasticsearch
cryptsetup isLuks /dev/vdb && echo "LUKS encrypted"   # 设备名以现场为准
```

- 备注：官方数据安全文档明确：自管部署**没有开箱即用的静态加密**（"no encryption at rest out of the box"），须由用户在主机上自行配置磁盘级加密（dm-crypt 等，官方文档同时声明该配置不在其支持范围内）。因此判定路径为：数据目录所在块设备是否启用 LUKS/加密文件系统/云盘加密（`lsblk`/`df`/`cryptsetup isLuks` 佐证），或依托受控机房+严格 ACL 的补偿措施并留存说明；索引内容级脱敏与查询响应字段脱敏属应用层责任（呼应个人信息保护节）。未做任何磁盘加密且承载敏感个人信息的，记录为高风险并出具整改建议。
- 预期证据：`lsblk`/`df` 截图、LUKS 判定回显截图、加密方案与密钥管理制度、补偿措施说明、访谈记录。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">df -hT /var/lib/elasticsearch
</span></span><span class="line"><span class="cl">/dev/mapper/vg--data-lv--es xfs  2.0T  688G  1.4T  34% /var/lib/elasticsearch
</span></span><span class="line"><span class="cl">cryptsetup isLuks /dev/vdb <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;LUKS encrypted&#34;</span>
</span></span><span class="line"><span class="cl">LUKS encrypted
</span></span><span class="line"><span class="cl">（数据目录落于 LUKS 加密卷；密钥由单位密管平台托管，介质报废随制度销毁）
</span></span></code></pre></div>
</details>


## 备份恢复

> **对应控制点**：GB/T 22239-2019 8.1.4.9 数据备份恢复 a)c)
>
> **判定要点**：注册快照仓库并配置 SLM 定时快照、快照状态持续 SUCCESS 且异地/离线副本、配置与证书纳入备份、具备集群冗余（多节点）且恢复经演练并有记录 → 符合；有快照但无演练或仓库单点 → 部分符合；无任何快照与配置备份且集群单节点 → 不符合（高风险）。
>
> **取证要求**：仓库与 SLM 策略截图、快照清单截图、配置备份记录、集群健康截图、恢复演练记录与恢复手册。

### A. 快照仓库与 SLM 策略

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_snapshot?pretty"
curl -sS -k -u elastic "https://127.0.0.1:9200/_slm/policy?pretty" | head -n 50
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/snapshots/demo-repo?v"
```

- 备注：核对仓库类型（fs/s3/gcs/azure 等）与落点是否独立于主存储（本地盘仓库应另配异地拷贝），SLM 策略的 `schedule`、`repository`、`retention` 与最近一次成功/失败时间戳（`stats` 段）逐项取证；快照列表状态持续 SUCCESS、数量与保留策略一致。恢复演练**不在现场执行**，以历史演练记录与恢复手册取证。
- 预期证据：仓库清单截图、SLM 策略与执行状态截图、快照列表截图、备份介质与异地存放说明。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_slm/policy?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;daily-snapshots&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;policy&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;schedule&#34;</span> : <span class="s2">&#34;0 30 1 * * ?&#34;</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;&lt;daily-snap-{now/d}&gt;&#34;</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;repository&#34;</span> : <span class="s2">&#34;demo-repo&#34;</span>,
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;retention&#34;</span> : <span class="o">{</span> <span class="s2">&#34;expire_after&#34;</span> : <span class="s2">&#34;30d&#34;</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;next_execution_millis&#34;</span> : 1780000000000,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;stats&#34;</span> : <span class="o">{</span> <span class="s2">&#34;snapping_in_progress&#34;</span> : <span class="nb">false</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">（每日 01:30 全量快照，保留 <span class="m">30</span> 天，仓库另由备份平台异地拷贝）
</span></span></code></pre></div>
</details>


### B. 配置与证书备份

**核查命令**：

```bash
find /etc/elasticsearch -type f 2>/dev/null
```

- 备注：应覆盖 `elasticsearch.yml`、jvm.options、用户/角色文件（file realm）、HTTP 与 transport 证书及 keystore；keystore 与证书文件属敏感资产，备份介质权限应收敛并记录台账。
- 预期证据：配置文件清单截图、备份策略与备份记录截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">find /etc/elasticsearch -type f
</span></span><span class="line"><span class="cl">/etc/elasticsearch/elasticsearch.yml
</span></span><span class="line"><span class="cl">/etc/elasticsearch/jvm.options
</span></span><span class="line"><span class="cl">/etc/elasticsearch/users
</span></span><span class="line"><span class="cl">/etc/elasticsearch/users_roles
</span></span><span class="line"><span class="cl">/etc/elasticsearch/certs/http.p12
</span></span><span class="line"><span class="cl">/etc/elasticsearch/certs/transport.p12
</span></span><span class="line"><span class="cl">/etc/elasticsearch/elasticsearch.keystore
</span></span><span class="line"><span class="cl">（上述文件纳入每周配置备份，保留 <span class="m">8</span> 个版本，备份介质加密存放）
</span></span></code></pre></div>
</details>


### C. 集群冗余与恢复演练

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_cluster/health?pretty" | grep -E "status|number_of_nodes|number_of_data_nodes"
```

- 备注：多节点集群且健康状态 green/yellow 可佐证硬件冗余（呼应基础信息）；副本分片配置、机架/可用区分布结合架构图访谈。恢复能力以快照恢复演练记录（时间、范围、RTO 结论）与镜像/重装手册证明，恢复操作本身不得在现场随意实施。
- 预期证据：集群健康截图、副本分片与节点分布说明、恢复演练记录、恢复手册。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cluster/health?pretty <span class="p">|</span> grep -E <span class="s2">&#34;status|number_of_nodes&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;status&#34;</span> : <span class="s2">&#34;green&#34;</span>,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;number_of_nodes&#34;</span> : 3,
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;number_of_data_nodes&#34;</span> : 3,
</span></span><span class="line"><span class="cl">（3 节点集群，索引副本数 1；2026-08-20 曾在测试环境完成整库快照恢复演练，RTO 2.5 小时，记录在案）
</span></span></code></pre></div>
</details>


## 剩余信息保护

> **对应控制点**：GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)
>
> **判定要点**：过期/删除索引经 ILM delete 阶段按期物理删除、废弃 API Key 及时撤销（失效 Key 默认保留 7 天后可被清理）、旧用户/旧角色/旧凭证（keystore 残留键、明文口令、废弃证书）及时清理并有记录 → 符合；仅部分清理或无台账 → 部分符合；敏感索引删除后无任何清理与介质管理、凭证长期残留 → 不符合。
>
> **取证要求**：ILM 策略截图、API Key 状态截图、keystore 键清单截图、配置与凭证清理台账、介质销毁记录。

### A. 索引生命周期与删除清理

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_ilm/policy?pretty" | head -n 40
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/indices?v" | tail -n 15
```

- 备注：`GET /_ilm/policy`（需 `manage_ilm` 权限）核对 delete 阶段 `min_age` 与动作，确认日志/中间数据类索引到期后由 ILM 自动删除，索引清单中不应出现长期未清理的已废弃索引（如 `*-bak`、`*-old`、临时测试索引）；含个人信息的索引删除后空间由后续写入复用，介质层面残留由磁盘加密与介质管理制度兜底（呼应数据保密性 C 节）。
- 预期证据：ILM 策略截图、索引清单截图（无废弃索引或已列入清理计划）、数据保留制度。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_ilm/policy?pretty（节选）
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;demo-log-policy&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;policy&#34;</span> : <span class="o">{</span> <span class="s2">&#34;phases&#34;</span> : <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;delete&#34;</span> : <span class="o">{</span> <span class="s2">&#34;min_age&#34;</span> : <span class="s2">&#34;90d&#34;</span>, <span class="s2">&#34;actions&#34;</span> : <span class="o">{</span> <span class="s2">&#34;delete&#34;</span> : <span class="o">{</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">（业务日志索引 <span class="m">90</span> 天后由 ILM 自动删除，索引清单中无长期滞留的废弃索引）
</span></span></code></pre></div>
</details>


### B. 凭证撤销与残留清理

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/api_key?pretty" | grep -E "name|invalidated|expiration" | head -n 15
/usr/share/elasticsearch/bin/elasticsearch-keystore list | head -n 10
ls -l /etc/elasticsearch/ | grep -E "key|cert|users"
```

- 备注：API Key 清单核对 `invalidated`/`expiration`：离职人员与下线应用的 Key 应已撤销，官方文档明确失效/过期的 API Key 默认保留 7 天（`xpack.security.authc.api_key.delete.retention_period`）后可被清理，撤销记录作为判定证据。keystore 与 `/etc/elasticsearch` 下应无废弃的旧证书、旧口令键、临时用户文件；岗位调整后 native 用户与角色绑定应及时回收（呼应身份鉴别 C 节）。
- 预期证据：API Key 状态截图、keystore 键清单截图、证书与用户文件清单截图、凭证发放/撤销台账。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_security/api_key?pretty <span class="p">|</span> grep -E <span class="s2">&#34;name|invalidated&#34;</span>（节选）
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;logbeat-writer&#34;</span>, <span class="s2">&#34;invalidated&#34;</span> : false,
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;name&#34;</span> : <span class="s2">&#34;old-report-key&#34;</span>, <span class="s2">&#34;invalidated&#34;</span> : true,
</span></span><span class="line"><span class="cl">（下线应用的 Key 已于 2026-07 撤销；按默认策略失效 <span class="m">7</span> 天后可清理；台账与回显一致）
</span></span></code></pre></div>
</details>


## 个人信息保护

> **对应控制点**：GB/T 22239-2019 8.1.4.11 个人信息保护 a)b)
>
> **判定要点**：仅业务必需的个人信息入索引且保留期受控（ILM delete）、承载个人信息的索引访问受角色/索引级/DLS 限制、审计与日志样例经脱敏后使用、导出有审批 → 符合；有访问控制但未做字段最小化或导出无管控 → 部分符合；索引或日志明文存储身份证号、手机号等且无访问控制 → 不符合（高风险）。
>
> **取证要求**：索引清单与业务说明、字段级权限或脱敏方案证据、样例数据/日志（脱敏后）、导出审批记录、数据保留制度。

### A. 索引与日志中的个人信息

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_cat/indices?v" | head -n 20
head -c 800 /var/log/elasticsearch/*_audit.json 2>/dev/null
```

- 备注：结合索引命名与业务方访谈确认承载个人信息的索引（如用户画像、订单、会话日志）；Elasticsearch 本体不采集个人信息，数据全部来自应用写入，字段级脱敏/加密应在应用侧或采集管道完成（ingest 处理属数据管道责任，现场访谈留证即可，不在本文展开配置类命令）。审计与集群日志中的用户名、来源 IP、请求体等属个人信息载体，取证截图须先脱敏；`head -c` 限量抽样避免整页敏感数据入报告。
- 【不适用】若经业务方书面确认全部索引均为技术性数据（系统日志、监控指标、公开内容），不承载任何个人信息，则该点可判定为不适用。依据：GB/T 28448-2019 个人信息保护控制点以实际处理个人信息为前提。
- 预期证据：索引清单截图、业务确认单、脱敏样例截图、采集管道脱敏方案说明。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_cat/indices?v（节选）
</span></span><span class="line"><span class="cl">health status index                 docs.count store.size
</span></span><span class="line"><span class="cl">green  open   app-log-2026.08.31       4.2m   1.1gb
</span></span><span class="line"><span class="cl">green  open   user-profile              86k   210mb
</span></span><span class="line"><span class="cl">green  open   order-index              1.3m   620mb
</span></span><span class="line"><span class="cl">（user-profile/order-index 承载个人信息：应用侧写入前对手机号/证件号做掩码，索引访问限 demo-readonly 角色并启用字段级安全）
</span></span></code></pre></div>
</details>


### B. 访问控制、保留期与导出管控

**核查命令**：

```bash
curl -sS -k -u elastic "https://127.0.0.1:9200/_ilm/policy?pretty" | grep -E "min_age|\"delete\"" | head -n 10
curl -sS -k -u elastic "https://127.0.0.1:9200/_security/role?pretty" | grep -E "field_security|\"query\"" | head -n 10
```

- 备注：个人信息索引应绑定带 delete 阶段的 ILM 策略（保留期满足业务与合规要求）、访问绑定最小角色（索引级/字段级权限，复用访问控制 A/D 节证据闭环）；运维查询导出应经审批并留存记录（日志审计平台可追溯 `access_granted` 事件与导出脚本执行）。Elasticsearch 不提供面向终端用户的个人信息导出界面，导出能力即 REST 查询与脚本，权限与审计覆盖即为控制点。
- 预期证据：ILM 保留期截图、角色权限截图、导出审批记录、日志审计平台追溯截图。


<details class="td-details"><summary>示例输出（节选）</summary><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -sS -k -u elastic https://127.0.0.1:9200/_ilm/policy?pretty <span class="p">|</span> grep -E <span class="s2">&#34;min_age|\&#34;delete\&#34;&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;delete&#34;</span> : <span class="o">{</span> <span class="s2">&#34;min_age&#34;</span> : <span class="s2">&#34;90d&#34;</span>, <span class="s2">&#34;actions&#34;</span> : <span class="o">{</span> <span class="s2">&#34;delete&#34;</span> : <span class="o">{</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">（个人信息类索引 <span class="m">90</span> 天自动删除；查询走 demo-readonly 角色且仅开放脱敏后字段；导出申请经安全审批后由运维执行并留痕）
</span></span></code></pre></div>
</details>


## 参考依据

- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》（8.1.4 安全计算环境）：[http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF](http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF)
- GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》（单元测评的测评实施与结果判定：符合/部分符合/不符合/不适用）：[http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C](http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C)
- GB/T 25070-2019《信息安全技术 网络安全等级保护安全设计技术要求》，可在全国标准信息公共服务平台检索：[http://openstd.samr.gov.cn/bzgk/gb/](http://openstd.samr.gov.cn/bzgk/gb/)
- Elasticsearch 官方安全设置参考（`xpack.security.enabled`、匿名访问、认证域、API Key、DLS/FLS、IP 过滤等设置与默认值，现行版）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html)
- Elasticsearch 官方配置参考·安全设置（TLS/SSL 设置：transport/http ssl 默认值、`verification_mode` 默认 full、节点信息 API 隐去 ssl 设置）：[https://www.elastic.co/docs/reference/elasticsearch/configuration-reference/security-settings](https://www.elastic.co/docs/reference/elasticsearch/configuration-reference/security-settings)
- Elasticsearch 7.17 官方安全设置（`xpack.security.enabled` 在 basic/trial 许可下默认 false 的历史口径）：[https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-settings.html](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-settings.html)
- Elasticsearch 官方审计文档（启用方式、事件类型、`<clustername>_audit.json` 落盘、"Audit logs are only available on certain subscription levels"）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing.html) 与 [https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html)
- Elasticsearch Security REST API 文档（Get users/Get roles/Get API key information/Get service accounts，端点与权限）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-user.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-user.html)、[https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-role.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-role.html)、[https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-api-key.html)、[https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-service-accounts.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-service-accounts.html)
- Elasticsearch 官方内置用户文档（`elastic` 超管等六个内置用户、7.x `elasticsearch-setup-passwords` 与 bootstrap 口令）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html)
- Elastic 官方部署指南·安全自动配置（8.x 首次启动生成 transport/HTTP TLS 证书、设置 elastic 口令、RPM/DEB 需 `elasticsearch-reset-password`）：[https://www.elastic.co/docs/deploy-manage/security/self-auto-setup](https://www.elastic.co/docs/deploy-manage/security/self-auto-setup)
- Elastic 官方部署指南·数据安全（自管部署无开箱即用静态加密，须自行配置磁盘级加密）：[https://www.elastic.co/docs/deploy-manage/security/data-security](https://www.elastic.co/docs/deploy-manage/security/data-security)
- Elastic 官方 TLS 证书更新指南（SSL 证书 API `GET _ssl/certificates` 核验证书到期）：[https://www.elastic.co/docs/deploy-manage/security/updating-certificates](https://www.elastic.co/docs/deploy-manage/security/updating-certificates)
- Elasticsearch 官方脚本安全文档（`script.allowed_types`/`script.allowed_contexts` 默认不限制、`none` 全禁、Kibana 依赖提示）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-security.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-security.html)
- Elasticsearch 官方安全设置存储文档（`elasticsearch-keystore list` 只读列出 keystore 键）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html)
- Elasticsearch REST API 参考·快照与 ILM（`GET /_snapshot`、`GET /_cat/snapshots/{repository}`、`GET /_slm/policy`、`GET /_ilm/policy`）：[https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-snapshot-get-repository](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-snapshot-get-repository)、[https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-snapshots.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-snapshots.html)、[https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get-policy.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get-policy.html)、[https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ilm-get-lifecycle](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ilm-get-lifecycle)
- Elasticsearch 官方许可 API（`GET /_license` 回显 type/status）：[https://www.elastic.co/guide/en/elasticsearch/reference/current/get-license.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/get-license.html)
- Elastic 订阅功能对照页（各层级安全功能归属：Basic 含 TLS/RBAC/file 与 native 认证等基线，审计日志、DLS/FLS 等列于付费层级）：[https://www.elastic.co/subscriptions](https://www.elastic.co/subscriptions)
- Elastic 官方博客 "Security for Elasticsearch is now free"（6.8.0/7.1.0 起 TLS、file/native realm、RBAC 随免费 Basic 层分发）：[https://www.elastic.co/blog/security-for-elasticsearch-is-now-free](https://www.elastic.co/blog/security-for-elasticsearch-is-now-free)
- Elastic 官方博客 "Elasticsearch is open source, again" 与许可 FAQ（2024-08 公告、2024-09 起源代码以 SSPL 1.0/AGPLv3/Elastic License v2 三许可提供，安全功能层级不受影响）：[https://www.elastic.co/blog/elasticsearch-is-open-source-again](https://www.elastic.co/blog/elasticsearch-is-open-source-again)、[https://www.elastic.co/pricing/faq/licensing](https://www.elastic.co/pricing/faq/licensing)
- Elastic 官方产品生命周期页（大版本维护期/支持期政策与 7.17、8.x 到期日示值）：[https://www.elastic.co/support/eol](https://www.elastic.co/support/eol)
- 《网络安全等级保护测评高风险判定指引》（中关村信息安全测评联盟团体标准），站内对照表：[22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)
- 命令核验说明：本文命令已于 2026-09 对照 elastic.co 官方文档核验——Elasticsearch 参考手册（security-settings、auditing、auditing-settings、built-in-users、secure-settings、modules-scripting-security、cat-snapshots、slm-api-get-policy、get-license）、现行配置参考（security-settings：transport/http SSL、verification_mode、IP 过滤、节点信息 API 隐去 ssl 设置）、REST API 参考（get user/role/api key/service accounts、operation-snapshot-get-repository、operation-ilm-get-lifecycle）、部署指南（self-auto-setup、data-security、updating-certificates）及 support/eol、subscriptions、pricing/faq/licensing 与官方博客。版本差异注意点：①`xpack.security.enabled` 在 7.x 对 basic/trial 许可默认 `false`（gold 及以上默认 `true`），8.x 起默认 `true`，且 8.x 首次启动自动配置 transport/HTTP TLS 证书并生成 elastic 口令（RPM/DEB 不回显，须经 `elasticsearch-reset-password` 重置；7.x 用 `elasticsearch-setup-passwords`，设置后 bootstrap 口令失效）；②`xpack.security.http.ssl.enabled` 与 `xpack.security.transport.ssl.enabled` 的设置默认值 7.x/8.x 均为 `false`，8.x 的 TLS 生效值由自动配置写入 `elasticsearch.yml`，判定以实际生效配置与端口探测为准，且节点信息 API 会隐去全部 ssl 设置、不得据此取证；③`xpack.security.transport.ssl.verification_mode` 默认 `full`，节点间默认 mTLS、`client_authentication` 默认 `required`（现行文档口径，7.x 现场须以实际配置核对）；④审计默认关闭（默认事件列表不含 `authentication_success`），仅在特定订阅层级提供，8.x 修改后须重启生效；⑤脚本默认允许 `inline`/`stored` 两类与全部上下文；⑥`GET _ssl/certificates` 为 8.x 起提供的 SSL 证书 API；⑦官方 EOL 页示值 7.17.x 维护期至 2025-04-15、支持期至 2026-01-15（7.x 全线已到期），8.x 维护期至 2027-01-15、支持期至 2027-07-15，现场以 EOL 页当日公示为准。

## 关联文章

- 容器平台：[Docker 容器运行平台测评](../docker/)、[Kubernetes 容器编排平台测评](../kubernetes/)
- 消息队列：[Apache Kafka 消息中间件测评](../kafka/)
- 缓存服务：[Redis 缓存数据库测评](../redis/)
- 现场指引：[不适用控制点审阅结论](../现场指引/不适用控制点审阅结论/)、[现场使用总指引（中间件与容器）](../现场指引/现场使用总指引中间件与容器/)、[现场判定话术（不适用控制点）](../现场指引/现场判定话术不适用控制点/)
- 板块目录：[中间件与容器](../)
- 配套加固：[17、网络设备、安全设备、服务器、数据库和应用系统的加固方案](../../../reinforce/其他系统或设备/17网络设备安全设备服务器数据库和应用系统的加固方案/)
- 取证记录：[16、安全评估加固记录表3.0](../../../reinforce/其他系统或设备/16安全评估加固记录表3.0/)
- 高风险口径：[22、高风险判定指引与加固对照表](../../../reinforce/其他系统或设备/22高风险判定指引与加固对照表/)
