Elastic Stackの基本的なセキュリティを設定し、HTTPSトラフィックを保護する

HTTPレイヤーでTLSを有効にすると、クラスターとの通信がすべて暗号化されることを保証する追加のセキュリティ層が提供されます。

  1. [](#signing-certificates)
  2. **署名証明書**
  3. `````elasticsearch-certutil`````ツールが最初に尋ねる質問は、証明書署名要求(CSR)を生成したいかどうかです。自分の証明書に署名したい場合は`````n`````と答え、中央CAで証明書に署名したい場合は`````y`````と答えます。
  4. ## 自分の証明書に署名する
  5. 証明書機関を生成したときに作成したCAを使用したい場合は、CSRを生成したいかどうか尋ねられたときに`````n`````と答えます。次に、ツールが証明書に署名して生成するために使用するCAの場所を指定します。この手順のステップはこのワークフローに従います。
  6. ## 中央CAで証明書に署名する
  7. 中央のセキュリティチームがいる環境で作業している場合、彼らはおそらくあなたのために証明書を生成できます。組織内のインフラストラクチャは、既存のCAを信頼するように構成されている可能性があるため、CSRを使用してそのCAを制御するチームにリクエストを送信すると、クライアントがElasticsearchに接続しやすくなるかもしれません。中央CAを使用するには、最初の質問に`````y`````と答えます。
  8. ### 前提条件
  9. [Elastic Stackの基本的なセキュリティを設定する](/read/elasticsearch-8-15/27e0721b55959fb4.md)のすべての手順を完了してください。
  10. ### ElasticsearchのHTTPクライアント通信を暗号化する
  11. - 1*.* クラスター内の**すべての**ノードで、ElasticsearchKibanaが実行されている場合は停止します。
  12. - 2*.* 任意の単一ノードで、Elasticsearchをインストールしたディレクトリから、Elasticsearch HTTP証明書ツールを実行して証明書署名要求(CSR)を生成します。
  13. #### シェル
  14. ``````shell
  15. ./bin/elasticsearch-certutil http
  16. `

このコマンドは、ElasticsearchとKibanaで使用する証明書とキーを含む.zipファイルを生成します。各フォルダーには、これらのファイルの使用方法を説明するREADME.txtが含まれています。

  • 2.1. CSRを生成したいかどうか尋ねられたときはnと入力します。
  • 2.2. 既存のCAを使用したいかどうか尋ねられたときはyと入力します。
  • 2.3. CAのパスを入力します。これは、クラスターのために生成したelastic-stack-ca.p12ファイルへの絶対パスです。
  • 2.4. CAのパスワードを入力します。
  • 2.5. 証明書の有効期限の値を入力します。有効期間を年、月、または日で入力できます。たとえば、90日間の場合は90Dと入力します。
  • 2.6. 各ノードごとに1つの証明書を生成したいかどうか尋ねられたときはyと入力します。
    各証明書には独自の秘密鍵があり、特定のホスト名またはIPアドレスに対して発行されます。
  • 2.7. プロンプトが表示されたら、クラスター内の最初のノードの名前を入力します。ノード証明書を生成するときに使用したのと同じノード名を使用してください。
  • 2.8. 最初のノードに接続するために使用されるすべてのホスト名を入力します。これらのホスト名は、証明書のSubject Alternative Name(SAN)フィールドにDNS名として追加されます。
    HTTPS経由でクラスターに接続するために使用されるすべてのホスト名とバリアントをリストします。
  • 2.9. クライアントがノードに接続するために使用できるIPアドレスを入力します。
  • 2.10. クラスター内の各追加ノードについてこれらの手順を繰り返します。
    • 3. 各ノードの証明書を生成した後、プロンプトが表示されたら秘密鍵のパスワードを入力します。
    • 4. 生成されたelasticsearch-ssl-http.zipファイルを解凍します。この圧縮ファイルには、ElasticsearchとKibanaの両方のディレクトリが含まれています。

テキスト

  1. /elasticsearch
  2. |_ README.txt
  3. |_ http.p12
  4. |_ sample-elasticsearch.yml

テキスト

  1. /kibana
  2. |_ README.txt
  3. |_ elasticsearch-ca.pem
  4. |_ sample-kibana.yml
  • 5. クラスター内のすべてのノードで、次の手順を完了します:
    • 5.1. 関連するhttp.p12証明書を$ES_PATH_CONFディレクトリにコピーします。
    • 5.2. elasticsearch.ymlファイルを編集してHTTPSセキュリティを有効にし、http.p12セキュリティ証明書の場所を指定します。

YAML

  1. xpack.security.http.ssl.enabled: true
  2. xpack.security.http.ssl.keystore.path: http.p12
  • 5.3. 秘密鍵のパスワードをElasticsearchのセキュア設定に追加します。

シェル

  1. ./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
  • 5.4. Elasticsearchを起動します。

: KibanaのHTTPクライアント通信を暗号化する

KibanaのHTTPクライアント通信を暗号化する

ブラウザはKibanaにトラフィックを送信し、KibanaはElasticsearchにトラフィックを送信します。これらの通信チャネルは、TLSを使用するように別々に構成されています。KibanaとElasticsearchの間のトラフィックを暗号化し、次にブラウザとKibanaの間のトラフィックを暗号化します。

KibanaとElasticsearchの間のトラフィックを暗号化する

elasticsearch-certutilツールをhttpオプションで実行したとき、/kibanaディレクトリが作成され、elasticsearch-ca.pemファイルが含まれています。このファイルを使用して、KibanaがHTTPレイヤーのElasticsearch CAを信頼するように構成します。

  • 1. elasticsearch-ca.pemファイルをKibanaの設定ディレクトリにコピーします。$KBN_PATH_CONFパスで定義されています。
  • 2. kibana.ymlを開き、HTTPレイヤーのセキュリティ証明書の場所を指定するために次の行を追加します。

YAML

  1. elasticsearch.ssl.certificateAuthorities: $KBN_PATH_CONF/elasticsearch-ca.pem
  • 3. ElasticsearchクラスターのHTTPS URLを指定するために次の行を追加します。

YAML

  1. elasticsearch.hosts: https://<your_elasticsearch_host>:9200
  • 4. Kibanaを再起動します。

セキュアな監視クラスターに接続する

Elasticの監視機能が有効になっていて、別のElasticsearch監視クラスターを構成した場合、KibanaをHTTPS経由で監視クラスターに接続するように構成することもできます。手順は同じですが、各設定はmonitoringで接頭辞が付けられます。たとえば、monitoring.ui.elasticsearch.hostsmonitoring.ui.elasticsearch.ssl.truststore.path

監視クラスター用に別のelasticsearch-ca.pemセキュリティファイルを作成する必要があります。

: ブラウザとKibanaの間のトラフィックを暗号化する

ブラウザとKibanaの間のトラフィックを暗号化する

Kibana用のサーバー証明書と秘密鍵を作成します。Kibanaは、Webブラウザからの接続を受信する際に、このサーバー証明書と対応する秘密鍵を使用します。

サーバー証明書を取得する際は、ブラウザが信頼するように、主題代替名(SAN)を正しく設定する必要があります。SANをKibanaサーバーの完全修飾ドメイン名(FQDN)、ホスト名、またはIPアドレスに設定できます。SANを選択する際は、ブラウザでKibanaに接続するために使用する属性を選択してください。これはおそらくFQDNです。

以下の手順では、Kibana用の証明書署名要求(CSR)を作成します。CSRには、CAがセキュリティ証明書を生成して署名するために使用する情報が含まれています。証明書は、信頼できるCAによって署名されたものであったり、内部CAによって署名されたものであったりします。自己署名または内部署名の証明書は、開発環境や概念実証の構築には許可されますが、本番環境では使用すべきではありません。

本番環境に移行する前に、Let’s Encryptなどの信頼できるCAまたは組織の内部CAを使用して証明書に署名してください。署名された証明書を使用することで、内部アクセスや公共インターネット上のKibanaへの接続に対するブラウザの信頼を確立します。

  • 1. Kibana用のサーバー証明書と秘密鍵を生成します。

シェル

  1. ./bin/elasticsearch-certutil csr -name kibana-server -dns example.com,www.example.com

CSRには、kibana-serverの共通名(CN)、example.comのSAN、およびwww.example.comの別のSANがあります。
このコマンドは、デフォルトで次の内容を含むcsr-bundle.zipファイルを生成します:

テキスト

  1. /kibana-server
  2. |_ kibana-server.csr
  3. |_ kibana-server.key
  • 2. csr-bundle.zipファイルを解凍して、kibana-server.csrの署名されていないセキュリティ証明書とkibana-server.keyの暗号化されていない秘密鍵を取得します。
  • 3. kibana-server.csr証明書署名要求を内部CAまたは信頼できるCAに送信して署名を取得します。署名されたファイルは、.crtファイルのように異なる形式である可能性があります。
  • 4. kibana.ymlを開き、Kibanaがサーバー証明書と暗号化されていない秘密鍵にアクセスできるようにするために次の行を追加します。

YAML

  1. server.ssl.certificate: $KBN_PATH_CONF/kibana-server.crt
  2. server.ssl.key: $KBN_PATH_CONF/kibana-server.key
  1. - 5*.* `````kibana.yml`````に次の行を追加して、受信接続のTLSを有効にします。
  2. #### YAML
  3. ``````yaml
  4. server.ssl.enabled: true
  5. `
  • 6. Kibanaを起動します。

これらの変更を行った後は、常にHTTPS経由でKibanaにアクセスする必要があります。たとえば、https://<your_kibana_host>.com

: Beatsのセキュリティを構成する

Beatsのセキュリティを構成する

Beatsは、サーバーにエージェントとしてインストールしてElasticsearchに運用データを送信するオープンソースのデータシッパーです。各Beatは、別々にインストール可能な製品です。以下の手順では、Metricbeatのセキュリティを構成する方法を説明します。セキュリティを構成したい追加のBeatごとにこれらの手順に従ってください。

前提条件

Metricbeatをインストールするには、好みの方法を使用してください。

次の手順を完了する前に、Elastic Stackに接続したり、Metricbeatの資産を構成したりすることはできません。

Metricbeatの役割を作成する

通常、次の別々の役割を作成する必要があります:

  • setup 役割:インデックステンプレートやその他の依存関係を設定するため
  • monitoring 役割:監視情報を送信するため
  • writer 役割:Metricbeatによって収集されたイベントを公開するため
  • reader 役割:Metricbeatデータにアクセスして視覚化を作成する必要があるKibanaユーザーのため

これらの手順は、Metricbeatインデックスのデフォルト名を使用していると仮定しています。指定されたインデックス名がリストされていない場合、またはカスタム名を使用している場合は、役割を定義するときに手動で入力し、権限をインデックス命名パターンに合わせて変更してください。

KibanaのStack Managementからユーザーと役割を作成するには、サイドナビゲーションからRolesまたはUsersを選択します。

: setup役割を作成する

setup役割とユーザーを作成する

Metricbeatを設定する管理者は、通常、Elasticsearchにデータをインデックス化し、Kibanaで視覚化するために使用されるマッピング、ダッシュボード、およびその他のオブジェクトをロードする必要があります。

Metricbeatの設定は、追加の権限が必要な管理者レベルのタスクです。ベストプラクティスとして、setup役割を管理者のみに付与し、イベント公開にはより制限された役割を使用してください。

  • 1. setup役割を作成します:
  • 2. 役割名としてmetricbeat_setupを入力します。
  • 3. monitorおよびmanage_ilmクラスター権限を選択します。
  • 4. metricbeat-*インデックスで、manageおよびwrite権限を選択します。
    metricbeat-*インデックスがリストされていない場合は、そのパターンをインデックスのリストに入力します。
  • 5. setupユーザーを作成します:
  • 6. ユーザー名としてmetricbeat_setupを入力します。
  • 7. ユーザー名、パスワード、およびその他のユーザーの詳細を入力します。
  • 8. metricbeat_setupユーザーに次の役割を割り当てます:
    | 役割 | 目的 |
    | :— | :— |
    | metricbeat_setup | Metricbeatを設定します。 |
    | kibana_admin | 利用可能な場合、Kibanaに例のダッシュボードなどの依存関係をロードします |
    | ingest_admin | インデックステンプレートを設定し、利用可能な場合はインジェストパイプラインを設定します |

: 監視役割を作成する

監視役割とユーザーを作成する

監視データを安全に送信するには、監視ユーザーを作成し、必要な権限を付与します。

環境に組み込まれたbeats_systemユーザーが利用可能な場合は、それを使用できます。組み込まれたユーザーはElastic Cloudでは利用できないため、これらの手順ではMetricbeatの監視に明示的に使用されるユーザーを作成します。

  • 1. 組み込まれたbeats_systemユーザーを使用している場合は、クラスター内の任意のノードで、elasticsearch-reset-passwordユーティリティを実行してそのユーザーのパスワードを設定します:
    このコマンドは、beats_systemユーザーのパスワードを自動生成された値にリセットします。

シェル

  1. ./bin/elasticsearch-reset-password -u beats_system

特定の値にパスワードを設定したい場合は、対話型(-i)パラメータでコマンドを実行します。

シェル

  1. ./bin/elasticsearch-reset-password -i -u beats_system
  • 2. 監視役割を作成します:
  • 3. 役割名としてmetricbeat_monitoringを入力します。
  • 4. monitorクラスター権限を選択します。
  • 5. .monitoring-beats-*インデックスで、create_indexおよびcreate_doc権限を選択します。
  • 6. 監視ユーザーを作成します:
  • 7. ユーザー名としてmetricbeat_monitoringを入力します。
  • 8. ユーザー名、パスワード、およびその他のユーザーの詳細を入力します。
  • 9. metricbeat_monitoringユーザーに次の役割を割り当てます:
    | 役割 | 目的 |
    | :— | :— |
    | metricbeat_monitoring | Metricbeatを監視します。 |
    | kibana_admin | Kibanaを使用します |
    | monitoring_user | KibanaのStack Monitoringを使用してMetricbeatを監視します |

: ライター役割を作成する

ライター役割とユーザーを作成する

Elasticsearchにイベントを公開するユーザーは、Metricbeatインデックスを作成して書き込む必要があります。ライター役割に必要な権限を最小限に抑えるために、setup役割を使用して依存関係を事前にロードします。このセクションでは、setup役割を作成したと仮定しています。

  • 1. ライター役割を作成します:
  • 2. 役割名としてmetricbeat_writerを入力します。
  • 3. monitorおよびread_ilmクラスター権限を選択します。
  • 4. metricbeat-*インデックスで、create_doccreate_index、およびview_index_metadata権限を選択します。
  • 5. ライターユーザーを作成します:
  • 6. ユーザー名としてmetricbeat_writerを入力します。
  • 7. ユーザー名、パスワード、およびその他のユーザーの詳細を入力します。
  • 8. metricbeat_writerユーザーに次の役割を割り当てます:
    | 役割 | 目的 |
    | :— | :— |
    | metricbeat_writer | Metricbeatを監視します。 |
    | remote_monitoring_collector | Metricbeatから監視メトリックを収集します。 |
    | remote_monitoring_agent | 監視クラスターに監視データを送信します。 |

: リーダー役割を作成する

リーダー役割とユーザーを作成する

Kibanaユーザーは通常、Metricbeatデータを含むダッシュボードや視覚化を表示する必要があります。これらのユーザーは、ダッシュボードや視覚化を作成および編集する必要がある場合もあります。リーダー役割を作成して、これらのユーザーに適切な権限を割り当てます。

  • 1. リーダー役割を作成します:
  • 2. 役割名としてmetricbeat_readerを入力します。
  • 3. metricbeat-*インデックスで、read権限を選択します。
  • 4. Kibanaの下で、Kibana権限を追加をクリックします。
    • Spacesの下で、Defaultを選択します。
    • DiscoverVisualizeDashboard、およびMetricsのためにReadまたはAllを選択します。
  • 5. リーダーユーザーを作成します:
  • 6. ユーザー名としてmetricbeat_readerを入力します。
  • 7. ユーザー名、パスワード、およびその他のユーザーの詳細を入力します。
  • 8. metricbeat_readerユーザーに次の役割を割り当てます:
    | 役割 | 目的 |
    | :— | :— |
    | metricbeat_reader | Metricbeatデータを読み取ります。 |
    | monitoring_user | Metricbeat自体の健康状態を監視できるようにします。 この役割は、Metricbeatを管理するユーザーのみに割り当ててください。 |
    | beats_admin | Beatsの中央管理で構成を作成および管理できるようにします。 この役割は、Beatsの中央管理を使用する必要があるユーザーのみに割り当ててください。 |

: MetricbeatをTLSで使用するように構成する

MetricbeatをTLSで使用するように構成する

Metricbeatを開始する前に、ElasticsearchとKibanaへの接続を構成します。基本認証、APIキー認証、または公開鍵基盤(PKI)証明書を使用して、セキュアなクラスターにデータを送信するための認証を構成できます。

以下の手順では、作成したmetricbeat_writerおよびmetricbeat_setupユーザーの資格情報を使用します。より高いレベルのセキュリティが必要な場合は、PKI証明書の使用をお勧めします。

ElasticsearchとKibanaへの接続を構成した後、elasticsearch-xpackモジュールを有効にし、そのモジュールをHTTPSを使用するように構成します。

本番環境では、データを保存するために別のクラスター(監視クラスターと呼ばれる)を使用することを強くお勧めします。別の監視クラスターを使用することで、本番クラスターの停止が監視データへのアクセスに影響を与えるのを防ぎます。また、監視活動が本番クラスターのパフォーマンスに影響を与えるのを防ぎます。

  • 1. HTTPレイヤーのために証明書を生成したノードで、/kibanaディレクトリに移動します。
  • 2. elasticsearch-ca.pem証明書をMetricbeatをインストールしたディレクトリにコピーします。
  • 3. metricbeat.yml設定ファイルを開き、Elasticsearchへの接続を構成します。
    output.elasticsearchの下で、次のフィールドを指定します:

YAML

  1. output.elasticsearch:
  2. hosts: ["<your_elasticsearch_host>:9200"]
  3. protocol: "https"
  4. username: "metricbeat_writer"
  5. password: "<password>"
  6. ssl:
  7. certificate_authorities: ["elasticsearch-ca.pem"]
  8. verification_mode: "certificate"
    1. - Elasticsearchクラスターが実行されているホストを指定します。
    2. - `````protocol
    • Elasticsearchに接続する際に使用するプロトコルを示します。この値はhttpsでなければなりません。
    • username
    • イベントをElasticsearchに公開するために必要な権限を持つユーザーの名前。作成したmetricbeat_writerユーザーにはこれらの権限があります。
    • password
    • 指定されたusernameのパスワード。
    • certificate_authorities
    • CAの証明書を含むローカル.pemファイルへのパスを示します。
  • 4. Kibanaへの接続を構成します。
    setup.kibanaの下で、次のフィールドを指定します:

YAML

  1. setup.kibana
  2. host: "https://<your_elasticsearch_host>:5601"
  3. ssl.enabled: true
  4. username: "metricbeat_setup"
  5. password: "p@ssw0rd"
    1. - すべてのクエリに使用するElasticsearchインスタンスのURLURL`````https`````を含めることを確認してください。
    2. - `````username
    • Kibanaでダッシュボードを設定するために必要な権限を持つユーザーの名前。作成したmetricbeat_setupユーザーにはこれらの権限があります。
    • password
    • 指定されたusernameのパスワード。
  • 5. elasticsearch-xpackモジュールを有効にします。

シェル

  1. ./metricbeat modules enable elasticsearch-xpack
  • 6. elasticsearch-xpackモジュールをHTTPSを使用するように変更します。このモジュールはElasticsearchに関するメトリックを収集します。
    /modules.d/elasticsearch-xpack.ymlを開き、次のフィールドを指定します:

YAML

  1. - module: elasticsearch
  2. xpack.enabled: true
  3. period: 10s
  4. hosts: ["https://<your_elasticsearch_host>:9200"]
  5. username: "remote_monitoring_user"
  6. password: "<password>"
  7. ssl:
  8. enabled: true
  9. certificate_authorities: ["elasticsearch-ca.pem"]
  10. verification_mode: "certificate"
SSLを構成することは、暗号化されたトラフィックでノードを監視する際に必要です。
MetricbeatのSSLを構成する
hosts
Elasticsearchクラスターが実行されているホストを指定します。
URLにhttpsを含めることを確認してください。
username
メトリックデータを収集する権限を持つユーザーの名前。組み込まれたmonitoring_userユーザーにはこれらの権限があります。代わりに、ユーザーを作成してmonitoring_user役割を割り当てることができます。
password
指定されたusernameのパスワード。
certificate_authorities
CAの証明書を含むローカル.pemファイルへのパスを示します。
  • 7. 解析、インデックス作成、およびデータの視覚化のための事前定義されたアセットを使用する場合は、次のコマンドを実行してこれらのアセットをロードします:

シェル

  1. ./metricbeat setup -e
  • 8. Elasticsearchを起動し、その後Metricbeatを起動します。

シェル

  1. ./metricbeat -e

-eはオプションで、構成されたログ出力の代わりに標準エラーに出力を送信します。

  • 9. Kibanaにログインし、メインメニューを開いてStack Monitoringをクリックします。
    クラスターのアラートが表示され、注意が必要なものや、Elasticsearchの利用可能な監視メトリックの概要が表示されます。利用可能なカードのヘッダーリンクをクリックして、追加情報を表示します。