知其然,知其所以然
Elasticsearch 2026-10-02

Elasticsearch 用户认证

真实开启security用file realm建用户,_authenticate确认通过default_file realm认证;创建API Key用Authorization:ApiKey认证成功但roles字段为空[];拿这个看似无权限的key建索引却成功,因为未指定role_descriptors的key会继承创建者全部权限;invalidate后再认证报错明确点名是哪个key失效。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

Role 与 Permission

真实建两个索引,定义cluster权限为空、只对一个索引给read权限的自定义role并绑定新用户,验证读授权索引成功、写授权索引被拒绝且精确列出所需权限名、读未授权索引和查cluster/health同样被拒绝,4次403报错结构一致,每次精确点名当前角色、涉及索引及缺少的权限名。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

Index Privileges

真实只给一个用户create_doc这一个索引权限,验证用POST新建全新文档成功,但用PUT覆盖已存在的文档被拒绝(需要create/index/write/all,create_doc不在名单里),删除文档同样被拒绝;用带op_type=create参数的PUT创建全新id也成功了,证明create_doc判定的是真实的操作语义而不是HTTP方法本身。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

Document Level Security

真实验证DLS功能在basic许可证下被直接拒绝;用ES自带的trial许可证激活后role配置创建成功;测试受限用户的search和count都只能看到授权文档,直接GET一条被过滤的文档返回found:false而不是403,对比管理员确认该文档真实存在,揭示DLS让被过滤文档表现得如同不存在以避免泄露数据存在性。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

Field Level Security

真实用trial许可证解锁FLS,给用户配上排除salary字段的field_security后GET和search都只返回name和department,salary整条从_source消失而非显示null;用range查询按隐藏的salary字段筛选数据查出0条结果,即便数据满足条件,管理员跑同查询能正常匹配,揭示FLS让隐藏字段在查询语义层面也彻底消失。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

API Key 认证

创建者apikeyadmin是superuser,但显式给key配上只对一个索引有read权限的role_descriptors后,读授权索引成功,写授权索引和读未授权索引都被拒绝,证明key自己声明的role_descriptors才是真实的权限天花板;建一个2秒过期的key,等3秒后收到api key is expired的精确报错,验证expiration严格按墙上时间生效。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

TLS 节点间通信

用elasticsearch-certutil生成CA和节点证书搭建2节点集群并开启transport TLS,同一张CA证书下节点成功组网且跨节点写入正常复制;用不同CA签发的冒牌证书配第三个节点尝试加入,原集群node数量卡死在2,冒牌节点日志精确记录SSLHandshakeException和两边CA指纹差异,揭示信任链不匹配的节点在握手阶段就被挡住。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

HTTPS 客户端连接

用elasticsearch-certutil生成证书给HTTP层开启TLS,验证普通http协议连接该端口什么都没返回;curl -k跳过验证能成功连接;导出CA证书后用--cacert指定该CA不跳过验证依然成功,证明是完整证书链验证;不给任何信任锚点直连收到self signed certificate错误退出码60,揭示HTTPS安全性取决于客户端信不信任签发证书的CA。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

Kibana 与 Elasticsearch 权限边界

查内置kibana_system角色的完整定义,62条权限规则几乎全对应Kibana内部系统索引,唯独一条对*通配符只给view_index_metadata和monitor;建业务索引后用绑定kibana_system的用户测试,查mapping和stats都成功但_search读取文档内容被拒绝,验证Kibana系统账号能看到索引结构却读不到业务数据内容的权限边界。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

安全配置导致的连接失败

真实测两种常见连接失败:用curl连transport端口TCP能连上但收到HTTP/0.9报错,因为transport走的是不同的二进制协议;搭两个cluster.name不同的节点互连,真实都卡死在启动阶段连HTTP服务都没起来,日志记录remote cluster name与local cluster name不匹配导致握手失败。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-02

匿名访问与最小权限原则

验证匿名访问配置指向尚未创建的角色时请求依然401;创建只给cluster:monitor的最小化anon_role后查health能用但查索引数据被拒绝;故意把anon_role改宽成对所有索引给read权限后,同一条不带凭证的查询直接读出了本应保密的文档内容,印证匿名访问机制本身不危险,危险的是配置给匿名角色的权限范围。

Elasticsearch 真实验证 动画演示
Elasticsearch 2026-10-01

Dynamic Mapping 如何自动推断字段类型

本机真实对混合字段文档验证ES如何自动推断类型,带引号的数字字符串默认不会被当成数字,开numeric_detection才会。

Elasticsearch 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号