12.3 Elasticsearchにおけるデータのセキュリティ保護

Elasticsearchクラスタノードには、次のようにさまざまなクライアントがアクセスできます。

  • Sentinel: イベントデータをフェッチしてイベント視覚化ダッシュボードに表示します。

  • YARN NodeManagerノードで実行されるSparkジョブ: Kafkaから受信したイベントの一括インデックス作成を行います。(SSDM用)

  • Collector Manager: 従来のストレージを使用するSentinelでイベントの一括インデックス作成を行います。

  • その他の外部クライアント: カスタム分析などのカスタム操作を実行します。

Sentinelには、Elasticsearchへのアクセスを認証して許可するelasticsearch-security-pluginという名前のElasticsearch用セキュリティプラグインが備わっています。

このプラグインは、以下のようにクライアントの接続方法に応じた検証を行うため、SAMLトークンとホワイトリストのいずれかを使用します。

  • クライアントが要求と一緒にSAMLトークンを送信する場合、このプラグインはSentinel認証サーバに照合してトークンを認証します。認証に成功すると、プラグインは、クライアントが権限を持つフィルタ済みのイベントに対するアクセスのみを許可します。

    たとえば、イベント視覚化ダッシュボード(クライアント)には、ユーザ役割で表示が許可されているElasticsearchのイベントのみが表示されます。

    役割と許可については、『Sentinel Administration Guide』の「Creating a Role」を参照してください。

  • クライアントがSAMLトークンを送信できない場合、このプラグインは正当なクライアントを記載したホワイトリストをチェックします。検証に成功すると、プラグインは、フィルタ処理せずにすべてのイベントへのアクセスを許可します。

  • クライアントが有効なSAMLトークンを送信しない、またはホワイトリストで許可されていない場合、プラグインはこれを正当なクライアントではないと見なし、クライアントにアクセスを与えません。

このセクションでは、Elasticsearchセキュリティプラグインのインストールと設定に関する情報を示します。

12.3.1 Elasticsearchセキュリティプラグインのインストール

Elasticsearchセキュリティプラグインは、Elasticsearchクラスタの各ノードと、Sentinelに含まれるElasticsearchノードにもインストールする必要があります。

Sentinelに含まれるElasticsearchノードにelasticsearch-security-plug-inをインストールする方法:

  1. Sentinel MainまたはSSDMサーバにログインします。

  2. 次のように、JAVA_HOME環境変数のパスを設定します。

    export JAVA_HOME=/<Sentinel_installation_path>/opt/novell/sentinel/jdk/
  3. プラグインをインストールします。

    Linuxの場合は、Elasticsearchを実行しているユーザとしてログインし、次のコマンドを実行します。

    <sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/bin/elasticsearch-plugin install file://localhost/<Sentinel_installation_path>/etc/opt/novell/sentinel/scalablestore/elasticsearch-security-plugin*.zip --verbose

    インストールを続行するプロンプトが表示されたら、yと入力します。

  4. (状況によって実行) ElasticsearchがデフォルトのHTTPポート(9200)でリスンしていない場合、<Sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txtファイルの各エントリでElasticsearchポート番号を更新する必要があります。

    詳細については、ホワイトリストを使用して、Elasticsearchクライアントにアクセスを提供を参照してください。

  5. 次のコマンドを使用して、Sentinelでインデックス作成サービスを再開します。

    rcsentinel stopSIdb
    rcsentinel startSIdb

外部Elasticsearchノードにelasticsearch-security-plug-inをインストールする方法:

Elasticsearchクラスタ内の各ノードで次の手順を実行します。

  1. Sentinel MainまたはSSDMサーバにログインします。

  2. <Sentinel_installation_path>/etc/opt/novell/sentinel/scalablestore/elasticsearch-security-plugin*.zipファイルを、Elasticsearchクラスタの各ノードで一時的な場所にコピーします。

  3. プラグインをインストールします。

    Linuxの場合は、Elasticsearchを実行しているユーザとしてログインし、次のコマンドを実行します。

    <elasticsearch_install_directory>/bin/elasticsearch-plugin install file://localhost/<full path of elasticsearch-security-plugin*.zip file> --verbose

    インストールを続行するプロンプトが表示されたら、yと入力します。

  4. (状況によって実行)ElasticsearchがデフォルトHTTPポート(9200)でリスンしていない場合、<elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txtファイルの各エントリでElasticsearchポート番号を更新する必要があります。

    詳細については、ホワイトリストを使用して、Elasticsearchクライアントにアクセスを提供を参照してください。

  5. Elasticsearchを再起動します。

12.3.2 追加のElasticsearchクライアントへのセキュリティ保護されたアクセスの提供

デフォルトでは、SSDMサーバ(イベント視覚化ダッシュボード用)、YARN NodeManagers、Sentinelサーバ(イベント視覚化ダッシュボード用)、およびRCMなどの信頼できるクライアントがElasticsearchにアクセスできます。その他のElasticsearchクライアントを使用する場合は、SAMLトークンまたはホワイトリストのいずれかを使用して、それらの追加クライアントにセキュリティ保護されたアクセスを提供する必要があります。

