セキュリティが有効な状態で Elastic Stack を自動的に起動する
Elasticsearch を初めて起動すると、次のセキュリティ設定が自動的に行われます:
- TLS 用の証明書とキー が、トランスポート層と HTTP 層のために生成されます。
- TLS 設定が
elasticsearch.yml
に書き込まれます。 elastic
ユーザーのためのパスワードが生成されます。- Kibana のための登録トークンが生成されます。
その後、Kibana を起動し、30 分間有効な登録トークンを入力できます。このトークンは、Elasticsearch クラスターからのセキュリティ設定を自動的に適用し、組み込みの kibana
サービスアカウントを使用して Elasticsearch に認証し、kibana.yml
にセキュリティ設定を書き込みます。
一部のケースでは、ノードの起動プロセスがノードがすでにクラスターの一部であることを検出したり、セキュリティがすでに設定されているか明示的に無効にされている場合、セキュリティを自動的に設定できません。
前提条件
セキュリティが有効な状態で Elasticsearch を起動し、Kibana を登録する
- 1. インストールディレクトリから、Elasticsearch を起動します。
シェル
bin/elasticsearch
このコマンドは、elastic
ユーザーのパスワードと Kibana のための登録トークンを出力します。
- 2. 生成された
elastic
パスワードと登録トークンをコピーします。これらの資格情報は、Elasticsearch を初めて起動したときにのみ表示されます。elastic
ユーザーや他の組み込みユーザーのパスワードをリセットする必要がある場合は、elasticsearch-reset-password
ツールを実行します。Kibana または Elasticsearch ノードのための新しい登録トークンを生成するには、elasticsearch-create-enrollment-token
ツールを実行します。これらのツールは、Elasticsearchbin
ディレクトリにあります。elastic
パスワードをシェルの環境変数として保存することをお勧めします。例:export ELASTIC_PASSWORD="your_password"
- 3. (オプション)新しいターミナルを開き、認証された呼び出しを行うことで Elasticsearch クラスターに接続できることを確認します。
シェル
curl --cacert config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
- 4. Kibana をインストールしたディレクトリから、Kibana を起動します。
シェル
bin/kibana
- 5. インタラクティブモードまたはデタッチモードのいずれかを使用して Kibana を登録します。
- インタラクティブモード(ブラウザ)
- ターミナルで、生成されたリンクをクリックしてブラウザで Kibana を開きます。
- ブラウザで、コピーした登録トークンを貼り付け、Kibana インスタンスを Elasticsearch に接続するボタンをクリックします。
Kibana は、Elasticsearch の既存の資格情報(elasticsearch.username
とelasticsearch.password
)またはelasticsearch.hosts
の既存の URL を検出すると、インタラクティブモードに入ることはありません。
- デタッチモード(非ブラウザ)
kibana-setup
ツールを実行し、生成された登録トークンを--enrollment-token
パラメータと共に渡します。bin/kibana-setup --enrollment-token <enrollment-token>
- インタラクティブモード(ブラウザ)
クラスターに追加ノードを登録する
Elasticsearch が初めて起動すると、セキュリティの自動設定プロセスが HTTP 層を 0.0.0.0
にバインドしますが、トランスポート層は localhost のみにバインドします。この意図された動作により、追加の設定なしでデフォルトでセキュリティが有効な単一ノードクラスターを起動できます。
新しいノードを登録する前に、localhost
以外のアドレスにバインドするなどの追加のアクションや、ブートストラップチェックを満たす必要があります。 その間に、自動生成された登録トークンが期限切れになる可能性があるため、登録トークンは自動的に生成されません。
さらに、追加の設定なしでクラスターに参加できるのは、同じホスト上のノードのみです。別のホストのノードをクラスターに参加させたい場合は、transport.host
を サポートされている値(0.0.0.0
の提案された値のコメントを外すなど)または他のホストが到達できるインターフェースにバインドされた IP アドレスに設定する必要があります。詳細については、トランスポート設定を参照してください。
クラスターに新しいノードを登録するには、クラスター内の既存のノードで elasticsearch-create-enrollment-token
ツールを使用して登録トークンを作成します。次に、--enrollment-token
パラメータを使用して新しいノードを起動し、既存のクラスターに参加させます。
- 1. Elasticsearch が実行されている別のターミナルで、Elasticsearch をインストールしたディレクトリに移動し、
elasticsearch-create-enrollment-token
ツールを実行して新しいノードのための登録トークンを生成します。
登録トークンをコピーし、これを使用して Elasticsearch クラスターに新しいノードを登録します。bin/elasticsearch-create-enrollment-token -s node
- 2. 新しいノードのインストールディレクトリから、Elasticsearch を起動し、
--enrollment-token
パラメータと共に登録トークンを渡します。
Elasticsearch は、次のディレクトリに証明書とキーを自動的に生成します:bin/elasticsearch --enrollment-token <enrollment-token>
config/certs
- 3. 登録したい新しいノードについて、前のステップを繰り返します。
クライアントを Elasticsearch に接続する
Elasticsearch を初めて起動すると、HTTP 層のために TLS が自動的に設定されます。CA 証明書が生成され、ディスクに保存されます:
/etc/elasticsearch/certs/http_ca.crt
この証明書の16進エンコードされた SHA-256 フィンガープリントもターミナルに出力されます。Elasticsearch に接続するクライアント(Elasticsearch クライアント、Beats、スタンドアロン Elastic エージェント、Logstash など)は、Elasticsearch が HTTPS 用に使用する証明書を信頼していることを検証する必要があります。Fleet Server と Fleet 管理の Elastic エージェントは、CA 証明書を信頼するように自動的に設定されています。他のクライアントは、CA 証明書のフィンガープリントまたは CA 証明書自体を使用して信頼を確立できます。
自動設定プロセスがすでに完了している場合でも、セキュリティ証明書のフィンガープリントを取得できます。また、CA 証明書をマシンにコピーし、クライアントがそれを使用するように設定することもできます。
CA フィンガープリントを使用する
Elasticsearch が起動するときにターミナルに出力されるフィンガープリント値をコピーし、クライアントが Elasticsearch に接続するときにこのフィンガープリントを使用して信頼を確立するようにクライアントを設定します。
自動設定プロセスがすでに完了している場合でも、次のコマンドを実行することでセキュリティ証明書のフィンガープリントを取得できます。パスは、HTTP 層のために自動生成された CA 証明書へのものです。
openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt
このコマンドは、フィンガープリントを含むセキュリティ証明書を返します。issuer
は Elasticsearch security auto-configuration HTTP CA
である必要があります。
issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
CA 証明書を使用する
ライブラリがフィンガープリントを検証する方法をサポートしていない場合、自動生成された CA 証明書は各 Elasticsearch ノードの次のディレクトリに作成されます:
/etc/elasticsearch/certs/http_ca.crt
http_ca.crt
ファイルをマシンにコピーし、クライアントが Elasticsearch に接続するときにこの証明書を使用して信頼を確立するようにクライアントを設定します。
次は何ですか?
おめでとうございます!セキュリティが有効な状態で Elastic Stack を正常に起動しました。Elasticsearch と Kibana は、HTTP 層で TLS によって保護されており、ノード間通信は暗号化されています。Web トラフィックの HTTPS を有効にしたい場合は、ブラウザと Kibana の間のトラフィックを暗号化することができます。
セキュリティ証明書とキー
Elasticsearch をインストールすると、次の証明書とキーが Elasticsearch 設定ディレクトリに生成され、Kibana インスタンスをセキュアな Elasticsearch クラスターに接続し、ノード間通信を暗号化するために使用されます。ファイルは参考のためにここにリストされています。
http_ca.crt
- この Elasticsearch クラスターの HTTP 層のための証明書に署名するために使用される CA 証明書。
http.p12
- このノードの HTTP 層のためのキーと証明書を含むキーストア。
transport.p12
- クラスター内のすべてのノードのトランスポート層のためのキーと証明書を含むキーストア。
http.p12
と transport.p12
はパスワード保護された PKCS#12 キーストアです。Elasticsearch は、これらのキーストアのパスワードを セキュア設定 として保存します。キーストアの内容を確認または変更できるようにするために、bin/elasticsearch-keystore
ツールを使用してパスワードを取得します。
http.p12
のパスワードを取得するには、次のコマンドを使用します:
bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
transport.p12
のパスワードを取得するには、次のコマンドを使用します:
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password
さらに、Kibana をセキュアな Elasticsearch クラスターに接続するために登録トークンを使用する際、HTTP 層の CA 証明書は Elasticsearch から取得され、Kibana /data
ディレクトリに保存されます。このファイルは、Kibana と Elasticsearch 証明書機関(CA)との間の信頼を確立します。
セキュリティの自動設定がスキップされるケース
Elasticsearch を初めて起動すると、ノードの起動プロセスはセキュリティを自動的に設定しようとします。このプロセスは、次のことを判断するためにいくつかのチェックを実行します:
- ノードが初めて起動しているか
- セキュリティがすでに設定されているか
- 起動プロセスがノード設定を変更できるか
これらのチェックのいずれかが失敗した場合、手動でセキュリティを設定したか、セキュリティを自動的に設定したくないことを示す良い指標です。この場合、ノードは既存の設定を使用して通常通り起動します。
Elasticsearch の出力をファイルにリダイレクトすると、セキュリティの自動設定はスキップされます。自動設定された資格情報は、Elasticsearch を初めて起動したときにのみターミナルで表示されます。出力をファイルにリダイレクトする必要がある場合は、最初にリダイレクトなしで Elasticsearch を起動し、その後のすべての起動でリダイレクトを使用してください。
既存の環境が検出されました
特定のディレクトリがすでに存在する場合、ノードが以前に起動されたことを示す強い指標があります。同様に、特定のファイルが存在しない場合、または特定のファイルやディレクトリに読み書きできない場合、Elasticsearch をインストールしたユーザーとして実行していないか、管理者によって制限が課されている可能性があります。次の環境チェックのいずれかが真である場合、セキュリティは自動的に設定されません。
- Elasticsearch
/data
ディレクトリが存在し、空でない - このディレクトリの存在は、ノードが以前に起動されたことを示す強い指標であり、すでにクラスターの一部である可能性があります。
elasticsearch.yml
ファイルが存在しない(または読み取り可能でない)、またはelasticsearch.keystore
が読み取り可能でない- これらのファイルのいずれかが読み取り可能でない場合、Elasticsearch のセキュリティ機能がすでに有効かどうかを判断できません。この状態は、ノードの起動プロセスがノード設定を変更するのに十分な権限を持つユーザーとして実行されていないことを示すこともあります。
- Elasticsearch 設定ディレクトリが書き込み可能でない
- この状態は、管理者がこのディレクトリを読み取り専用にしたか、Elasticsearch を起動しているユーザーが Elasticsearch をインストールしたユーザーでないことを示す可能性があります。
既存の設定が検出されました
次の設定は、セキュリティの自動設定と互換性がありません。これらの設定のいずれかが存在する場合、ノードの起動プロセスはセキュリティを自動的に設定するのをスキップし、ノードは通常通り起動します。
node.roles
がノードがmaster
として選出されない値に設定されているか、ノードがデータを保持できない場合xpack.security.autoconfiguration.enabled
がfalse
に設定されているxpack.security.enabled
に値が設定されているelasticsearch.yml
設定ファイルまたはelasticsearch.keystore
にxpack.security.transport.ssl.*
(https://www.elastic.co/guide/en/elasticsearch/reference/8.15/security-settings.html#transport-tls-ssl-settings) またはxpack.security.http.ssl.*
(https://www.elastic.co/guide/en/elasticsearch/reference/8.15/security-settings.html#http-tls-ssl-settings) 設定のいずれかに値が設定されているdiscovery.type
、discovery.seed_hosts
、またはcluster.initial_master_nodes
発見とクラスター形成設定 のいずれかに値が設定されているdiscovery.type
がsingle-node
に設定されている場合や、cluster.initial_master_nodes
が存在するが現在のノードの名前のみを含む場合は例外です。