検索エンジン用に Apache を設定する
ここでは、Transport Layer Security (TLS)暗号化と HTTP 基本認証を組み合わせて、web サーバーと検索エンジン(Elasticsearchまたは OpenSearch)間の通信を保護する例について説明します。 オプションで、その他のタイプの認証も設定できます。この情報の参照を提供しています。
(古い用語である Secure Sockets Layer (SSL)は、多くの場合、TLS と同じ意味で使用されます。 このトピックでは、TLS)を参照します。
root
権限を持つユーザーとして入力する必要があります。Recommendations
以下をお勧めします。
-
Web サーバーで TLS が使用されている。
TLS はこのトピックの範囲外ですが、実稼動環境では、自己署名証明書ではなく、実際の証明書を使用することを強くお勧めします。
-
検索エンジンは、web サーバーと同じホストで実行されます。 異なるホスト上で検索エンジンと Web サーバーを実行する方法については、このトピックの範囲外です。
検索エンジンと Web サーバを同一ホストに配置する利点は、暗号化された通信を傍受できないことです。 検索エンジン web サーバーは、Adobe Commerce web サーバーと同じである必要はありません。例えば、Adobe Commerceは Apache を実行でき、Elasticsearch/OpenSearch は nginx を実行できます。
検索エンジンが公開 web に公開されている場合は、認証を設定する必要があります。 検索エンジンインスタンスがネットワーク内で保護されている場合は、この操作は必要ない場合があります。 ホスティングプロバイダーと協力して、インスタンスを保護するために実装する必要があるセキュリティ対策を決定します。
TLS の詳細情報
次のいずれかのリソースを参照してください。
プロキシの設定
ここでは、Apache を セキュアでない プロキシとして設定して、Adobe Commerceがこのサーバーで動作している検索エンジンを使用できるようにする方法について説明します。 この節では、HTTP 基本認証の設定については説明しません。これについては、Apache との安全な通信で説明しています。
Apache 2.4 用のプロキシの設定
この節では、仮想ホストを使用してプロキシを設定する方法について説明します。
-
mod_proxy
を次のように有効にします。code language-bash a2enmod proxy_http
-
テキストエディターを使用して
/etc/apache2/sites-available/000-default.conf
を開く -
ファイルの先頭に次のディレクティブを追加します。
code language-conf Listen 8080
-
ファイルの下部に次を追加します。
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Apache を再起動します。
code language-bash service apache2 restart
-
次のコマンドを入力して、プロキシが機能することを確認します。
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
例えば、プロキシを使用していて、Elasticsearchがポート 8080 を使用している場合、次のようになります。
code language-bash curl -i http://localhost:8080/_cluster/health
次のようなメッセージが成功を示して表示されます。
code language-none HTTP/1.1 200 OK Date: Tue, 23 Feb 2019 20:38:03 GMT Content-Type: application/json; charset=UTF-8 Content-Length: 389 Connection: keep-alive {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
Apache との安全な通信
この節では、Apache との HTTP Basic 認証を使用して、Apache と検索エンジン間の通信を保護する方法について説明します。 その他のオプションについては、次のいずれかのリソースを参照してください。
以下のセクションの 1 つを参照してください。
パスワードの作成
セキュリティ上の理由から、web サーバーの docroot を除く任意の場所にパスワードファイルを配置できます。 この例では、パスワードファイルを新しいディレクトリに保存する方法を示します。
必要に応じて htpasswd をインストールします。
まず、次のように Apache htpasswd
ユーティリティがインストールされているかどうかを確認します。
-
次のコマンドを入力して、
htpasswd
が既にインストールされているかどうかを確認します。code language-bash which htpasswd
パスが表示された場合は、インストールされます。コマンドが出力を返さない場合は、
htpasswd
はインストールされません。 -
必要に応じて、
htpasswd
をインストールします。- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
パスワードファイルの作成
root
権限を持つユーザーとして、次のコマンドを入力します。
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>
ここで、
-
<username>
は次になることができます。- Cron の設定:web サーバーユーザーまたは別のユーザー。
この例では web サーバーユーザーを使用しますが、ユーザーの選択はユーザー次第です。
- Elasticsearchの設定:この例では、ユーザーの名前は
magento_elasticsearch
です
-
<password file name>
は非表示のファイル (.
で始まる)であり、ユーザーの名前を反映している必要があります。 詳しくは、この節の後半の例を参照してください。
画面の指示に従って、ユーザーのパスワードを作成します。
例
例 1:cron
cron 用に 1 人のユーザーの認証のみを設定する必要があります。この例では、web サーバーユーザーを使用します。 Web サーバーユーザーのパスワードファイルを作成するには、次のコマンドを入力します。
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache
例 2:Elasticsearch
2 人のユーザーに対してElasticsearchを設定する必要があります。1 人は nginx にアクセスでき、もう 1 人は認証にアクセスできます。 これらのユーザーのパスワードファイルを作成するには、次のコマンドを入力します。
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch
ユーザーを追加
パスワード・ファイルに別のユーザーを追加するには、root
権限を持つユーザーとして次のコマンドを入力します。
htpasswd /usr/local/apache/password/.htpasswd <username>
Apache との安全な通信
この節では、HTTP 基本認証の設定方法について説明します。 TLS と HTTP 基本認証を一緒に使用すると、Elasticsearchや OpenSearch、またはアプリケーションサーバーとの通信がインターセプトされるのを防ぐことができます。
ここでは、Apache サーバーにアクセスできるユーザーを指定する方法について説明します。
-
テキストエディターを使用して、次の内容を安全な仮想ホストに追加します。
- Apache 2.4:
/etc/apache2/sites-available/default-ssl.conf
を編集
code language-conf <Proxy *> Order deny,allow Allow from all AuthType Basic AuthName "Elasticsearch Server" # or OpenSearch Server AuthBasicProvider file AuthUserFile /usr/local/apache/password/.htpasswd_elasticsearch Require valid-user # This allows OPTIONS-requests without authorization <LimitExcept OPTIONS> Require valid-user </LimitExcept> </Proxy>
- Apache 2.4:
-
上記のを安全な仮想ホストに追加した場合は、
Listen 8080
と、以前に追加した<VirtualHost *:8080>
ディレクティブを安全でない仮想ホストに削除します。 -
変更を保存し、テキストエディターを終了して、Apache を再起動します。
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
検証
この項では、HTTP 基本認証が機能していることを確認する 2 つの方法について説明します。
curl
コマンドを使用して検証するには、ユーザー名とパスワードを入力してクラスターの状態を取得する必要があります- 管理者での HTTP 基本認証の設定
curl
コマンドを使用してクラスターの状態を確認する
次のコマンドを入力します。
curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
例えば、検索エンジンサーバーにコマンドを入力し、プロキシがポート 8080 を使用している場合は、次のようになります。
curl -i http://localhost:8080/_cluster/health
次のメッセージが表示され、認証が失敗したことを示します。
HTTP/1.1 401 Unauthorized
Date: Tue, 23 Feb 2016 20:35:29 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
</body>
</html>
次のコマンドを試してください。
curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
例:
curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health
今回は、コマンドが成功し、次のようなメッセージが表示されます。
HTTP/1.1 200 OK
Date: Tue, 23 Feb 2016 20:38:03 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 389
Connection: keep-alive
{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
管理画面で HTTP 基本認証を設定
検索エンジンの設定で説明したのと同じタスクを実行します。*ただし*Enable HTTP Auth リストで「Yes」をクリックし、表示されたフィールドにユーザー名とパスワードを入力します。
「Test Connection」をクリックして機能することを確認し、「Save Config」をクリックします。
続行する前に、キャッシュをフラッシュして再インデックス化する必要があります。