使用 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的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch

log4j 的调试与配置

2.16.0 版本中的 Log4j2 漏洞

spark 修改默认log4j.properties 配置

Spring-Boot-strater-log4j2怎么修复漏洞

idea添加log4j2有颜色的日志输出