如何解决如何使用docker env vars为kibana设置csp.rules?
我正在尝试设置启用安全性但没有TLS的kibana,而是在入口端终止TLS(确实是GCP负载均衡器)的入口上有一个反向代理。
大多数情况下,一切正常,除了某些资源拒绝加载,在chrome控制台中,我看到:
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword,a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='),or a nonce ('nonce-...') is required to enable inline execution.
作为蛤find,我发现csp.rules设置非常高兴,以为我可以自定义似乎不旨在支持带有反向代理的kibana的策略。但是我无法正常工作! Kibana在启动时崩溃,并显示错误:
Configuring logger failed: TypeError: rules.map is not a function
at cspRulesDeprecation (/usr/share/kibana/src/core/server/config/deprecation/core_deprecations.js:70:34)
来自docker-compose.yml:
"CSP_RULES=[\"frame-src 'self' https://naturalcycles.com/\"]"
解决方法
TLDR:如果需要/需要CSP中的空格,则不能通过环境变量进行设置。最好的选择可能是挂载您自己的kibana.yml文件。请参见下面的kibana.yml语法示例。
几个小时后发现的长版本: 如果语法正确,则可以将CSP设置为空或任何不带空格的字符串,例如在docker-compose中:
- 'CSP_RULES=["frame-src"]'
但是,如果您实际上想要调整的实际政策,则很可能会包含该错误报告中提出的kibana不支持的空格(并且自2020-09-22起不固定):https://github.com/elastic/kibana/issues/39594
这时,最好覆盖kibana.yml文件。例如。在docker-compose中:
volumes:
- ${PWD}/kibana.yml:/usr/share/kibana/config/kibana.yml
在kubernetes中,您可以使用configmap或密钥执行类似的操作。
此外,我在网上找不到的示例在kibana.yml中没有显示csp.rules的有效条目,尤其是该带有操作提示(https://discuss.elastic.co/t/how-to-configure-csp-rules-for-kibana-on-docker/243025的答案的线程)没有提到需要将规则定义为数组。因此,要使其在kibana.yml中起作用,请定义如下:
csp.rules: ["frame-src 'self' https://naturalcycles.com/"]
最后的注释: 这种使用启用安全性且没有群集TLS的ELK设置的设置可能不是一个好主意,因为它似乎不受支持。即使禁用了CSP,监视UI仍无法加载以下消息:
You must enable Transport Layer Security between Kibana and Elasticsearch and configure an encryption key in your kibana.yml file to use the Alerting feature.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。