Alibaba Cloud は最近、Apache Log4j2 コンポーネントにリモートコード実行 (RCE) の脆弱性を発見し、Apache Software Foundation に報告しました。このトピックでは、この脆弱性の影響と対応する修正プランについて説明します。
影響
E-MapReduce (EMR) において、影響を受けるコンポーネントには、Hive、HDFS、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark、および Zeppelin が含まれます。Spark と Zeppelin は Hive コンポーネントに依存しているため、影響を受けます。
修正プラン
お客様の EMR クラスター内にある脆弱な Log4j2 JAR ファイルをバージョン 2.17.1 に置き換え、Hive および Spark の Log4j 設定を変更して、log4j2.formatMsgNoLookups=true を設定することで JNDI Lookup 機能を無効化する必要があります。詳細な手順については、「修正手順」をご参照ください。
この修正プランには次の特徴があります。
-
EMR-3.38.2 以前、EMR-5.4.2 以前、および EMR 4.x バージョンに適用されます。この脆弱性は EMR-3.38.3 以降および EMR-5.4.3 以降では修正されています。これらのバージョンでは対応は不要です。
-
このプランを適用した後、対応するコンポーネントを再起動する必要があります。
-
修正スクリプトは稼働中のサービスに影響を与えません。ただし、修正はコンポーネントの再起動後にのみ有効になるため、オフピーク時間にこの手順を実行することを推奨します。
修正手順
EMR クラスター
-
patches-log4j.tar.gz をクリックして、パッチパッケージをダウンロードします。
-
EMR クラスターのマスターノードにログインし、ステップ 1 でダウンロードしたパッチパッケージを
emr-userまたはhadoopユーザーの HOME ディレクトリに配置します。 -
パッチパッケージを解凍し、
emr-userまたはhadoopユーザーとして次のコマンドを実行します:-
DataLake、Dataflow、OLAP、DataServing、およびカスタムシナリオクラスターの場合:
su emr-user tar zxf patches-log4j.tar.gz -
その他のクラスターの場合:
su hadoop tar zxf patches-log4j.tar.gz
-
-
パッチパッケージ内の hosts ファイルを編集し、クラスター内のすべてのノードのホスト名 (emr-header-1 や emr-worker-1 など) を追加します。1 行につき 1 つのホスト名を追加してください。
cd patches vim hosts以下は hosts ファイルの内容の例です。
emr-header-1 emr-worker-1 emr-worker-2重要EMR 3.x シリーズの EMR 3.41 以降、または EMR 5.x シリーズの EMR 5.7.0 以降のクラスターでは、ホスト名の形式が変更されています。以下は hosts ファイルの内容の例です。
core-1-1 core-1-2 task-1-1 task-1-2 -
fix.shスクリプトを実行して、修正を適用します。./fix.shスクリプト実行後、次のメッセージが返されます:
### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE $> sh ./restore.sh 20211213001755 ### DONE修正をロールバックするには、次のコマンドを実行します:
./restore.sh 20211213001755説明実行中の YARN ジョブ (アプリケーション)、例えば、Spark Streaming や Flink ジョブなどについては、YARN NodeManager をローリングリスタートする前にジョブを停止する必要があります。
-
サービスを再起動します。
脆弱性を完全に修正するには、Hive、HDFS、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark、および Zeppelin を含む影響を受けるコンポーネントを再起動する必要があります。
Hive コンポーネントを再起動するには、EMR コンソールの Hive サービスページに移動し、右上隅の を選択します。
ゲートウェイクラスター
この修正手順は、パスワードレス SSH アクセスに依存しています。ゲートウェイクラスターの場合、パッチパッケージをクラスター内の各ノードに手動でアップロードし、各ノードで EMR クラスターの手順に従って修正を適用する必要があります。
-
パッチパッケージの hosts ファイルには、現在のノードの
hostnameのみを入力する必要があります。 -
ゲートウェイクラスターではコンポーネントプロセスが実行されていないため、パッチパッケージのアップロード後にサービスを再起動する必要はありません。
新規クラスターとスケールアウト
EMR コンソールでブートストラップアクションを追加することで、EMR クラスターの作成時または既存クラスターのスケールアウト時に、脆弱性を自動的に修正できます。次の手順に従ってください:
-
patches-log4j.tar.gz と bootstrap_log4j.sh をクリックして、パッチパッケージとブートストラップスクリプトをダウンロードし、Object Storage Service (OSS) にアップロードします。
例えば、ファイルの OSS パスは oss://<bucket-name>/path/to/patches-log4j.tar.gz、oss://<bucket-name>/path/to/bootstrap_log4j.sh です。
-
EMR コンソールでブートストラップアクションを追加します。詳細については、「ブートストラップアクションの管理」をご参照ください。
Add Bootstrap Action ダイアログボックスで、パラメータを設定します。
パラメータ
説明
Name
ブートストラップアクションの名前。例:
fix-log4j-vulnerabilityScript Address
スクリプトの OSS ロケーション。
スクリプトパスは oss://**/*.sh 形式で指定します。この例では、oss://<bucket-name>/path/to/bootstrap_log4j.sh を使用します。
Parameter
ブートストラップアクションスクリプトのパラメータ。スクリプト内で参照される変数の値を指定します。
この例では、oss://<bucket-name>/path/to/patches-log4j.tar.gz を使用します。
Execution Scope
Cluster を選択します。
[実行時間]
After Component Startup を選択します。
[Execution Failure Policy]
Proceed を選択します。
-
既存のクラスターをスケールアウトする場合、新しいノード上のコンポーネントのみを再起動する必要があります。新しいクラスターを作成する場合は、HDFS、Hive、Presto、Impala、Druid、Flink、Solr、Ranger、Storm、Oozie、Spark、および Zeppelin などのコンポーネントを再起動する必要があります。