使用 Dlog4j2.formatMsgNoLookups 在 elasticsearch helm 图表中临时修复 log4j
Posted
技术标签:
【中文标题】使用 Dlog4j2.formatMsgNoLookups 在 elasticsearch helm 图表中临时修复 log4j【英文标题】:log4j temporary fix in elasticsearch helm chart using Dlog4j2.formatMsgNoLookups 【发布时间】:2022-01-16 06:15:38 【问题描述】:我尝试使用 helm chart 在 AKS 中设置弹性搜索集群,但由于 log4j 漏洞,我想将其设置为选项 -Dlog4j2.formatMsgNoLookups
设置为 true
。当我在 helm 命令中传递参数时,出现未知标志错误。
参考:https://artifacthub.io/packages/helm/elastic/elasticsearch/6.8.16
helm upgrade elasticsearch elasticsearch --set imageTag=6.8.16 esJavaOpts "-Dlog4j2.formatMsgNoLookups=true"
Error: unknown shorthand flag: 'D' in -Dlog4j2.formatMsgNoLookups=true
我也尝试在values.yaml
文件中添加以下内容
esConfig:
# elasticsearch.yml: |
# key:
# nestedkey: value
log4j2.properties: |
-Dlog4j2.formatMsgNoLookups = true
但这些值并未添加到 /usr/share/elasticsearch/config/jvm.options
、/usr/share/elasticsearch/config/log4j2.properties
或环境变量中。
【问题讨论】:
【参考方案1】:首先,如果这是您到达这里的原因,这里有一个很好的关于缓解Log4j2 security issue 的知识来源。
以下是为 Elasticsearch 图表编写 values.yaml
的方法:
esConfig:
log4j2.properties: |
logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug
Helm 会生成一个 ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: elasticsearch-master-config
...
data:
log4j2.properties: |
logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug
Log4j 配置将安装到您的 Elasticsearch 中:
...
volumeMounts:
...
- name: esconfig
mountPath: /usr/share/elasticsearch/config/log4j2.properties
subPath: log4j2.properties
更新:如何设置和添加多个配置文件。
您可以在 values.yaml
中设置其他 ES 配置文件,您在此处指定的所有文件都将成为 ConfigMap 的一部分,每个文件都将挂载到 Elasticsearch 容器中的 /usr/share/elasticsearch/config/
。示例:
esConfig:
elasticsearch.yml: |
node.master: true
node.data: true
log4j2.properties: |
logger.discovery.name = org.elasticsearch.discovery
logger.discovery.level = debug
jvm.options: |
# You can also place a comment here.
-Xmx1g -Xms1g -Dlog4j2.formatMsgNoLookups=true
roles.yml: |
click_admins:
run_as: [ 'clicks_watcher_1' ]
cluster: [ 'monitor' ]
indices:
- names: [ 'events-*' ]
privileges: [ 'read' ]
field_security:
grant: ['category', '@timestamp', 'message' ]
query: '"match": "category": "click"'
以上所有配置仅用于说明如何在 values.yaml 中添加多个配置文件。请用您自己的设置替换这些配置。
【讨论】:
谢谢,我可以再问一个吗?目前的配置文件是:[elasticsearch@elasticsearch-master-0 ~]$ ls /usr/share/elasticsearch/config/ elasticsearch.keystore elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml users users_roles
虽然我在 log4j2.properties 文件中添加了配置参数,但我真的很想在 jvm.options 中添加配置但找不到如何做到这一点。你能帮我吗,因为我不确定配置的优先级?
当然,请查看有关如何添加其他可配置文件的更新答案。
这个答案在两个方面是不正确的。 log4j2 标志应该在 jvm 设置中设置,不建议像这样覆盖 jvm.options 文件。参考:elastic.co/guide/en/elasticsearch/reference/current/…【参考方案2】:
正如我在弹性存储库中看到的更新 values.yml:
esConfig: log4j2.properties:| 键=值
可能需要取消注释 log4j2.properties 部分。
【讨论】:
【参考方案3】:如果您更新并在 esConfig 下放置一个值,则需要删除大括号
esConfig:
log4j2.properties: |
key = value
【讨论】:
【参考方案4】:我宁愿建议更改 /config/jvm.options 文件并在最后添加
-Dlog4j2.formatMsgNoLookups=true
【讨论】:
不建议这样修改jvm.options文件。参考:elastic.co/guide/en/elasticsearch/reference/current/…【参考方案5】:舵图has an option设置java选项。
esJavaOpts: "" # example: "-Xmx1g -Xms1g"
在你的情况下,这样设置应该是解决方案:
esJavaOpts: "-Dlog4j2.formatMsgNoLookups=true"
【讨论】:
The ES_JAVA_OPTS variable overrides all other JVM options. We do not recommend using ES_JAVA_OPTS in production.
- Go to the last lines here以上是关于使用 Dlog4j2.formatMsgNoLookups 在 elasticsearch helm 图表中临时修复 log4j的主要内容,如果未能解决你的问题,请参考以下文章