缓解 CVE-2021-44228 的方法 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

缓解 CVE-2021-44228 的方法

在 EC2 上运行的 Amazon EMR

CVE-2021-44228 中讨论的问题在处理来自不可信来源的输入时,与 2.0 到 2.14.1 之间的 Apache log4j- 核心版本相关。随 EMR 5 版本到最高 5.34 版以及 EMR 6 版本到最高 EMR 6.5 版一起启动的 EMR 集群包括开源框架,例如 Apache Hive、Flink、HUDI、Presto 和 Trino,它们都使用这些版本的 Apache Log4J。但是,许多客户使用安装在其 EMR 集群上的开源框架来处理和记录来自不可信来源的输入。因此,Amazon 建议您应用后续部分中所述的“Log4j CVE-2021-44228 的 EMR 引导操作解决方案”。此解决方案还解决了 CVE-2021-45046 问题。

Amazon EMR on EKS

如果您在默认配置下使用 EKS 上的 Amazon EMR,您不会受到 CVE-2021-44228 中所述问题的影响,也不必应用下面的“Log4j CVE- 2021-44228 的 EMR 引导操作解决方案”下所述的解决方案。对于 EKS 上的 EMR,Spark 的 EMR 运行时使用 Apache Log4j 版本 1.2.17。使用 EKS 上的 Amazon EMR 时,您不应更改 log4j.appender.<component to log> 的 EMR 默认设置。

Log4j CVE-2021-44228 和 CVE-2021-45046 的 EMR 引导操作解决方案

此解决方案提供了必须在 EMR 集群上应用的 EMR 引导操作。对于每个 EMR 版本,您将在下面找到一个指向引导操作脚本的链接。要应用此引导操作,您应完成以下步骤:

  1. 将与 EMR 版本对应的脚本复制到您的 Amazon Web Services 账户 中的本地 S3 存储桶。请确保您使用的是 EMR 版本特定的引导脚本。

  2. 为 EMR 集群设置引导操作,以按照 EMR 文档中所述的说明运行复制到 S3 存储桶的脚本。如果您为 EMR 集群配置了其他引导操作,请确保将此脚本设置为要执行的第一个引导操作脚本。

  3. 终止现有的 EMR 集群,然后使用引导操作脚本启动新集群。Amazon 建议您在测试环境中测试引导脚本并验证应用程序,然后再将其应用程序应用于生产环境。如果您没有为 EMR 次要版本(例如 6.3.0)使用最新版本,则必须使用最新版本(例如 6.3.1),然后应用上面讨论的解决方案。

CVE-2021-44228 和 CVE-2021-45046 - EMR 版本的引导脚本
Amazon EMR 发行版 脚本位置 脚本发布日期
6.5.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.5.0-v1.sh
2021 年 12 月 12 日
6.4.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.4.0-v1.sh
2021 年 12 月 12 日
6.3.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.3.1-v1.sh
2021 年 12 月 13 日
6.2.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.2.1-v1.sh
2021 年 12 月 13 日
6.1.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.1.1-v1.sh
2021 年 12 月 14 日
6.0.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.0.1-v1.sh
2021 年 12 月 14 日
5.33.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.33.1-v1.sh
2021 年 12 月 12 日
5.32.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.32.1-v1.sh
2021 年 12 月 13 日
5.31.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.31.1-v1.sh
2021 年 12 月 13 日
5.30.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.30.2-v1.sh
2021 年 12 月 14 日
5.29.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.29.0-v1.sh
2021 年 12 月 14 日
5.28.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.28.1-v1.sh
2021 年 12 月 15 日
5.27.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.27.1-v1.sh
2021 年 12 月 15 日
5.26.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.26.0-v1.sh
2021 年 12 月 15 日
5.25.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.25.0-v1.sh
2021 年 12 月 15 日
5.24.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.24.1-v1.sh
2021 年 12 月 15 日
5.23.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.23.1-v1.sh
2021 年 12 月 15 日
5.22.0
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.22.0-v1.sh
2021 年 12 月 15 日
5.21.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.21.2-v1.sh
2021 年 12 月 15 日
5.20.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.20.1-v1.sh
2021 年 12 月 15 日
5.19.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.19.1-v1.sh
2021 年 12 月 15 日
5.18.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.18.1-v1.sh
2021 年 12 月 15 日
5.17.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.17.2-v1.sh
2021 年 12 月 15 日
5.16.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.16.1-v1.sh
2021 年 12 月 15 日
5.15.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.15.1-v1.sh
2021 年 12 月 15 日
5.14.2
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.14.2-v1.sh
2021 年 12 月 15 日
5.13.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.13.1-v1.sh
2021 年 12 月 15 日
5.12.3
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.12.3-v1.sh
2021 年 12 月 15 日
5.11.4
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.11.4-v1.sh
2021 年 12 月 15 日
5.10.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.10.1-v1.sh
2021 年 12 月 15 日
5.9.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.9.1-v1.sh
2021 年 12 月 15 日
5.8.3
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.8.3-v1.sh
2021 年 12 月 15 日
5.7.1
s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-5.7.1-v1.sh
2021 年 12 月 15 日
EMR 发布版本 截至 2021 年 12 月的最新修订
6.3.0 6.3.1
6.2.0 6.2.1
6.1.0 6.1.1
6.0.0 6.0.1
5.33.0 5.33.1
5.32.0 5.32.1
5.31.0 5.31.1
5.30.0 或 5.30.1 5.30.2
5.28.0 5.28.1
5.27.0 5.27.1
5.24.0 5.24.1
5.23.0 5.23.1
5.21.0 或 5.21.1 5.21.2
5.20.0 5.20.1
5.19.0 5.19.1
5.18.0 5.18.1
5.17.0 或 5.17.1 5.17.2
5.16.0 5.16.1
5.15.0 5.15.1
5.14.0 或 5.14.1 5.14.2
5.13.0 5.13.1
5.12.0、5.12.1、5.12.2 5.12.3
5.11.0、5.11.1、5.11.2、5.11.3 5.11.4
5.9.0 5.9.1
5.8.0、5.8.1、5.8.2 5.8.3
5.7.0 5.7.1

