以下是对您提供的博文内容进行深度润色与结构重构后的技术文章。整体风格更贴近一位资深可观测性平台架构师在内部技术分享会上的自然讲述——逻辑清晰、语言精炼、有洞见、有温度,同时彻底去除AI生成痕迹(如模板化句式、空泛总结、机械过渡),强化真实工程语境下的经验沉淀与决策权衡。
ES与Kibana的TLS双向认证:不是配个证书就完事了
前两天帮一个金融客户做等保复测,他们用的是ES 8.10 + Kibana 8.10,集群跑在K8s里,前端走Nginx反向代理。问题来了:所有日志都进了ES,但安全扫描报告赫然写着「HTTP明文通信风险」。运维同事第一反应是:“我们早就开了HTTPS啊?”
——可Kibana配置里写的还是http://es:9200,而ES的xpack.security.http.ssl.enabled是false。
这不是个例。很多团队把“启用了Kibana”和“启用了ES安全通信”混为一谈;或者以为只要浏览器能打开Kibana,链路就是安全的。但真相是:从Kibana进程到ES节点之间的那条HTTP连接,才是整个可观测性数据流中最脆弱、最常被忽略的一环。
今天我们就来拆解这件事:如何真正让ES与Kibana之间建立起一条可信、可控、可审计的加密通道。不讲概念,不堆参数,只聊你上线前必须踩过的坑、绕不开的设计取舍,以及那些藏在文档字缝里的关键线索。
为什么单向HTTPS不够?mTLS才是生产环境的底线
先说结论:如果你只给Kibana加了HTTPS(即用户→Kibana加密),而没做Kibana↔ES之间的mTLS,那么你的日志平台本质上仍处于「裸奔」状态。
为什么?因为:
- Kibana作为服务端,其自身不存储敏感凭证(比如ES账号密码),但它会以服务身份向ES发起大量高权限请求(读索引、写监控指标、调用API密钥接口)。一旦中间网络被劫持,攻击者可以直接冒充Kibana,拿到
superuser级别的操作能力; - 更现实的问题是:ES集群往往部署在内网,没有WAF或防火墙策略兜底。如果Kibana节点被横向渗透,攻击者可以直连ES的9200端口,绕过所有前端鉴权;
- 等保2.0三级明确要求:“应对通信过程中的重要数据进行加密”,这里的「通信过程」指的是组件间交互路径,而非仅用户访问入口。
所以,真正的安全闭环必须是:
浏览器 ←(HTTPS)→ Kibana ←(mTLS)→ Elasticsearch其中第二段连接,才是我们要死磕的部分。
💡 小知识:ES官方文档里把这叫 “Encrypt internode and client traffic”,注意这个“client”不是指浏览器,而是指Logstash、Filebeat、Kibana这些和ES直接打交道的组件。
ES的安全模块,远不止是个插件
很多人以为X-Pack Security是个可插拔的“附加功能”。其实从6.8开始,它已经像血管一样长进了ES的JVM底层。
当你设置xpack.security.enabled: true,ES会在启动时加载一个完整的安全上下文(SecurityContext),它会接管三件事:
- 认证层:处理Basic Auth、API Key、LDAP登录等;