JBoss EAP 6のセキュリティフィックスが行われなくなるのでEAP 7への移行を検討する

Red Hat のソリューションアーキテクトをしている瀬戸です。

JBoss EAP 6.xのELS-1 が2022年6月30日に終了します。
今後はELS-2となり、ELS-2は現在の製品リリースへの移行に関するアドバイスとガイダンス、問題の評価と回避策を含む限定的な継続的技術サポートのみが提供されるようになります。 バグフィックスやセキュリティフィックス、ハードウェアイネーブルメント、根本原因分析(可能な回避策を決定する以外)はこのフェーズでは提供されず、サポートは既存のインストールのみに限定されます。

昨年末にLog4Shellが発見されて猛威を振るいました。そのあともSpring4Shell等の大きなセキュリティ脆弱性が発見されて問題となっていました。 今後はこのような致命的な問題が発生しても修正版の提供はなくなります。 そのため、可能な限り早くEAP 7に移行することが推奨されます。

発見されてから移行を考えればいいでしょう、と考える人もたくさんいると思います。 YAGNI原則(You Ain't Gonna Need It)もあり、必要になった時に初めて行うというのは良い考えだとされています。 しかしながらバージョンアップには時間がかかります。 Log4Shellでは脆弱性が知れ渡ってから数日以内にPoC(脆弱性の検証用サンプルプログラム)がgithubで公開され、数日後には多くの攻撃が発生していました。

数日間での移行は可能でしょうか?

不可能であると断言はできませんが非常に難しい作業となります。 そのため可能な限り早くから計画を立てて対応する必要があります。

ただ、EAP 6からEAP 7へ移行をしようと思っても何から手を付けてよいのかわからないという人もたくさんいると思います。

この記事では移行内容の見積もりや実際に移行するときに使える「MTA(Migration Toolkit for Applications)」と「JBoss サーバー移行ツール(JBoss Server Migration Tool)」の二つを紹介します。

MTA(Migration Toolkit for Applications)はアプリケーションの移行に、サーバー移行ツール(JBoss Server Migration Tool)はEAP本体の設定の移行に使用します。

[NOTE]
このツールを使うことで移行が容易になりますが、このツールだけでは移行は完了しません。
OS周りの設定やアプリに含まれる個別の業務ロジック等の変更も必要になる可能性があります。
必要に応じてRed Hatのサポートへの質問や、Red Hatにコンサルティングのご依頼をください。

MTA(Migration Toolkit for Applications)

MTAはJavaアプリケーションの移行とモダナイゼーションを簡単に行えるようにする静的解析ツールです。 MTAには最初からEAP 6からEAP 7の非互換の機能一覧が搭載されており、Webアプリケーションを解析することができます。 warファイルやearファイルの場合は逆コンパイルをして、ソースコードの場合はそのまま静的解析を行うことができます。 バイナリでもソースコードでも解析できるのが大きな特徴になっています。

EAP6から移行したいウェブアプリケーションがある人は手元にそのwarファイル(もしくはearファイル)を準備してください。簡単に解析できます。

MTA(Migration Toolkit for Applications)の入手

MTAは以下のページからダウンロードすることができます。※要Red Hatアカウント

ttps://developers.redhat.com/products/mta/download

※ 2022年11月にWebConsole版はMTR(Migration Toolkit for Runtimes)という名前に変更され、ダウンロードできるページが変わりました。 こちらのの記事についてはMTR1.0についても有効です。実行ファイルがrun_windup.batもしくはrun_windup.shに変更されているのだけご注意ください。 MTRは次のページからダウンロードしてください。

developers.redhat.com

WebConsole版、CLI版、IDEプラグイン版がありますが、今回はオプションを知らなくてもなんとなくで使えるWebConsole版を使用します。 ページを下に移動して、All DownloadsからWeb Console版をダウンロードします。

ダウンロードしたら適切な場所に解凍します。

前提のJDKについて

本記事では、MTAのバージョン5.3で解析を行います。 前提のJDKは、以下となります。

  • OpenJDK 11
  • Oracle JDK 11

https://access.redhat.com/documentation/en-us/migration_toolkit_for_applications/5.3/html/introduction_to_the_migration_toolkit_for_applications/prerequisites

注意事項:Windows版のOracle JDK 11 "11.0.15"では、WindowsでのFileIOの修正でWebコンソールが起動しない不具合がありますので、 不具合の修正が入っている "11.0.15.1"以降をご利用ください。

MTA(Migration Toolkit for Applications)の実行

解凍先の

run_mta.bat (Windowsの場合)
run_mta.sh (Mac、Linuxの場合)

を起動します。※ダブルクリックで大丈夫です。

起動時にログにいくつかエラーが出ますが、気にせず待つと1分後ぐらいに起動します。

http://localhost:8080/ からアクセスできますので、アクセスしてください。

起動に成功している場合は以下のような画面が表示されるはずです。

[NOTE]
すでにポート8080で他のアプリが起動している場合は起動に失敗します。その場合は他のアプリを停止したうえでMTAを再起動してください。

起動したら解析するためのプロジェクトを作成します。Create Projectを押してください。

NameにEAP6to7と入れてNextを押します。(名前は自由につけてください。)

ローカルファイルを指定します。Servar pathを選択して、warファイル、earファイル、もしくはソースコードのあるディレクトリを入力してください。 ディレクトリを入力した場合は、「If the directory contains Java source code or an exploded application, select the check box below」にチェックを入れてください。 入れたらNextを押します。

Select transformation targetでApplication server migration to EAP 7を選択します。選択されている場合は上部に小さく青い線が出ます。※デフォルトで選択されています。 選択したらNextを押します。

Select packagesで解析するパッケージを指定します。※自分たちで作ってるパッケージを指定します。なにを除外してよいかわからない場合はすべてを指定します。 選択したらNextを押します。

Custom rules、Custom labelsは何も入れずにNextを押します。

OptionsではSourceにeap6を入力して、Nextを押します。

少し時間がかかりますが、今まで入力した内容が表示されます。 ざっと確認してSave and runを押してください。

すると、解析が開始されます。アプリケーションの大きさにもよりますが、数十秒から数十分程度かかるのでしばらくお待ちください。

MTA(Migration Toolkit for Applications)の解析結果を確認する

解析が終わると、Compleredと表示されます。Actionsにあるreportsボタンを押します。

どのアプリケーションが解析されたのかが表示されます。

解析されたアプリケーションをクリックしてDashboardを参照してください。 Dashboardには今回の解析結果のサマリーが表示されます。 ここで重要なのはIncidents(問題)の数とTotal Story Pointsです。Story Pointsは問題解決の難易度を示し、修正にどれくらいの工数がかかるのかを示します。 ただ、実際にどれくらい工数がかかるのかは作業する人の熟練度によりますので、目安であることには注意をしてください。

Issuesを参照してください。 Issuesには実際に見つかった問題が表示されます。Issue by Categoryをクリックすることで、問題の詳細が表示されます。黄色い欄には修正方法へのリンクが表示されています。実際に修正するときはリンク先を確認しながら修正を行ってください。

[NOTE]
修正方法へのリンクですが、私が試したところEAP 7.0の英語版のドキュメントにリンクされていました。
現在の最新版であるEAP 7.4の日本語版のドキュメント(Red Hat JBoss Enterprise Application Platform7.4 移行ガイド )もありますので、必要に応じてそちらを参照するようにしてください。
参考資料に日本語版へのリンクがあります。

MTAを使用することでアプリケーションの修正箇所を見つけることができます。今回のブログを書くにあたり、Red Hatがgithubで公開しているEAP6.4用のサンプルコードを解析にかけてみました。 ほとんどのコードがJava EE準拠であるため、ほとんど修正が必要なものは見つかりませんでした。 EAPの移行ガイドには多くの注意点が記載されていますが、ほとんどの注意点については遭遇するのはまれです。 見ればわかるものについてはMTAを使用することで要・不要を判断することができますので、ぜひ一度解析してみてください。

JBoss サーバー移行ツール(JBoss Server Migration Tool)

JBoss サーバー移行ツールはEAPの設定を移行するためのツールです。EAP6.4以上からEAP 7.4(=最新版)への移行をサポートしています。 EAP6.4未満の場合は一度6.4に手動でアップデートする必要がありますのでご注意ください。

JBoss サーバー移行ツール(JBoss Server Migration Tool)の入手

EAP 7に入っています。使用するためにはEAP 6とEAP 7を同時にインストールする必要があります。※同時に起動させる必要はありません。 rpmによるインストール、zipファイルの解凍、インストーラーの起動等でEAP 7をインストールしてください。 standalone.xml等のEAP本体で使用する設定ファイルを移行することができます。

JBoss サーバー移行ツール(JBoss Server Migration Tool)の実行

EAP 7のインストール先のbin/に入っている

jboss-server-migration.bat (Windowsの場合)
jboss-server-migration.sh (Mac、Linuxの場合)

をEAP 6のディレクトリを引数として起動します。

ex.

jboss-server-migration.sh --source $EAP_6_HOME
jboss-server-migration.bat--source C:\Apps\jboss-eap-6.4

起動するとどの設定ファイルを移行するかを聞かれますので、今回はstandalone.xmlのみを移行します。yes/noの選択肢がいくつか表示されますので、実際に使用されている設定ファイルを移行するようにしてください。

C:\Apps\EAP-7.4.0\bin>jboss-server-migration.bat --source C:\Apps\jboss-eap-6.4

----------------------------------------------------------
----  JBoss Server Migration Tool  -----------------------
----------------------------------------------------------

Retrieving servers...
18:18:19,795 INFO  [logger] SOURCE server name: EAP, version: 6.4.0.GA.
18:18:19,820 INFO  [logger] TARGET server name: JBoss EAP, version: 7.4.0.GA.

----------------------------------------------------------
----------------------------------------------------------

Server migration starting...

18:18:19,906 INFO  [ServerMigrationTask#1:1] --- Migrating modules requested by environment...

18:18:19,908 INFO  [ServerMigrationTask#1:1] No modules to migrate.

Migrate the source's standalone server?
yes/no? yes

18:18:22,388 INFO  [ServerMigrationTask#1:2] --- Migrating standalone server...


18:18:22,403 INFO  [ServerMigrationTask#1:2:3] Source's standalone configurations found: [standalone-full-ha.xml, standalone-full.xml, standalone-ha.xml, standalone-osgi.xml, standalone.xml]

Migrate all configurations?
yes/no? no

Migrate configuration standalone-full-ha.xml ?
yes/no? no

Migrate configuration standalone-full.xml ?
yes/no? no

Migrate configuration standalone-ha.xml ?
yes/no? no

Migrate configuration standalone-osgi.xml ?
yes/no? no

Migrate configuration standalone.xml ?
yes/no? yes

18:18:35,993 INFO  [ServerMigrationTask#1:2:3:1] Migrating standalone configuration standalone.xml...
18:18:36,040 INFO  [ServerMigrationTask#1:2:3:1:1] Unsupported extensions removed: [org.jboss.as.threads]
18:18:36,060 INFO  [ServerMigrationTask#1:2:3:1:2] Unsupported subsystems removed: [urn:jboss:domain:threads:1.1]
18:18:38,163 INFO  [security] ELY00001: WildFly Elytron version 1.15.3.Final-redhat-00001
18:18:38,367 INFO  [ServerMigrationTask#1:2:3:1:7] Subsystem elytron added.
18:18:38,555 INFO  [ServerMigrationTask#1:2:3:1:8] Subsystem web migrated.
18:18:38,746 INFO  [ServerMigrationTask#1:2:3:1:9] Subsystem undertow updated.
18:18:38,907 INFO  [ServerMigrationTask#1:2:3:1:12] Subsystem infinispan updated.
18:18:39,014 INFO  [ServerMigrationTask#1:2:3:1:13] Subsystem ee updated.
18:18:39,046 INFO  [ServerMigrationTask#1:2:3:1:14] Subsystem remoting updated.
18:18:39,166 INFO  [ServerMigrationTask#1:2:3:1:15] Subsystem ejb3 updated.
18:18:39,241 INFO  [ServerMigrationTask#1:2:3:1:17] Subsystem batch-jberet added.
18:18:39,288 INFO  [ServerMigrationTask#1:2:3:1:18] Subsystem core-management added.
18:18:39,328 INFO  [ServerMigrationTask#1:2:3:1:19] Subsystem request-controller added.
18:18:39,384 INFO  [ServerMigrationTask#1:2:3:1:20] Subsystem security-manager added.
18:18:39,436 INFO  [ServerMigrationTask#1:2:3:1:21] Subsystem singleton added.
18:18:39,482 INFO  [ServerMigrationTask#1:2:3:1:22] Subsystem discovery added.
18:18:39,522 INFO  [ServerMigrationTask#1:2:3:1:23] Subsystem ee-security added.
18:18:39,565 INFO  [ServerMigrationTask#1:2:3:1:24] Subsystem health added.
18:18:39,608 INFO  [ServerMigrationTask#1:2:3:1:25] Subsystem metrics added.
18:18:39,651 INFO  [ServerMigrationTask#1:2:3:1:26] HTTP Upgrade Management configured.
18:18:39,712 INFO  [ServerMigrationTask#1:2:3:1:28] Socket binding's port expressions added.
18:18:39,734 INFO  [ServerMigrationTask#1:2:3:1:30] Security realms migrated.
18:18:39,759 INFO  [ServerMigrationTask#1:2:3:1:31] Security realm ApplicationRealm SSL server identity configured.

Migrate the source's managed domain?
yes/no? no

Server migration done.

18:18:42,217 INFO  [logger]
--------------------------------------------------------------
 Task Summary
--------------------------------------------------------------

 server .............................................. SUCCESS
  standalone ......................................... SUCCESS
   standalone-configurations ......................... SUCCESS
    standalone-configuration(source=standalone.xml) .. SUCCESS

--------------------------------------------------------------
 Migration Result: SUCCESS
--------------------------------------------------------------
[NOTE]
今回は単独で動いているEAPを前提としてstandalone.xmlを対応しました。
ドメインモードで動いているEAPのクラスタに対しても実行できますが、ゼロダウンタイムで移行するためには移行の順番に気を付ける必要があります。
詳細については参考資料の JBoss Server Migration Tool の実行 の 6.2. JBoss EAP 6.4 管理対象ドメインの JBoss EAP 7.4 への移行 を参照してください。

JBoss サーバー移行ツールを使用することでサーバーの設定を自動的に移行することができます。すべての場合に設定をそのまま移行できるわけではありませんが、多数の設定については移行することができます。移行できなかったものについては個別で確認をする必要がありますが少量ですので解消がしやすいと思います。

まとめ

EAP 6.XのELS-1 が2022年6月30日に終了します。 今までは重要なバグが発生していた時はパッチが提供されていましたが今後はパッチが提供されなくなります。 日々セキュリティインシデントは発生しており、修正されなくなったEAP6.Xが狙われる可能性もあります。 移行は難しい作業ですがMTA(Migration Toolkit for Applications)とJBoss サーバー移行ツール(JBoss Server Migration Tool)を利用することで思ってたよりは簡単にできるかもしれないのでぜひお試しください。 ただし、これだけで必ず移行ができるというものではありません。 どうしても難しい場合はRed Hatのサポートやコンサルティングサービスを利用することもできます。そちらもご検討ください。

参考資料

Red Hat Application Services Product Update and Support Policy
https://access.redhat.com/support/policy/updates/jboss_notes

MTA ダウンロード(要Red Hatアカウント)
https://developers.redhat.com/products/mta/download

Download Red Hat JBoss Enterprise Application Platform
https://developers.redhat.com/products/eap/download

Migration Toolkit for Applications の概要
https://access.redhat.com/documentation/ja-jp/migration_toolkit_for_applications/5.3/html/introduction_to_the_migration_toolkit_for_applications/index

MTA Visual Studio Code 拡張機能ガイド(MTAをVisual Studio Codeで使用したい場合)
https://access.redhat.com/documentation/ja-jp/migration_toolkit_for_applications/5.2/html-single/visual_studio_code_extension_guide/index

Red Hat JBoss Enterprise Application Platform7.4 移行ガイド
https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/7.4/html-single/migration_guide/index

Red Hat JBoss Enterprise Application Platform7.4 インストールガイド
https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/7.4/html-single/installation_guide/index

JBoss サーバー移行ツールの使用
https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/7.4/html-single/using_the_jboss_server_migration_tool/index

EAP 6.4のサンプルソースコード
https://github.com/jboss-developer/jboss-eap-quickstarts/tree/6.4.x

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。