Elasticsearchの保護
Elasticsearchを保護するために最初に行う必要があるのは、 X-Pack Securityを有効にする ことです。 その後、認証と暗号化通信の設定を開始できます。
Elasticsearch 6.x: Elasticsearch 6を使用している場合、ElasticのX-Pack Securityを使用するにはLiferay Enterprise Search (LES)サブスクリプションとLiferay Enterprise Search セキュリティアプリケーションが必要です。 Liferay Connector to Elasticsearch 7( Customer Downloads Portal で入手可能で、Liferay 7.3以降にバンドルされている)から、ElasticのX-Packセキュリティのサポートがデフォルトで含まれています。 Elastic社のX-Packモニタリングと連携するには、LESが必要です。
X-Pack Securityの有効化
セキュリティを有効にするには、各Elasticsearchノードの[Elasticsearch Home]/config/elasticsearch.yml
ファイルに次の設定を追加します。
xpack.security.enabled: true
これで、X-Packユーザーを設定できます。
X-Packユーザーの設定
X-Packを使用するシステムでは、次の 組み込みX-Packユーザー が重要です。
kibana_system
elastic
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-nodes
PEM
形式で証明書と鍵を生成するには、次のコマンドを実行します。./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-nodes
PKSC#12
認証局からPEM
形式のノード証明書と鍵を生成するには、次のコマンドを実行します。./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
noteLiferay 7.3+ では、 Elasticsearch connector configuration で以下の keystore タイプのみが使用できます。
複数のホストで動作する証明書を生成するには(たとえば、すべての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>
elasticsearch-certutil cert
コマンドは、elastic-nodes.p12
という別のファイルを生成します(他の名前でかまいません)。notecertutil
コマンドのデフォルトでは、証明書の生成に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`の2つのZIPファイルが生成されます。 アーカイブの内容を解凍して、[Elasticsearch Home]/config/certsフォルダに入れてください。 -
elastic-nodes.p12
を[Elasticsearch Home]/config/certs
フォルダに移動します。チェックポイント:
[Elasticsearch Home]/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 Security
xpack.security.enabled: true
## TLS/SSL settings for Transport layer (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
# TLS/SSL settings for HTTP layer (PKCS#12)
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
# Comment out when Kibana and Liferay's X-Pack Monitoring are also configured
#xpack.monitoring.collection.enabled: true
LiferayでElasticsearchへの安全な接続を設定する
Liferayでは、セキュリティはコントロールパネルまたは設定ファイルを使用して構成できます。 [コントロールパネル] → [設定] → [システム設定] に移動します。 [検索機能] カテゴリを見つけて、Liferay 7.3+の [Elasticsearch 7] エントリまたはLiferay 7.2の [X-Pack Security] エントリをクリックします。 ここにプロパティ値を入力することもできますが、[Liferay Home]/osgi/configs
にデプロイされている設定ファイルを使用するのが一般的です。
ファイルの正確なコンテンツは、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.elasticsearch7.configuration.ElasticsearchConfiguration.config
次のようにファイルにデータを入力します。
operationMode="REMOTE"
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のサブスクリプションを持っている場合、 download 「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コネクタのセキュリティ設定
以下は、7.3+ の Elasticsearch コネクタのセキュリティ設定の完全なリストです(カッコ内はデフォルト値):
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 Securityの設定
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
)。
requireAuthentication
(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のプロパティを設定することで、ElasticsearchとLiferayの接続を暗号化する際に使用するTLSプロトコルのバージョンと暗号スイートを制御することができます。 これらのプロパティは、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 Client接続を設定している場合は、 elasticsearch.yml
にあるような HTTPレイヤー設定 を使用してください:
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でトランスポートクライアントを設定している場合は、 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