Elasticsearchのセキュリティ対策
Elasticsearch を保護するために最初に行うべきことは、 X-Pack Security を有効にすることです。 その後、認証と暗号化通信の設定を開始できます。
Elasticsearch 6.x: Elasticsearch 6 を使用している場合は、Elastic の X-Pack Security を使用するために、Liferay Enterprise Search (LES) サブスクリプションと Liferay Enterprise Search Security アプリケーションが必要です。 Liferay Connector to Elasticsearch 7( カスタマーダウンロードポータル で入手可能、Liferay 7.3以降にバンドル)以降、ElasticのX-Packセキュリティのサポートがデフォルトで含まれています。 Elastic社のX-Packモニタリングと連携するには、LESが必要です。
X-Packセキュリティを有効にする
セキュリティを有効にするには、各Elasticsearchノードの[Elasticsearch Home]/config/elasticsearch.ymlファイルに次の設定を追加します。
xpack.security.enabled: true
これで、X-Packユーザーを設定できます。
X-Packユーザーを設定する
X-Packを使用するシステムでは、これらの 組み込みX-Packユーザー が重要です。
kibana_system伸縮性のある
Elasticsearchサーバーで、 setup-passwords コマンド を使用してパスワードを設定します。
./bin/elasticsearch-setup-passwords interactive
以下に示す構成では、すべてのパスワードが liferay に設定されていることを前提としています。 インストールには独自のパスワードを使用してください。
組み込みユーザーのパスワードを更新するには、Kibana の UI または Change Password API を使用します。
Elasticsearch通信の暗号化
トランスポート層セキュリティ(TLS)を有効にするには、ノード証明書と鍵を生成し、ElasticsearchサーバーとLiferayサーバーに適用する必要があります。
ノード証明書を生成する
各ノード用に証明書を生成するか、 Liferay のようにすべてのノードとクライアントで使用する証明書を生成します。— または、認証局を使用してノード証明書を取得します。
-
X-Pack の
certutilコマンドを使用して、X-Pack 認証局を生成します。./bin/elasticsearch-certutil ca --ca-dn CN=elastic-caこれにより、
elastic-stack-ca.p12という名前のファイルが生成されます。PEM形式で認証局証明書と秘密鍵を生成するには、
./bin/elasticsearch-certutil ca --pem --ca-dn CN=elastic-ca -
認証局ファイルを
[Elasticsearch Home]/config/certsフォルダーに移動します。 -
作成した認証局(CA)を使用して、X.509証明書と秘密鍵を生成します。
PKCS#12形式で証明書と鍵を生成するには、以下を実行します。./bin/elasticsearch-certutil cert --ca config/certs/elastic-stack-ca.p12 --ca-pass liferay --dns localhost --ip 127.0.0.1 --name elastic-nodesPEM形式で証明書とキーを生成するには、以下を実行します。./bin/elasticsearch-certutil cert --pem --ca-cert config/certs/ca.crt --ca-key config/certs/ca.key --dns localhost --ip 127.0.0.1 --name elastic-nodesPEM形式のノード証明書と鍵をPKSC#12認証局から生成するには、以下を実行します。./bin/elasticsearch-certutil cert --pem --ca config/certs/elastic-stack-ca.p12 --ca-pass liferay --dns localhost --ip 127.0.0.1 --name elastic-nodes注記Liferay 7.3以降では、 Elasticsearchコネクタ構成で使用できるキーストアタイプは以下のみです。
複数のホストで動作する証明書を生成するには(たとえば、すべてのElasticsearchサーバーとLiferayサーバーで同じ証明書を使用する場合)、DNS名とIPアドレスを列挙する際にカンマ区切りのリストを使用します。
./bin/elasticsearch-certutil cert --ca config/certs/elastic-stack-ca.p12 --ca-pass liferay --dns localhost,example.com,es-node1,es-node2,es-node3 --ip 127.0.0.1,<IPv4-address-2>,<IPv4-address-3>,<IPv4-address-4>重要クラスターがロードバランサーの背後にある場合は、同じ
--dnsリストにロードバランサーの DNS 名を含め、TCP をノードに通過させます。 ロードバランサーでTLSを終端するには、ロードバランサーの証明書を使用します。elasticsearch-certutil certコマンドは、elastic-nodes.p12という名前の別のファイルを生成します (名前は自由に変更できます)。注記certutilコマンドは、デフォルトで PKCS#12 形式を使用して証明書を生成します。これは Elastic Stack 7.x で動作します。 Kibana 6.x は PKCS#12 証明書に対応していないため、Liferay 7.2 および Kibana 6.x をLiferay Enterprise Search Monitoring と一緒に使用する場合は、--pemオプション(証明書をPEM形式で生成する)が重要になります。 各ケースの PEM コマンドは、次の 2 つの ZIP ファイルを生成します:ca.crtおよびca.key、elastic-nodes.crtおよびelastic-nodes.key。 アーカイブの内容を [Elasticsearch Home]/config/certs フォルダーに解凍します。 -
elastic-nodes.p12を[Elasticsearch Home]/config/certsフォルダーに移動します。確認事項:
[Elasticsearch ホーム]/config/certsフォルダには、現在以下のファイルがあります:elastic-nodes.p12 elastic-stack-ca.p12または
ca.crt ca.key elastic-nodes.crt elastic-nodes.key -
各Elasticsearchノード上の同じフォルダにファイルをコピーし、各Liferayサーバーノード上の適切な場所にファイルをコピーしてください。
証明書と鍵が、Elasticsearch設定で使用できるようになりました。
ElasticsearchのTLS設定
各ノードの[Elasticsearch Home]/config/elasticsearch.ymlファイルからTLSを有効にします。
-
ノード間通信のために、
elasticsearch.ymlで以下の設定を使用してトランスポート層TLSを有効にします。xpack.security.transport.ssl.enabled: true -
トランスポート層TLSを設定します。 各ノードの
elasticsearch.ymlに証明書、キー、認証局のパスを追加します。# PKCS#12 xpack.security.transport.ssl.keystore.path: certs/elastic-nodes.p12 xpack.security.transport.ssl.keystore.password: liferay xpack.security.transport.ssl.truststore.path: certs/elastic-nodes.p12 xpack.security.transport.ssl.truststore.password: liferay # PEM #xpack.security.transport.ssl.certificate_authorities: [ "certs/ca.crt" ] #xpack.security.transport.ssl.certificate: certs/elastic-nodes.crt #xpack.security.transport.ssl.key: certs/elastic-nodes.key xpack.security.transport.ssl.verification_mode: certificate上記の例のパスは、証明書を
[Elasticsearch Home]/config/certsに追加したことを前提としています。 -
クライアントとの通信を暗号化するために、HTTPレイヤーでTLSを有効にします。
xpack.security.http.ssl.enabled: true -
HTTPレイヤーのTLSを設定します。 各ノードの
elasticsearch.ymlに証明書、キー、および認証局のパスを追加します。# PKCS#12 xpack.security.http.ssl.keystore.path: certs/elastic-nodes.p12 xpack.security.http.ssl.keystore.password: liferay xpack.security.http.ssl.truststore.path: certs/elastic-nodes.p12 xpack.security.http.ssl.truststore.password: liferay # PEM #xpack.security.http.ssl.certificate_authorities: [ "certs/ca.crt" ] #xpack.security.http.ssl.certificate: certs/elastic-nodes.crt #xpack.security.http.ssl.key: certs/elastic-nodes.key
Elasticsearchのセキュリティ設定例
以下は完全な Elasticsearch 設定です (elasticsearch.yml; Elasticsearch 6.5.x 以降にも同様に適用されます)。
cluster.name: LiferayElasticsearchCluster
# X-Pack セキュリティ
xpack.security.enabled: true
## トランスポート層の TLS/SSL 設定 (PKCS#12)
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/elastic-nodes.p12
xpack.security.transport.ssl.keystore.password: liferay
xpack.security.transport.ssl.truststore.path: certs/elastic-nodes.p12
xpack.security.transport.ssl.truststore.password: liferay
xpack.security.transport.ssl.verification_mode: certificate
# HTTP レイヤー (PKCS#12) の TLS/SSL 設定
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-nodes.p12
xpack.security.http.ssl.keystore.password: liferay
xpack.security.http.ssl.truststore.path: certs/elastic-nodes.p12
xpack.security.http.ssl.truststore.password: liferay
# Kibana と Liferay の X-Pack Monitoring も設定されている場合はコメントアウトしてください
#xpack.monitoring.collection.enabled: true
LiferayでElasticsearchへの安全な接続を設定する
Liferayでは、セキュリティはコントロールパネルまたは設定ファイルを使用して構成できます。 コントロール パネル → 設定 → システム設定 に移動します。 Liferay 7.3+ の場合は Search カテゴリを見つけて、 Elasticsearch 7/8 エントリを、Liferay 7.2 の場合は X-Pack Security エントリをクリックします。 ここにプロパティ値を入力することもできますが、[Liferay Home]/osgi/configsにデプロイされている設定ファイルを使用するのが一般的です。
Elasticsearch 7 のシステム設定エントリと対応する設定ファイルは、Elasticsearch 8 への接続を設定するためにも使用されます。
ファイルの正確なコンテンツは、X-Packの設定によって異なります。 passwordは、上記のX-Packユーザーパスワードのセットアップ中に設定したものと一致する必要があります。
ここで参照されている証明書と鍵のファイルは、Elasticsearchサーバーノードで使用されているものと同じです。 それらをLiferayサーバーにコピーし、それに応じて設定内のパスを更新します。
TLSの設定に加えて、authenticationEnabled/requiresAuthenticationをtrueに設定し、LiferayがElasticsearchへの認証に使用するElasticsearchユーザーの認証情報を提供することにより、以下の設定で認証を有効にします。
セキュリティの設定が完了したら、Elasticsearchを再起動します。 これらの手順では、Elasticsearchクラスターを完全に再起動する必要があります。
Liferay 7.3、7.4、および四半期リリースでElasticsearchへのセキュアな接続を設定する
Elasticsearch のインストール および Elasticsearch への接続 はセキュリティの有効化と構成を示します。7.3 以降に適用可能なセキュリティ構成については、これらを参照してください。
Liferay 7.3以降に同梱されているElasticsearchコネクタには、X-Pack Securityのサポートが含まれています。 Elasticsearchコネクタ構成で使用できるサポートされているキーストアタイプのリストについては、 Java 11セキュリティドキュメント を参照してください。
以下のようなファイルを作成します。
com.liferay.portal.search.elasticsearch8.configuration.ElasticsearchConfiguration.config
Liferay DXP 2026.Q1 より前のリリースでは、ファイル名は com.liferay.portal.search.elasticsearch7.configuration.ElasticsearchConfiguration.config です。
ファイルに以下のようにデータを入力してください。
productionModeEnabled=B"true"
username="elastic"
password="liferay"
authenticationEnabled=B"true"
httpSSLEnabled=B"true"
networkHostAddresses=["https://localhost:9200"]
truststorePassword="liferay"
truststorePath="/PATH/TO/elastic-nodes.p12"
truststoreType="pkcs12"
Liferay 7.2 で Elasticsearch へのセキュア接続を設定する
Elasticsearch 7以降に対応するすべてのLiferayコネクタには、X-Pack Securityのサポートが含まれています。
Liferay 7.2 と Elasticsearch 6.x を使用しており、Liferay Enterprise Search のサブスクリプションをお持ちの場合は、 「Liferay Enterprise Search Security」アプリケーションを ダウンロードしてください。 LPKG ファイルを [Liferay Home]/deploy フォルダーにコピーしてインストールします。
以下のようなファイルを作成します。
com.liferay.portal.search.elasticsearch7.configuration.XPackSecurityConfiguration.config
(またはElastic Stack 6.xとLiferay Enterprise Search Securityアプリケーションを使用している場合はcom.liferay.portal.search.elasticsearch6.configuration.XPackSecurityConfiguration.config)
次のようにファイルにデータを入力します(PKCS#12):
certificateFormat="PKCS#12"
sslKeystorePath="/PATH/TO/elastic-nodes.p12"
sslKeystorePassword="liferay"
sslTruststorePath="/PATH/TO/elastic-nodes.p12"
sslTruststorePassword="liferay"
requiresAuthentication=B"true"
username="elastic"
password="liferay"
transportSSLVerificationMode="certificate"
transportSSLEnabled=B"true"
PEM形式の証明書を使用している場合は、次のような設定を使用します。
certificateFormat="PEM"
sslKeyPath="/PATH/TO/elastic-nodes.key"
sslCertificatePath="/PATH/TO/elastic-nodes.crt"
requiresAuthentication=B"true"
username="elastic"
password="liferay"
sslCertificateAuthoritiesPaths="/PATH/TO/ca.crt"
transportSSLVerificationMode="certificate"
transportSSLEnabled="true"
Liferay 7.3、7.4、および四半期リリースにおけるElasticsearchコネクタのセキュリティ設定
Elasticsearchコネクタ7.3以降のセキュリティ設定の完全なリストを以下に示します(括弧内はデフォルト値)。
authenticationEnabled (true): ユーザー名とパスワードを使用して Elasticsearch への認証を有効または無効にします。
username (elastic): [認証有効] がチェックされている場合、Elasticsearch への認証に使用するユーザー名を設定します。
password:[認証が有効]がオンになっている場合、認証用のパスワードをElasticsearchに設定します。
httpSSLEnabled (false): TLS/SSL を有効または無効にします。
truststoreType (pkcs12): HTTP SSL が有効になっている場合に、トラストストアの種類を設定します。
truststorePath (/path/ro/localhost.p12): HTTP SSL が有効になっている場合、トラストストア ファイルへのパスを設定します。
truststorePassword:[HTTP SSLが有効]がオンになっている場合、パスワードをトラストストアに設定します。
Liferay 7.2 におけるエンタープライズ検索セキュリティ / X-Pack セキュリティ設定
Liferay 7.2のX-Pack Security構成の設定の完全な一覧は次のとおりです。
sslKeyPath (/path/to/instance.key): 秘密鍵を含む PEM エンコードされたファイルへのパスを設定します。
sslCertificatePath (/path/to/instance.crt): クライアントが接続する際に提示される証明書 (または証明書チェーン) を含む PEM エンコードされたファイルへのパスを設定します。 デフォルトは/path/to/instance.crtです。
sslCertificateAuthoritiesPaths (["/path/to/ca.crt"]): 信頼できる PEM エンコード証明書ファイルへのパスのリストを指定します。
certificateFormat (PKCS#12): 証明書の形式を指定します (PEM または PKCS#12)。
requiresAuthentication (false): 有効にすると、Elasticsearch/X-Pack との接続は、設定されたユーザー名とパスワードで認証されます。
username (elastic): 「認証が必要」が有効になっている場合、Elasticsearch への認証に必要なユーザー名を設定します。
password:[認証を要求]が有効になっている場合、パスワードが必要です。
transportSSLVerificationMode (certificate): 中間者攻撃や証明書の偽造から保護するために LDAP を使用する場合は、検証タイプ (none、 certificate、または full) を指定します。
transportSSLEnabled (false): TLS/SSL を設定または無効にします。
sslKeystorePath (/path/to/elastic-certificates.p12): 秘密鍵と証明書を保持するキーストアへのパスを設定します。
sslKeystorePassword: PKCS#12 ファイルのパスワードを設定します。
sslTruststorePath (/path/to/elastic-certificates.p12): トラストストア ファイルへのパスを設定します。
sslTruststorePassword:パスワードをトラストストアに設定します。
TLSプロトコルと暗号スイートの設定
LiferayのJVMでTLSプロパティを設定することで、TLSプロトコルバージョンと、ElasticsearchとLiferay間の接続を暗号化する際に使用される暗号スイートを制御できます。 これらのプロパティは、Tomcatサーバーの setenv.shで設定できます。
CATALINA_OPTS="$CATALINA_OPTS -Djdk.tls.client.protocols=TLSv1.2
CATALINA_OPTS="$CATALINA_OPTS -Djdk.tls.client.cipherSuites=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
これらはあくまで例の値であることに注意してください。
これらの設定は、対応するXPackの設定と連携して機能します。
Liferay 7.3 または 7.4 で REST クライアント接続を構成する場合は、 HTTP レイヤー設定 を elasticsearch.yml で使用します。
xpack.security.http.ssl.supported_protocols: [ "TLSv1.2" ]
xpack.security.http.ssl.cipher_suites : TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
Liferay 7.1 および 7.2 で Transport Client を設定する場合は、 トランスポート設定 を elaticsearch.yml で使用します。
xpack.security.transport.ssl.supported_protocols: [ "TLSv1.2" ]
xpack.security.transport.ssl.cipher_suites : TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256