先日、Fessが検索エンジンとして利用するElasticsearchがメジャーバージョンアップされ、Elasticsearch 8がリリースされました。同バージョンでは、セキュリティ機能がデフォルトで有効化されるなどの変更が加えられています。

Fessでは、すでにElasticsearch 8の変更に対応したFess 14をリリース済みです。今回は、Elasticsearch 8のセキュリティ機能が有効な状態で、Fessを利用する方法を紹介します。

Elasticsearch 8のインストール

今回は、Linux環境でElasticsearch 8.0.1を利用する方法を説明します。操作は一般ユーザーで実行してください。

Elasticsearch 8.0に関するインストール方法の詳細は、Installing Elasticsearchを参照してください。

Linux環境向けの配布物は、以下のようにコマンドを実行することでダウンロード/展開できます。ここでは、SHA-512のチェックサムと比較して、ダウンロードしたファイルも確認しています。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.1-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.1-linux-x86_64.tar.gz.sha512
$ shasum -a 512 -c elasticsearch-8.0.1-linux-x86_64.tar.gz.sha512
$ tar -xzf elasticsearch-8.0.1-linux-x86_64.tar.gz
$ cd elasticsearch-8.0.1/

このelasticsearch-8.0.1ディレクトリを「$ES_HOME」とします。

$ ES_HOME=$(pwd)

Elasticsearchプラグインのインストール

まず、elasticsearch-pluginコマンドで、Fessが利用する以下のプラグインをインストールします。

$ ./bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-fess:8.0.0
$ ./bin/elasticsearch-plugin install org.codelibs:elasticsearch-analysis-extension:8.0.0
$ ./bin/elasticsearch-plugin install org.codelibs:elasticsearch-minhash:8.0.0

次に、configsyncモジュールをmodulesディレクトリにインストールします。

$ CONFIGSYNC_URL=https://repo.maven.apache.org/maven2/org/codelibs/elasticsearch-configsync/8.0.1/elasticsearch-configsync-8.0.1.zip
$ curl -o /tmp/configsync.zip $CONFIGSYNC_URL
$ mkdir -p $ES_HOME/modules/configsync
$ unzip -d $ES_HOME/modules/configsync /tmp/configsync.zip

Elasticsearchの設定

続いて、Elasticsearch をFessで利用するための設定をします。

通常のFessのインストールと同様、「configsync.config_path」の設定を「elasticsearch.yml」に追加します。

$ echo "configsync.config_path: $ES_HOME/data/config/" >> $ES_HOME/config/elasticsearch.yml

Elasticsearch 8では起動する前にパスワードを設定しておかないと、起動時にelasticユーザーのパスワードが自動生成されます。今回は事前にパスワードを設定しておきましょう。「ES_PASSWORD」に適当なパスワードを設定して、以下のコマンドを実行してください。

$ ES_PASSWORD=...
$ echo $ES_PASSWORD | ./bin/elasticsearch-keystore add "bootstrap.password" -xf

Elasticsearchの起動

Elasticsearchを起動します。

$ ./bin/elasticsearch

起動すると、「$ESHOME/config/certs/httpca.crt」にCA証明書が生成されます。 curlコマンドを利用して、パスワードとCA証明書を指定し、Elasticsearchに正しくアクセスできることを確認します。

$ curl --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:$ES_PASSWORD" "https://localhost:9200/"

パスワードやCA証明書を指定しないアクセスはエラーになります。

FessからElasticsearchにアクセスする際には、CA証明書ファイルを利用してアクセスします。FessとElasticsearchを別サーバで起動させたい場合は、CA証明書ファイルをFessが参照できるパスに配置してください。

Fessのインストール

CA証明書を利用したアクセスは、Fess 14から対応しているので、今回はFess 14.0.0を利用します。 Fess 14は、動作環境としてJava 17以上が必要です。Fessを起動する前にJava 17をインストールしておいてください。Fess 14.0のインストール方法の詳細は、インストールガイドを参照してください。

Fessをダウンロードして、展開します。

$ wget https://github.com/codelibs/fess/releases/download/fess-14.0.0/fess-14.0.0.zip
$ unzip fess-14.0.0.zip
$ cd fess-14.0.0

次に、「fess_config.properties」と「fess.in.sh」を編集します。

まず、「fess_config.properties」の以下の項目を設定します。

  • elasticsearch.http.ssl.certificate_authorities: CA証明書のファイルパス ($ES_HOME/config/certs/http_ca.crt)
  • elasticsearch.username: Elasticsearchの接続ユーザー名 (elastic)
  • elasticsearch.password: Elasticsearchの接続ユーザーのパスワード ($ES_PASSWORD)

「fess.in.sh」には、以下の項目を設定します。

  • ES_HTTP_URL: Elasticsearchのエンドポイント (https//localhost:9200)
  • FESS_DICTIONARY_PATH: 辞書ディレクトリのパス ($ES_HOME/data/config/)

なお、設定ファイルに記述する際には、環境変数を展開した実際の値を記述してください。

以下のコマンドを実行すると、簡単に更新できます (Mac環境で実行する場合は、コマンド実行時に-iオプションの後ろに "" を指定してください)。

$ sed -i "s,elasticsearch.http.ssl.certificate_authorities.*,elasticsearch.http.ssl.certificate_authorities=$ES_HOME/config/certs/http_ca.crt," app/WEB-INF/classes/fess_config.properties
$ sed -i "s,elasticsearch.username=.*,elasticsearch.username=elastic," app/WEB-INF/classes/fess_config.properties
$ sed -i "s,elasticsearch.password=.*,elasticsearch.password=$ES_PASSWORD," app/WEB-INF/classes/fess_config.properties
$ sed -i "s,#ES_HTTP_URL=.*,ES_HTTP_URL=https://localhost:9200," bin/fess.in.sh
$ sed -i "s,#FESS_DICTIONARY_PATH=.*,FESS_DICTIONARY_PATH=$ES_HOME/data/config/," bin/fess.in.sh

Fessの起動

Fessを起動します。

$ ./bin/fess

Fessが起動したら、「http://localhost:8080」にアクセスしてください。セキュリティ機能を利用しないElasticsearchの場合と同様に、Fessを利用することができます。

*  *  *

今回は、Fess 14を利用して、セキュリティ機能が有効な状態のElasticsearchへ接続する方法を紹介しました。Elasticsearchをセキュアな状態にしたい場合は、この手順を参考にしてFessを構築してみてください。