常见问题

  1. EMR 5 之前的 EMR 版本是否受到 CVE-2021-44228 的影响

    否。EMR 版本 5 之前的 EMR 版本使用 2.0 之前的 Log4j 版本。

  2. 此解决方案是否解决了 CVE-2021-45046 的问题?

    此解决方案还解决了 CVE-2021-45046 问题。

  3. 该解决方案是否处理了我在 EMR 集群上安装的自定义应用程序?

    引导脚本仅更新 EMR 安装的 JAR 文件。如果您通过使用自定义 Amazon Linux AMI 或通过任何其他机制,通过引导操作在您的 EMR 集群上安装自定义应用程序和 JAR 文件并将其作为提交至集群的步骤运行,请与您的应用程序提供商合作,以确定您的自定义应用程序是否受 CVE-2021- 44228 影响,并确定合适的解决方案。

  4. 我应该如何使用 EKS 上的 EMR 处理自定义 Docker 映像

    如果您使用自定义 Docker 映像将自定义应用程序添加到 EKS 上的 Amazon EMR 或者使用自定义应用程序文件将任务提交到 EKS 上的 Amazon EMR,请与应用程序供应商合作,以确定您的自定义应用程序是否受到 CVE-2021-44228 的影响,并确定合适的解决方案。

  5. 引导脚本如何缓解 CVE-2021-44228 和 CVE-2021-45046 中描述的问题?

    引导脚本通过添加一组新的指令来更新 EMR 启动指令。这些新指令删除了 EMR 安装的所有开源框架通过 Log4j 使用的 JndiLookup 类文件。这遵循了 Apache 发布的用于解决 Log4j 问题的建议。

  6. 使用 Log4j 版本 2.16 或更高版本的 EMR 是否有更新?

    EMR 5 版本至最高 5.34 版本以及 EMR 6 版本至最高 6.5 版本使用与 Log4j 2.16 不兼容的较旧版本的开源框架。如果您继续使用这些版本,我们建议您应用引导操作来缓解问题。5.34 版本和 6.5 版本之后的 EMR 版本将包括 Log4j 2.16 或更高版本,并且不需要使用引导操作来缓解问题。

  7. EMR 版本是否受到 CVE-2021-45105 的影响?

    由 Amazon EMR 安装的具有 EMR 默认配置的应用程序不受 CVE-2021-45105 的影响。在 Amazon EMR 安装的应用程序中,只有 Apache Hive 将 Apache Log4j 与上下文查找结合使用,而且它不会以允许处理不适当的输入数据的方式使用非默认模式布局。