Elastic Stackの基本的なセキュリティを設定し、HTTPSトラフィックを保護する
HTTPレイヤーでTLSを有効にすると、クラスターとの通信がすべて暗号化されることを保証する追加のセキュリティ層が提供されます。
[](#signing-certificates)
**署名証明書**
`````elasticsearch-certutil`````ツールが最初に尋ねる質問は、証明書署名要求(CSR)を生成したいかどうかです。自分の証明書に署名したい場合は`````n`````と答え、中央CAで証明書に署名したい場合は`````y`````と答えます。
## 自分の証明書に署名する
証明書機関を生成したときに作成したCAを使用したい場合は、CSRを生成したいかどうか尋ねられたときに`````n`````と答えます。次に、ツールが証明書に署名して生成するために使用するCAの場所を指定します。この手順のステップはこのワークフローに従います。
## 中央CAで証明書に署名する
中央のセキュリティチームがいる環境で作業している場合、彼らはおそらくあなたのために証明書を生成できます。組織内のインフラストラクチャは、既存のCAを信頼するように構成されている可能性があるため、CSRを使用してそのCAを制御するチームにリクエストを送信すると、クライアントがElasticsearchに接続しやすくなるかもしれません。中央CAを使用するには、最初の質問に`````y`````と答えます。
### 前提条件
[Elastic Stackの基本的なセキュリティを設定する](/read/elasticsearch-8-15/27e0721b55959fb4.md)のすべての手順を完了してください。
### ElasticsearchのHTTPクライアント通信を暗号化する
- 1*.* クラスター内の**すべての**ノードで、ElasticsearchとKibanaが実行されている場合は停止します。
- 2*.* 任意の単一ノードで、Elasticsearchをインストールしたディレクトリから、Elasticsearch HTTP証明書ツールを実行して証明書署名要求(CSR)を生成します。
#### シェル
``````shell
./bin/elasticsearch-certutil http
`
このコマンドは、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の両方のディレクトリが含まれています。
テキスト
/elasticsearch
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
テキスト
/kibana
|_ README.txt
|_ elasticsearch-ca.pem
|_ sample-kibana.yml
- 5. クラスター内のすべてのノードで、次の手順を完了します:
- 5.1. 関連する
http.p12
証明書を$ES_PATH_CONF
ディレクトリにコピーします。 - 5.2.
elasticsearch.yml
ファイルを編集してHTTPSセキュリティを有効にし、http.p12
セキュリティ証明書の場所を指定します。
- 5.1. 関連する
YAML
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: http.p12
- 5.3. 秘密鍵のパスワードをElasticsearchのセキュア設定に追加します。
シェル
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
- 5.4. Elasticsearchを起動します。
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
elasticsearch.ssl.certificateAuthorities: $KBN_PATH_CONF/elasticsearch-ca.pem
- 3. ElasticsearchクラスターのHTTPS URLを指定するために次の行を追加します。
YAML
elasticsearch.hosts: https://<your_elasticsearch_host>:9200
- 4. Kibanaを再起動します。
セキュアな監視クラスターに接続する
Elasticの監視機能が有効になっていて、別のElasticsearch監視クラスターを構成した場合、KibanaをHTTPS経由で監視クラスターに接続するように構成することもできます。手順は同じですが、各設定はmonitoring
で接頭辞が付けられます。たとえば、monitoring.ui.elasticsearch.hosts
とmonitoring.ui.elasticsearch.ssl.truststore.path
。
監視クラスター用に別のelasticsearch-ca.pem
セキュリティファイルを作成する必要があります。
ブラウザと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用のサーバー証明書と秘密鍵を生成します。
シェル
./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
ファイルを生成します:
テキスト
/kibana-server
|_ kibana-server.csr
|_ 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
server.ssl.certificate: $KBN_PATH_CONF/kibana-server.crt
server.ssl.key: $KBN_PATH_CONF/kibana-server.key
- 5*.* `````kibana.yml`````に次の行を追加して、受信接続のTLSを有効にします。
#### YAML
``````yaml
server.ssl.enabled: true
`
- 6. Kibanaを起動します。
これらの変更を行った後は、常にHTTPS経由でKibanaにアクセスする必要があります。たとえば、https://<your_kibana_host>.com
。
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
ユーザーのパスワードを自動生成された値にリセットします。
シェル
./bin/elasticsearch-reset-password -u beats_system
特定の値にパスワードを設定したい場合は、対話型(-i
)パラメータでコマンドを実行します。
シェル
./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_doc、create_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を選択します。
- Discover、Visualize、Dashboard、および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を開始する前に、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
output.elasticsearch:
hosts: ["<your_elasticsearch_host>:9200"]
protocol: "https"
username: "metricbeat_writer"
password: "<password>"
ssl:
certificate_authorities: ["elasticsearch-ca.pem"]
verification_mode: "certificate"
- Elasticsearchクラスターが実行されているホストを指定します。
- `````protocol
- Elasticsearchに接続する際に使用するプロトコルを示します。この値は
https
でなければなりません。 username
- イベントをElasticsearchに公開するために必要な権限を持つユーザーの名前。作成した
metricbeat_writer
ユーザーにはこれらの権限があります。 password
- 指定された
username
のパスワード。 certificate_authorities
- CAの証明書を含むローカル
.pem
ファイルへのパスを示します。
- 4. Kibanaへの接続を構成します。
setup.kibana
の下で、次のフィールドを指定します:
YAML
setup.kibana
host: "https://<your_elasticsearch_host>:5601"
ssl.enabled: true
username: "metricbeat_setup"
password: "p@ssw0rd"
- すべてのクエリに使用するElasticsearchインスタンスのURL。URLに`````https`````を含めることを確認してください。
- `````username
- Kibanaでダッシュボードを設定するために必要な権限を持つユーザーの名前。作成した
metricbeat_setup
ユーザーにはこれらの権限があります。 password
- 指定された
username
のパスワード。
- 5.
elasticsearch-xpack
モジュールを有効にします。
シェル
./metricbeat modules enable elasticsearch-xpack
- 6.
elasticsearch-xpack
モジュールをHTTPSを使用するように変更します。このモジュールはElasticsearchに関するメトリックを収集します。/modules.d/elasticsearch-xpack.yml
を開き、次のフィールドを指定します:
YAML
- module: elasticsearch
xpack.enabled: true
period: 10s
hosts: ["https://<your_elasticsearch_host>:9200"]
username: "remote_monitoring_user"
password: "<password>"
ssl:
enabled: true
certificate_authorities: ["elasticsearch-ca.pem"]
verification_mode: "certificate"
SSLを構成することは、暗号化されたトラフィックでノードを監視する際に必要です。 MetricbeatのSSLを構成する。 hosts Elasticsearchクラスターが実行されているホストを指定します。 URLに https を含めることを確認してください。username メトリックデータを収集する権限を持つユーザーの名前。組み込まれた monitoring_user ユーザーにはこれらの権限があります。代わりに、ユーザーを作成してmonitoring_user 役割を割り当てることができます。password 指定された username のパスワード。certificate_authorities CAの証明書を含むローカル .pem ファイルへのパスを示します。 |
- 7. 解析、インデックス作成、およびデータの視覚化のための事前定義されたアセットを使用する場合は、次のコマンドを実行してこれらのアセットをロードします:
シェル
./metricbeat setup -e
- 8. Elasticsearchを起動し、その後Metricbeatを起動します。
シェル
./metricbeat -e
-e
はオプションで、構成されたログ出力の代わりに標準エラーに出力を送信します。
- 9. Kibanaにログインし、メインメニューを開いてStack Monitoringをクリックします。
クラスターのアラートが表示され、注意が必要なものや、Elasticsearchの利用可能な監視メトリックの概要が表示されます。利用可能なカードのヘッダーリンクをクリックして、追加情報を表示します。