SAMLトークンを使用して、Elasticsearch RESTクライアントにアクセスを提供

ElasticsearchにアクセスするためにRESTクライアントを使用している場合、次のように要求ヘッダにSAMLトークンを含めることができます。

  1. Sentinel認証サーバからSAMLトークンを取得します。詳細については、Sentinelで使用可能なREST APIのマニュアルを参照してください。

    ヘルプ]>[API]>[チュートリアル]>[APIセキュリティ]>[SAMLトークンの取得(ログオン)]をクリックします。

  2. 後続のREST要求でSAMLトークンを使用します。RESTクライアントによる各要求の認証ヘッダにSAMLトークンを含めます。ヘッダ名を[認証]に、ヘッダ値をステップ1で取得した<SAMLトークン>に指定します。

ホワイトリストを使用して、Elasticsearchクライアントにアクセスを提供

デフォルトで、信頼されているElasticsearchクライアントのIPアドレスはSentinelによって自動的にホワイトリストに入力されます。たとえば、SSDMサーバ(イベント視覚化ダッシュボード用)、YARN NodeManagers、Sentinelサーバ(イベント視覚化ダッシュボード用)、およびRCMなどです。Elasticsearchセキュリティプラグインは、ホワイトリストに記載されているすべてのクライアントにElasticsearchへのアクセス権を付与します。

有効なSentinelトークンを送信しないその他のクライアントにアクセスを提供するには、クライアントのIPアドレスと、ElasticsearchサーバのHTTPポート番号をIPアドレス:ポートの形式でホワイトリストに追加する必要があります。不正アクセスを防止するため、ホワイトリストに追加する外部クライアントが正当で信頼に値することを確認しなければなりません。

ホワイトリストを更新する方法:

  1. Elasticsearchを実行しているユーザとしてSentinelサーバまたはElasticsearchノードにログインします。

  2. 次のファイルに<Elasticsearch_Client_IP>:<Target_Elasticsearch_HTTP_Port>エントリを追加します。

    • Sentinelに含まれるElasticsearchノードの場合、<Sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin//elasticsearch-ip-whitelist.txt

    • 外部Elasticsearchノードの場合、<elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txt

    複数のエントリがある場合、各エントリを新しい行に追加し、ファイルを保存します。

  3. Elasticsearchクラスタのノードごとに前述のステップを繰り返します。

12.3.3 Elasticsearchプラグイン設定の更新

スケーラブルストレージコンポーネントのIPアドレス/ホスト名とポート番号またはElasticsearchバージョンとポート番号を変更する場合、Elasticsearchプラグイン設定ファイルもそれに応じて更新しなければなりません。

Elasticsearchクラスタの各ノードで次の手順を実行します。

  1. Elasticsearchを実行しているユーザとしてElasticsearchノードにログインします。

  2. (状況によって実行)YARN NodeManagerのIPアドレス、SSDMまたはSentinelサーバのIPアドレス、RCMのIPアドレス、またはElasticsearchポート番号を変更した場合、それに応じてホワイトリストも更新し、ElasticsearchセキュリティプラグインがElasticsearchクライアントにアクセス権を付与できるようにします。

    HAモードでSSDMまたはSentinelを設定している場合、HAクラスタのアクティブノードとパッシブノードごとの物理IPアドレスエントリを追加します。

    HAクラスタの任意のノードの物理IPアドレスを変更したり、HAクラスタに新しいノードを追加したりした場合、ホワイトリストを更新して、変更したノードまたは新たに追加したノードの物理IPアドレスを反映します。

    詳細については、ホワイトリストを使用して、Elasticsearchクライアントにアクセスを提供を参照してください。

  3. (状況によって実行)SSDMのIPアドレス、SentinelサーバのIPアドレス、またはWebサーバのポート番号を変更した場合、次のファイルのauthServer.hostおよびauthServer.portのプロパティを更新して、Elasticsearchを再開します。

    • Sentinelに含まれるElasticsearchノードの場合、<Sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/plugin-configuration.properties

    • 外部Elasticsearchノードの場合、<elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/plugin-configuration.properties

    HAモードでSSDMまたはSentinelを設定している場合、authServer.hostプロパティをHAクラスタの仮想IPアドレスに設定します。

    HAクラスタの仮想IPアドレスを変更する場合は、authServer.hostプロパティを変更後の仮想IPアドレスに更新します。

  4. (状況によって実行)Elasticsearchを新しいバージョンにアップグレードした場合は、次のファイルのelasticsearch.versionプロパティを更新してElasticsearchを再開します。

    • Sentinelに含まれるElasticsearchノードの場合、/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/plugin-descriptor.properties

    • 外部Elasticsearchノードの場合、<elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/plugin-descriptor.properties