Elasticsearch安全实战权限管理与身份认证完整配置方案含RBAC、用户角色、加密前言一、Elasticsearch 安全核心能力二、ES 权限认证整体流程图三、第一步开启 Elasticsearch 安全认证3.1 修改 elasticsearch.yml 配置3.2 重启 Elasticsearch3.3 自动生成内置用户密码超级管理员四、第二步RBAC 权限模型核心五、第三步权限粒度说明生产常用5.1 索引级别权限5.2 集群级别权限5.3 常用权限组合六、第四步实战创建角色 用户 分配权限6.1 创建角色指定索引权限6.2 创建用户并绑定角色6.3 测试认证七、第五步生产常用权限场景实战场景1只允许查询禁止修改/删除场景2允许读写但禁止删除索引场景3超级管理员仅限内部使用场景4禁止查看集群信息八、第六步Spring Boot 集成带密码的 ES8.1 application.yml 配置8.2 无需修改代码直接连接九、第七步高级安全加固生产必配9.1 IP 白名单9.2 禁用自动创建索引9.3 开启 TLS/SSL 传输加密9.4 密码策略十、ES 认证权限执行流程图十一、常见问题十二、总结The Begin点点关注收藏不迷路前言Elasticsearch 作为企业级搜索引擎存储着日志、订单、用户、业务等核心敏感数据安全认证、权限控制是生产环境必不可少的环节。从 ES 6.3 开始官方内置了Elastic Stack Security安全模块支持账号密码登录、角色权限、IP 白名单、TLS 加密、RBAC 权限模型等企业级安全能力。本文从开启安全、身份认证、RBAC 权限模型、用户/角色/权限配置、索引级/操作级权限、实战案例全流程讲解搭配流程图可直接复制的命令带你快速实现 ES 安全加固。一、Elasticsearch 安全核心能力身份认证用户名/密码登录RBAC 权限模型基于角色的权限控制索引权限允许/禁止读写某个索引操作权限禁止删除索引、禁止查看集群信息IP 白名单仅允许指定IP访问TLS/SSL 加密传输加密防止数据窃听审计日志记录登录、操作行为二、ES 权限认证整体流程图开启ES Security安全模块设置内置超级用户密码创建自定义角色配置索引操作权限创建用户绑定角色客户端使用用户名密码连接ES认证用户→校验角色→校验权限允许/拒绝访问三、第一步开启 Elasticsearch 安全认证3.1 修改 elasticsearch.yml 配置所有节点添加以下配置# 开启安全认证xpack.security.enabled:true# 开启单个节点也能启用安全单节点测试discovery.type:single-node# 开启HTTP加密访问可选生产建议开启xpack.security.transport.ssl.enabled:truexpack.security.transport.ssl.verification_mode:certificatexpack.security.transport.ssl.client_authentication:required3.2 重启 Elasticsearch3.3 自动生成内置用户密码超级管理员ES 内置 5 个管理用户elastic、kibana、logstash_system等。执行命令自动生成密码./bin/elasticsearch-setup-passwords auto或手动设置密码./bin/elasticsearch-setup-passwords interactiveelastic是超级管理员账号拥有最高权限。四、第二步RBAC 权限模型核心ES 使用RBAC基于角色的访问控制用户User登录账号角色Role权限集合权限Privilege索引权限 操作权限关系用户 → 绑定 → 角色 → 拥有 → 权限五、第三步权限粒度说明生产常用ES 支持极细粒度权限控制5.1 索引级别权限read只读write只写delete删除create创建文档index_all所有权限view_index_metadata查看索引元数据5.2 集群级别权限cluster_all所有集群权限monitor查看集群状态manage管理集群cluster:admin超级操作5.3 常用权限组合只读用户read读写用户read、write管理员all日志查看员仅读指定日志索引六、第四步实战创建角色 用户 分配权限6.1 创建角色指定索引权限需求创建一个只能访问product_*索引、只读权限的角色product_read_role请求方式POST地址/_security/role/product_read_role{indices:[{names:[product_*],privileges:[read]}]}6.2 创建用户并绑定角色需求创建用户user1密码123456绑定角色product_read_role地址/_security/user/user1{password:123456,roles:[product_read_role],full_name:普通查询用户}6.3 测试认证未认证访问会直接报错{error:Unauthorized,status:401}带账号密码访问http://user1:123456localhost:9200/product_index/_search七、第五步生产常用权限场景实战场景1只允许查询禁止修改/删除{indices:[{names:[log_*],privileges:[read]}]}场景2允许读写但禁止删除索引{indices:[{names:[order_*],privileges:[read,write]}]}场景3超级管理员仅限内部使用{cluster:[all],indices:[{names:[*],privileges:[all]}]}场景4禁止查看集群信息{cluster:[monitor]}八、第六步Spring Boot 集成带密码的 ES8.1 application.yml 配置spring:elasticsearch:uris:http://localhost:9200username:user1password:1234568.2 无需修改代码直接连接Spring Data Elasticsearch 自动携带认证信息。九、第七步高级安全加固生产必配9.1 IP 白名单仅允许指定 IP 访问xpack.security.transport.filter.allow:[192.168.1.0/24]9.2 禁用自动创建索引action.auto_create_index:false9.3 开启 TLS/SSL 传输加密xpack.security.transport.ssl.enabled:true9.4 密码策略定期修改长度 ≥ 12区分超级账号/普通账号十、ES 认证权限执行流程图否是否是客户端请求携带用户名密码ES验证身份合法性认证成功?返回401获取用户绑定角色校验角色权限有权限?返回403无权限执行操作并返回结果十一、常见问题启动报错security enabled但未配置密码执行setup-passwords生成密码连接 401 未授权检查账号密码是否正确403 无权限角色权限未配置正确索引Kibana 无法连接kibana.yml 配置elasticsearch.username和password十二、总结Elasticsearch 权限管理与认证核心流程非常清晰开启 xpack.security设置超级管理员密码基于 RBAC 模型创建角色 → 分配权限 → 创建用户 → 绑定角色客户端使用账号密码连接生产环境配合 IP 白名单、TLS 加密一套完整的 ES 安全体系可以保证未认证用户无法访问普通用户无法越权操作敏感索引禁止删除/修改企业数据安全合规是生产环境必须开启的核心功能The End点点关注收藏不迷路