Elastic Stack は、SIEM システム市場 (実際にはそれだけではありません) でよく知られたツールです。 機密性の高いデータとそれほど機密性の低いデータの両方を含む、さまざまなサイズのデータを多数収集できます。 Elastic Stack 要素自体へのアクセスが保護されていない場合、これは完全に正しいとは言えません。 デフォルトでは、すべての Elastic のすぐに使える要素 (Elasticsearch、Logstash、Kibana、および Beats コレクター) はオープン プロトコルで実行されます。 また、Kibana 自体では認証が無効になっています。 これらのやり取りはすべて安全に行うことができ、この記事ではその方法を説明します。 便宜上、物語を 3 つの意味ブロックに分割しました。
- ロールベースのデータアクセスモデル
- Elasticsearch クラスター内のデータ セキュリティ
- Elasticsearch クラスターの外部でのデータの保護
ロールベースのデータアクセスモデル
Elasticsearch をインストールし、まったく調整しなかった場合、すべてのインデックスに誰でもアクセスできるようになります。 まあ、カールが使える人。 これを回避するために、Elasticsearch には Basic サブスクリプション (無料) から利用できるロール モデルがあります。 概略的には次のようになります。
写真には何が写っていますか
- ユーザーとは、自分の資格情報を使用してログインできるすべての人々です。
- ロールは一連の権利です。
- 権利は一連の特権です。
- 特権とは、書き込み、読み取り、削除などの権限です。 (
権限の完全なリスト ) - リソースは、インデックス、ドキュメント、フィールド、ユーザー、およびその他のストレージ エンティティです (一部のリソースのロール モデルは、有料サブスクリプションでのみ利用可能です)。
Elasticsearch のデフォルトでは、
Elasticsearch 設定でセキュリティを有効にするには、それを設定ファイルに追加する必要があります (デフォルトではこれは elasticsearch/config/elasticsearch.yml) 改行:
xpack.security.enabled: true
設定ファイルを変更した後、変更を有効にするために Elasticsearch を起動または再起動します。 次のステップでは、Box ユーザーにパスワードを割り当てます。 以下のコマンドを使用して、これを対話的に実行してみましょう。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
私たちはチェックします:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
これで Elasticsearch 側の設定は完了です。 次に、Kibana を構成します。 今実行するとエラーが表示されるため、キーストアを作成することが重要です。 これは XNUMX つのコマンド (ユーザー キバナ および Elasticsearch のパスワード作成ステップで入力したパスワード):
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password
すべてが正しい場合、Kibana はログインとパスワードの入力を求め始めます。 Basic サブスクリプションには、内部ユーザーに基づいたロール モデルが含まれています。 Gold 以降、外部認証システム (LDAP、PKI、Active Directory、シングル サインオン システム) に接続できるようになりました。
Elasticsearch 内のオブジェクトへのアクセス権も制限できます。 ただし、ドキュメントまたはフィールドに対して同じことを行うには、有料サブスクリプションが必要になります (この豪華なサービスはプラチナ レベルから始まります)。 これらの設定は、Kibana インターフェイスまたは経由で利用できます。
ロールの作成
PUT /_security/role/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}
ユーザーの作成
POST /_security/user/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Alexander Pushkin",
"email" : "[email protected]",
"metadata" : {
"hometown" : "Saint-Petersburg"
}
}
Elasticsearch クラスター内のデータ セキュリティ
Elasticsearch がクラスター内で実行される場合 (これは一般的です)、クラスター内のセキュリティ設定が重要になります。 ノード間の安全な通信のために、Elasticsearch は TLS プロトコルを使用します。 それらの間で安全な対話を設定するには、証明書が必要です。 証明書と秘密キーを PEM 形式で生成します。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
上記のコマンドを実行すると、ディレクトリ内で /../elasticsearch アーカイブが表示されます elastic-stack-ca.zip。 その中には、証明書と拡張子付きの秘密キーがあります。 CRT и キー それぞれ。 これらを共有リソースに配置し、クラスター内のすべてのノードからアクセスできるようにすることをお勧めします。
各ノードには、共有ディレクトリ内の証明書と秘密鍵に基づいた独自の証明書と秘密鍵が必要になります。 コマンドを実行すると、パスワードの設定を求められます。 対話ノードを完全に検証するには、オプション -ip および -dns を追加できます。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key
コマンドを実行した結果、パスワードで保護された PKCS#12 形式の証明書と秘密キーを受け取ります。 あとは生成されたファイルを移動するだけです p12 設定ディレクトリに移動します。
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config
次の形式で証明書にパスワードを追加します。 p12 各ノードのキーストアとトラストストア内:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
すでに知られています elasticsearch.yml 残っているのは、証明書データを含む行を追加することだけです。
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
すべての Elasticsearch ノードを起動して実行します curl。 すべてが正しく行われた場合、複数のノードを含む応答が返されます。
[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1
もう XNUMX つのセキュリティ オプションとして、IP アドレス フィルタリングがあります (ゴールド レベルからのサブスクリプションで利用可能)。 ノードへのアクセスを許可する IP アドレスのホワイト リストを作成できます。
Elasticsearch クラスターの外部でのデータの保護
クラスターの外側とは、外部ツール (Kibana、Logstash、Beats、またはその他の外部クライアント) に接続することを意味します。
https (http ではなく) のサポートを構成するには、elasticsearch.yml に新しい行を追加します。
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12
なぜなら証明書はパスワードで保護されており、各ノードのキーストアとトラストストアに追加します。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password
キーを追加すると、Elasticsearch ノードは https 経由で接続できるようになります。 これで起動できるようになりました。
次のステップでは、Kibana に接続するためのキーを作成し、それを構成に追加します。 共有ディレクトリに既に存在する証明書に基づいて、PEM 形式で証明書を生成します (PKCS#12 Kibana、Logstash、および Beats はまだサポートされていません)。
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem
残っているのは、作成したキーを Kibana 構成のフォルダーに解凍することだけです。
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config
キーはそこにあるので、あとはそれらの使用を開始するように Kibana 構成を変更するだけです。 kibana.yml 構成ファイルで、http を https に変更し、SSL 接続設定を含む行を追加します。 最後の XNUMX 行は、ユーザーのブラウザと Kibana 間の安全な通信を構成します。
elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crt
これで設定が完了し、Elasticsearch クラスター内のデータへのアクセスが暗号化されます。
無料または有料のサブスクリプションでの Elastic Stack の機能、タスクの監視、または SIEM システムの作成について質問がある場合は、リクエストを残してください。
Habré に関する Elastic Stack に関する記事の詳細: