第7章 既知の問題
以下の項ではバージョン 7.4 の既知の問題について説明します。
7.1. CVE セキュリティー脆弱性
Fuse はミドルウェア統合プラットフォームであるため、多くのサードパーティーコンポーネントと統合される可能性があります。そのため、サードパーティーの依存関係の一部にセキュリティーの脆弱性がある可能性を常に排除することは困難です。ここでは、Fuse 7.4 のサードパーティーの依存関係に影響する既知のセキュリティー脆弱性について説明します。
- ENTESB-12489 CVE-2019-9827 - Fuse Console standalone on Amazon Web Services
-
セキュリティーの懸念があるため、スタンドアロンの Fuse アプリケーションを Amazon Web Services (AWS) にデプロイしないでください。この制限は、サポートされるすべてのスタンドアロン環境 (Spring Boot 1.x および 2.x、Karaf、および Red Hat JBoss Enterprise Application Platform) に適用されます。AWS に Fuse Console スタンドアロンをデプロイする場合は、Fuse 7.7 以降にアップグレードし、
hawtio.disableProxy
システムプロパティーをtrue
に設定して Fuse Console のプロキシーサーブレットを無効にすることが強く推奨されます。 - CVE-2017-12629 Solr/Lucene -security bypass to access sensitive data - CVE-2017-12629
Apache Solr は、Apache Lucene 検索エンジンを使用する一般的なオープンソースの検索プラットフォームです。アプリケーションが Apache Solar と Apache Lucene の組み合わせ (Camel Solr コンポーネントを使用している場合など) を使用する場合、このセキュリティー脆弱性の影響を受ける可能性があります。この脆弱性の詳細と軽減策について、リンク先のセキュリティーアドバイザリーを確認してください。
注記Fuse ランタイムは Apache Solr や Apache Lucene を直接使用 しません。統合アプリケーションで Apache Solr と Apache Lucene を一緒に使用する場合のみセキュリティー上のリスクが発生します (Camel Solr コンポーネントを使用する場合など)。
- 複数の CVE jackson-databind セキュリティー脆弱性に関連する複数の CVE
FasterXML
jackson-databind
ライブラリーを使用し、JSON コンテンツをデシリアライズして Java オブジェクトをインスタンス化するアプリケーションは、潜在的に リモートコード実行 攻撃に脆弱です。しかし、脆弱性は自動的に発生せず、適切な軽減策を講じれば回避することができます。最低でも以下の前提条件をすべて満たさなければ攻撃を実行することはできません。
jackson-databind
の JSON コンテンツのデシリアライズに対し、ポリモーフィックな型の処理を有効にする必要があります。Jackson JSON でポリモーフィックな型の処理を有効にする方法は 2 つあります。-
@JsonTypeInfo
および@JsonSubTypes
アノテーションの組み合わせを使用します。 -
ObjectMapper.enableDefaultTyping()
メソッドを呼び出します。この方法はポリモーフィックな型をグローバルで有効にするため、危険です。
-
現在のバージョンの
jackson-databind
によってブラックリストに指定されていない ガジェットクラス が 1 つ以上 Java クラスパスにあります。ガジェットクラスは、機密性の高い (潜在的に悪用可能な) 操作を、constructor または setter メソッド (デシリアライズ中に呼び出しできるメソッド) の実行による副次的な影響として定義します。Jackson JSON ライブラリーによって維持されるガジェットブラックリストは、リモートコード実行の脆弱性から守るための最後の手段になります。jackson-databind
の脆弱性に関して多くの CVE が存在するのは、多数のガジェットクラスが存在するためです。ガジェットクラスの種類別に異なる CVE が存在します。重要Fuse は、できるだけ早期に
jackson-databind
の最新バージョンを使用するようアップグレードされます。しかし、現在 Fuse 7.4.0 は最新バージョンのjackson-databind
と連携していません。
アプリケーションで
jackson-databind
ライブラリーを使用する必要がある場合、Jackson JSON でポリモーフィックな型の処理を行わないようにし、ObjectMapper.enableDefaultTyping()
メソッドを絶対に呼び出さないことが、リスクを軽減する最も重要な対策になります。
7.2. Fuse Online
Fuse Online ディストリビューションの既知の問題は次のとおりです。
- 6052 [1.7.8] No activities after small load (~80000 messages in 20hours)
パフォーマンステストの結果、アクティビティー追跡ロジックによって、アクティビティーを追跡するために Fuse Online によって使用されるデータベースで非常に多くの無効なタプルが発生する可能性があることが判明しました。この問題により、特に UI からインテグレーションリストにアクセスする場合や、インテグレーションのアクティビティーを更新する場合など、データベースからの読み取りが必要な操作が一般的に遅くなります。この問題を回避するには、SQL ステートメント
VACUUM FULL ANALYSE jsondb
を実行して、データベースのメンテナンスを定期的に行います。以下にしたがって、定期的にメンテナンスを行います。
# check to see if there are dead tuples (not vacuumed) $ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum FROM pg_stat_all_tables WHERE relname = \'jsondb\'|psql -U syndesis" schemaname | relname | n_live_tup | n_dead_tup | last_autovacuum ------------+---------+------------+------------+------------------------------- public | jsondb | 26893 | 491210 | 2019-07-17 09:26:51.264029+00 (1 row) # since there are 491210 dead tuples, perform the following # scale down the server $ oc scale --replicas=0 dc syndesis-server # terminate all running connections $ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo SELECT pg_terminate_backend\(a.pid\) FROM pg_locks l join pg_stat_activity a ON a.pid = l.pid WHERE l.mode = \'ExclusiveLock\' AND a.usename = \'syndesis\'|psql -U syndesis" FATAL: terminating connection due to administrator command server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. connection to server was lost command terminated with exit code 2 # the preceding FATAL error is expected, because the statement also closes the connection psql is using # execute `VACUUM FULL ANALYSE` $ oc exec -c postgresql $(oc get pod -l 'syndesis.io/component=syndesis-db' --no-headers=true -o=custom-columns=x:.metadata.name) -- bash -c "echo VACUUM FULL ANALYSE jsondb|psql -U syndesis" VACUUM # scale up server $ oc scale --replicas=1 dc syndesis-server
- 5458 Operator tries to update outdated Syndesis resource
Operator を使用して Fuse Online をインストールすると、以下のエラーが複数回発生しますが、インストール自体に大きな影響はないため、無視しても問題はありません。
{"level":"error","ts":1558617960.2453232,"logger":"controller","msg":"Error reconciling","action":"*action.startupAction","phase":"Starting","error":"Operation cannot be fulfilled on syndesises.syndesis.io \"app\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"github.com/syndesisio/syndesis/install/operator/vendor/github.com/go-logr/zapr.(*zapLogger).Error\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/github.com/go-logr/zapr/zapr.go:128\ngithub.com/syndesisio/syndesis/install/operator/pkg/controller/syndesis.(*ReconcileSyndesis).Reconcile\n\t/go/src/github.com/syndesisio/syndesis/install/operator/pkg/controller/syndesis/syndesis_controller.go:120\ngithub.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:215\ngithub.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func1\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:158\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:134\ngithub.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait.Until\n\t/go/src/github.com/syndesisio/syndesis/install/operator/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88"}
- ENTESB-10577 Apicurito does not support YAML Open API spec files
- Fuse 7.4 on OpenShift では、Apicurito はデフォルトで OpenAPI 仕様ファイルを YAML 形式で生成しますが、生成された YAML ファイルを再インポートできません。現在、JSON 形式のみを Apicurito にインポートできます。
- 667 'null' when using "ItemAt" transformation from List<> → Number
-
ItemAt
変換を使用してList
からDouble
へマップすると、データマッパーによって例外がスローされます。 - 1558 "Save as draft" and "Publish" buttons
- Save as draft ボタンと Publish ボタンのいずれかをクリックし、手順が開始されても、両方のボタンがアクティブなままになります。
- 698 DB Connector: SQL parser doesn’t recognize parameters for LIKE
-
LIKE
キーワードが含まれる SQL ステートメント (例:DELETE FROM TODO WHERE task LIKE ‘:#param’
) では、LIKE
キーワードを:#param
などのデータマッパーパラメーターとともに使用できません。
7.3. Fuse on OpenShift
このセクションでは、OpenShift 上の Fuse アプリケーションのデプロイメントに影響する問題を取り上げます。特定のコンテナーに影響する問題の詳細は、Spring Boot、Fuse on Apache Karaf、および Fuse on JBoss EAP のセクションも参照にしてください。Fuse on OpenShift ディストリビューションの既知の問題を以下に示します。
- ENTESB-10817 Openshift 4.1 + FMP: Unexpected response (403 Forbidden), to the authorization request.Missing header:[Location]!
OneShift Container Platform (OCP) 4.1 で、
oc login
コマンドによって作成された既存のセッションに依存せずに、fabric8-maven-plugin
が Fabric8 の Kubernetes クライアント実装を使用して OpenShift に対して認証を行うと、以下のエラーが発生します。[ERROR] Failed to execute goal org.jboss.redhat-fuse:fabric8-maven-plugin:7.4.0.fuse-740024:build (default) on project fabric8-maven-sample-zero-config: Failed to execute the build: Unable to build the image using the OpenShift build service: Unexpected response (403 Forbidden), to the authorization request. Missing header:[Location]!
特に、Tooling User Guide の Fuse on OpenShift クイックスタートサンプルをビルドおよびデプロイする手順では、
fabric8-maven-plugin
自体が直接 OpenShift に対して認証を行うことに依存しています。「Deploying the Fuse Integration project to OpenShift」の手順にしたがって、プロジェクトを OCP 4.1 クラスターにデプロイする場合は、ステップ 5 を以下のように変更します。- アプリケーションをデプロイする OCP 4.1 クラスターの OpenShfit コンソールにログインします。
-
OpenShift コンソールの右上隅にあるユーザー名をクリックし、メニューオプション Copy Login Command を選択します。これにより、
oc login https://192.168.42.218:8443 --token=xxxxxxxx
形式の文字列がクリップボードにコピーされます。xxxxxxxx
はセッショントークンを表すベース 64 エンコードの文字列になります。 -
VM arguments ペインから、
-Dkubernetes.auth.basic.password=admin
設定を削除し、-Dkubernetes.auth.token=xxxxxxxx
に置き換えます。xxxxxxxx
の部分はクリップボードの文字列から取得したセッショントークンに置き換えます。
注記通常、Fuse on OpenShift Guide の例やチュートリアルは、
oc login
コマンドによって作成されたセッションに依存します。そのため、これらの例の 1 つの手順にしたがえば、このエラーは発生しません。- ENTESB-10694 Problem using Fuse Console on OCP4.1 beta
OpenShift 4 で Fuse Console で Fuse サービスを管理する場合、OperatorHub のコミュニティーオペレーターを使用してコミュニティーバージョン (Hawtio) をインストールする必要があります。OpenShift Web コンソールのメインカタログから OperatorHub にアクセスします。
注記Kubernetes Operator は、OpenShift (または Kubernetes) アプリケーションのインストールおよび管理を簡単にするスクリプトです。
Fuse Console プロキシーと Jolokia エージェントとの間のコネクションをセキュアにするには、コミュニティーバージョンの Fuse Console をインストールし、それをデプロイする前にクライアント証明書を生成、署名、およびデプロイする必要があります。OpenShift 4 で Fuse Console をセキュアにする方法については、README ファイル を参照してください。
- ENTESB-10577 Apicurito does not support YAML Open API spec files
- Fuse 7.4 on OpenShift では、Apicurito はデフォルトで OpenAPI 仕様ファイルを YAML 形式で生成しますが、生成された YAML ファイルを再インポートできません。現在、JSON 形式のみを Apicurito にインポートできます。
7.4. Fuse on Spring Boot
Fuse on Spring Boot の既知の問題は次のとおりです。
- ENTESB-11164 Missing qpid-jms-client in SB2 BOM
Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM (Bill of Material) ファイルは正しくないバージョンの Qpid JMS クライアント用の
org.apache.qpid:qpid-jms-client
Maven アーティファクトを参照します。Maven プロジェクトで正しい (Red Hat がサポートする) バージョンのorg.apache.qpid:qpid-jms-client
を使用するには、以下の依存関係をプロジェクトの POM ファイルに追加します。<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-amqp</artifactId> <exclusions> <exclusion> <groupId>org.apache.qpid</groupId> <artifactId>qpid-jms-client</artifactId> </exclusion> <exclusion> <groupId>org.apache.qpid</groupId> <artifactId>proton-j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.qpid</groupId> <artifactId>qpid-jms-client</artifactId> <version>0.40.0.redhat-00001</version> </dependency> <dependency> <groupId>org.apache.qpid</groupId> <artifactId>proton-j</artifactId> <version>0.31.0.redhat-00001</version> </dependency>
- ENTESB-11163 Incorrect version of AMQ client in SB2 BOM in Fuse 7.4.0.CR4
-
Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM ファイルは正しくないバージョンの
org.apache.activemq:activemq-client
Maven アーティファクトを参照します。 - サポートされない Camel jBPM コンポーネントを参照する Spring Boot 2 の BOM
- Fuse 7.4.0 リリースでは、Spring Boot 2 の BOM (Bill of Material) が現在 Fuse でサポートされていない Camel jBPM コンポーネントを参照します。
7.5. Fuse on Apache Karaf
Fuse on Apache Karaf の既知の問題は次のとおりです。
- ENTESB-8140 Start level of hot deploy bundles is 80 by default
Fuse 7.0 GA リリースの Apache Karaf コンテナーでは、ホットデプロイバンドルの開始レベルがデフォルトで 80 になっています。これにより、同じ開始レベルを持つシステムバンドルや機能が多く存在するため、ホットデプロイバンドルに問題が発生することがあります。この問題を回避し、ホットデプロイバンドルが確実に開始するようにするには、
etc/org.apache.felix.fileinstall-deploy.cfg
ファイルを編集し、felix.fileinstall.start.level
設定を以下のように変更します。felix.fileinstall.start.level = 90
- ENTESB-7664 Installing framework-security feature kills karaf
framework-security
オプションを使用して--no-auto-refresh
OSGi 機能をインストールしないと、Apache Karaf コンテナーがシャットダウンします。以下に例を示します。feature:install -v --no-auto-refresh framework-security
7.6. Apache Camel
Apache Camel の既知の問題は次のとおりです。
- ENTESB-11060 [camel-linkedin] V1 API is no longer supported
- Fuse 7.4.0 では、Camel LinkedIn コンポーネントが LinkedIn サーバーと通信できなくなりました。これは、LinkedIn でサポートされなくなった LinkedIn Version 1.0 API を使用して実装されているためです。Fuse の今後のリリースで Camel LinkedIn コンポーネントが更新され、Version 2 API を使用するようになる予定です。
- ENTESB-7469 Camel Docker component cannot use Unix socket connections on EAP
-
Fuse 7.0 より、
camel-docker
コンポーネントは UNIX ソケットではなく REST API のみを介して Docker に接続できます。 - ENTESB-5231 PHP script language does not work
- PHP の OSGi バンドルがないため、PHP スクリプト言語は Apache Karaf コンテナー上の Camel アプリケーションでサポートされません。
- ENTESB-5232 Python language does not work
- Python の OSGi バンドルがないため、Python スクリプト言語は Apache Karaf コンテナー上の Camel アプリケーションでサポートされません。
- ENTESB-2443 Google Mail API - Sending of messages and drafts is not synchronous
- メッセージまたは下書きを送信すると、応答には ID を持つ Message オブジェクトが含まれます。API への別の呼び出しを介してこのメッセージを即座に取得できない可能性があります。このような場合、待機して呼び出しを再試行する必要があります。
- ENTESB-2332 Google Drive API JSON response for changes returns bad count of items for the first page
- 変更に対する Google Drive API JSON 応答によって返される最初のページのアイテム数は適切でありません。リスト操作の maxResults を設定すると、最初のページにすべての結果が返されないことがあります。この場合、複数のページを確認して完全リストを取得する必要があります (新しいリクエストに pageToken を設定して行います)。