推出 Splunk Native Embedder:安全仪表板嵌入,正确实现
Source: Dev.to
Splunk Native Embedder 已获批准,现已在 Splunkbase 上提供。
Splunk Native Embedder 是一个基于 Splunk 原生功能构建的轻量级配置管理器。本文将详细介绍该应用如何实现安全的跨域仪表板嵌入,使开发者能够在外部门户中以细粒度控制方式集成 Splunk 可视化。
Splunk Native Embedder on Splunkbase
技术挑战:X-Frame-Options 与 Cookie 安全
Clickjacking 防护
Splunk 默认设置 X-Frame-Options: SAMEORIGIN HTTP 头。浏览器在父页面位于不同域时会阻止渲染,从而防止 clickjacking,但也会阻止合法的跨域嵌入。
Cookie 策略
现代浏览器(Chrome、Safari、Edge)默认强制 SameSite=Lax。这会阻止会话 Cookie 在跨站上下文(如 iframe)中发送,导致认证循环:用户能够成功登录,但会话因浏览器拒绝发送 Cookie 而失效。
解决方案:原生配置管理
管理框架安全
当在应用仪表板中启用嵌入时,JavaScript 控制器 (embedder_config.js) 会向 configs/conf-web 端点发起 REST 调用。此操作会更新 local/web.conf 并切换所需的安全标志:
[settings]
# 禁用阻止跨域框架的头部
x_frame_options_sameorigin = false
# 明确允许 HTML 仪表板在框架中运行
dashboard_html_allow_iframes = true
dashboard_html_allow_embeddable_content = true
通过在平台层面直接管理这些值,应用在保持原生行为的同时确保最佳性能。
解决 SameSite Cookie 问题
要在 iframe 中保持认证会话,必须将会话 Cookie 标记为 SameSite=None; Secure。应用提供了一个简单的全局切换:
[settings]
# 对于通过 HTTPS 的跨站嵌入是必需的
cookieSameSite = none
重要提示: 设置 cookieSameSite = none 需要使用 HTTPS。如果 Splunk 通过 HTTP 访问,现代浏览器会因当前安全标准而完全拒绝该 Cookie。
处理反向代理与 TLS 终止
在许多部署中,SSL/TLS 在负载均衡器(NGINX、F5)处终止,而 Splunk 在内部使用 HTTP。Splunk 可能检测不到流量是安全的,从而不会将 Cookie 标记为 Secure。应用提供了额外的设置以强制安全 Cookie:
[settings]
# 即使 Splunk 看到的是 HTTP 流量,也强制将 Cookie 标记为 'Secure'
tools.sessions.secure = true
这可确保即使在反向代理场景下,浏览器也会接受 Cookie。
该应用已开放使用并接受反馈。通过完全依赖原生配置,目标是提供最稳定、最符合 Splunk 规范的外部仪表板共享方式。
— Sanjeev