Elastic unter Verschluss: Ermöglicht die Sicherheitsoptionen des Elasticsearch-Clusters für den Zugriff von innen und außen

Elastic unter Verschluss: Ermöglicht die Sicherheitsoptionen des Elasticsearch-Clusters für den Zugriff von innen und außen

Elastic Stack ist ein bekanntes Tool im SIEM-Systemmarkt (eigentlich nicht nur dort). Es kann viele Daten unterschiedlicher Größe sammeln, sowohl sensible als auch nicht sehr sensible. Es ist nicht ganz richtig, wenn der Zugriff auf die Elastic Stack-Elemente selbst nicht geschützt ist. Standardmäßig laufen alle vorkonfigurierten Elastic-Elemente (Elasticsearch, Logstash, Kibana und Beats-Collectors) auf offenen Protokollen. Und in Kibana selbst ist die Authentifizierung deaktiviert. Alle diese Interaktionen können gesichert werden. In diesem Artikel erklären wir Ihnen, wie das geht. Der Einfachheit halber wurde die Geschichte in drei semantische Blöcke unterteilt:

  • Vorbild für den Datenzugriff
  • Datensicherheit innerhalb eines Elasticsearch-Clusters
  • Sicherung von Daten außerhalb eines Elasticsearch-Clusters

Details unter dem Schnitt.

Vorbild für den Datenzugriff

Wenn Sie Elasticsearch installieren und es in keiner Weise optimieren, steht allen der Zugriff auf alle Indizes offen. Na ja, oder diejenigen, die Curl benutzen können. Um dies zu vermeiden, verfügt Elasticsearch über ein Vorbild, das ab einem Basic-Abonnement (das kostenlos ist) verfügbar ist. Schematisch sieht es in etwa so aus:

Elastic unter Verschluss: Ermöglicht die Sicherheitsoptionen des Elasticsearch-Clusters für den Zugriff von innen und außen

Was ist auf dem Bild

  • Benutzer sind alle, die sich mit ihren Zugangsdaten anmelden können.
  • Eine Rolle ist eine Reihe von Rechten.
  • Rechte sind eine Reihe von Privilegien.
  • Privilegien sind Berechtigungen zum Schreiben, Lesen, Löschen usw. (Vollständige Liste der Privilegien)
  • Ressourcen sind Indizes, Dokumente, Felder, Benutzer und andere Speichereinheiten (das Rollenmodell für einige Ressourcen ist nur in kostenpflichtigen Abonnements verfügbar).

Standardmäßig hat Elasticsearch Box-Benutzeran denen befestigt sind Boxrollen. Nachdem Sie die Sicherheitseinstellungen aktiviert haben, können Sie diese sofort verwenden.

Um die Sicherheit in den Elasticsearch-Einstellungen zu aktivieren, müssen Sie sie zur Konfigurationsdatei hinzufügen (standardmäßig ist dies der Fall). elasticsearch/config/elasticsearch.yml) Neue Zeile:

xpack.security.enabled: true

Nachdem Sie die Konfigurationsdatei geändert haben, starten oder starten Sie Elasticsearch neu, damit die Änderungen wirksam werden. Der nächste Schritt besteht darin, den geboxten Benutzern Passwörter zuzuweisen. Lassen Sie uns dies interaktiv mit dem folgenden Befehl tun:

[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]

Wir prüfen:

[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

Sie können sich auf die Schulter klopfen – die Einstellungen auf der Elasticsearch-Seite sind abgeschlossen. Jetzt ist es an der Zeit, Kibana zu konfigurieren. Wenn Sie es jetzt ausführen, werden Fehler angezeigt. Daher ist es wichtig, einen Schlüsselspeicher zu erstellen. Dies geschieht in zwei Befehlen (user Kibana und das beim Passworterstellungsschritt in Elasticsearch eingegebene Passwort):

[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password

Wenn alles korrekt ist, fragt Kibana nach einem Benutzernamen und einem Passwort. Das Basic-Abonnement beinhaltet ein Rollenmodell basierend auf internen Benutzern. Ab Gold können Sie externe Authentifizierungssysteme anbinden – LDAP, PKI, Active Directory und Single-Sign-On-Systeme.

Elastic unter Verschluss: Ermöglicht die Sicherheitsoptionen des Elasticsearch-Clusters für den Zugriff von innen und außen

Zugriffsrechte auf Objekte innerhalb von Elasticsearch können ebenfalls eingeschränkt werden. Um jedoch dasselbe für Dokumente oder Felder tun zu können, benötigen Sie ein kostenpflichtiges Abonnement (dieser Luxus beginnt mit der Platin-Stufe). Diese Einstellungen sind in der Kibana-Oberfläche oder über verfügbar Sicherheits-API. Sie können das bereits bekannte Dev Tools-Menü durchsehen:

Eine Rolle erstellen

PUT /_security/role/ruslan_i_ludmila_role
{
  "cluster": [],
  "indices": [
    {
      "names": [ "ruslan_i_ludmila" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

Einen Benutzer erstellen

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Datensicherheit innerhalb eines Elasticsearch-Clusters

Wenn Elasticsearch in einem Cluster ausgeführt wird (was häufig vorkommt), werden Sicherheitseinstellungen innerhalb des Clusters wichtig. Für die sichere Kommunikation zwischen Knoten verwendet Elasticsearch das TLS-Protokoll. Um eine sichere Kommunikation zwischen ihnen einzurichten, benötigen Sie ein Zertifikat. Wir generieren ein Zertifikat und einen privaten Schlüssel im PEM-Format:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

Nachdem Sie den obigen Befehl ausgeführt haben, im Verzeichnis /../elasticsearch Das Archiv wird angezeigt elastische-stack-ca.zip. Darin finden Sie ein Zertifikat und einen privaten Schlüssel mit Erweiterungen crt и Schlüssel jeweils. Es empfiehlt sich, sie auf einer gemeinsamen Ressource zu platzieren, die von allen Knoten im Cluster aus zugänglich sein sollte.

Jeder Knoten benötigt nun seine eigenen Zertifikate und privaten Schlüssel, die auf denen im freigegebenen Verzeichnis basieren. Beim Ausführen des Befehls werden Sie aufgefordert, ein Passwort festzulegen. Sie können zusätzliche Optionen -ip und -dns hinzufügen, um die interagierenden Knoten vollständig zu überprüfen.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

Als Ergebnis der Befehlsausführung erhalten wir ein Zertifikat und einen privaten Schlüssel im PKCS#12-Format, geschützt durch ein Passwort. Es bleibt die generierte Datei zu verschieben p12 in das Konfigurationsverzeichnis:

[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

Fügen Sie dem Zertifikat im Format ein Passwort hinzu p12 im Keystore und Truststore auf jedem Knoten:

[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

Bereits bekannt elastischesuche.yml es müssen noch Zeilen mit Daten zum Zertifikat hinzugefügt werden:

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

Wir starten alle Elasticsearch-Knoten und führen sie aus curl. Wenn alles richtig gemacht wurde, wird eine Antwort mit mehreren Knoten zurückgegeben:

[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

Es gibt eine weitere Sicherheitsoption – IP-Adressfilterung (verfügbar in Abonnements ab der Gold-Stufe). Ermöglicht Ihnen das Erstellen von Whitelists mit IP-Adressen, von denen Knoten zugreifen dürfen.

Sicherung von Daten außerhalb eines Elasticsearch-Clusters

Außerhalb des Clusters bedeutet die Anbindung externer Tools: Kibana, Logstash, Beats oder andere externe Clients.

Elastic unter Verschluss: Ermöglicht die Sicherheitsoptionen des Elasticsearch-Clusters für den Zugriff von innen und außen

Um die Unterstützung für https (anstelle von http) zu konfigurieren, fügen Sie neue Zeilen zu elasticsearch.yml hinzu:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

Weil Das Zertifikat ist passwortgeschützt. Fügen Sie es zum Keystore und Truststore auf jedem Knoten hinzu:

[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

Nach dem Hinzufügen der Schlüssel können die Elasticsearch-Knoten über https verbunden werden. Jetzt können sie gestartet werden.

Der nächste Schritt besteht darin, einen Schlüssel zum Verbinden von Kibana zu erstellen und ihn der Konfiguration hinzuzufügen. Basierend auf dem Zertifikat, das sich bereits im freigegebenen Verzeichnis befindet, generieren wir ein Zertifikat im PEM-Format (PKCS#12 wird von Kibana, Logstash und Beats noch nicht unterstützt):

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem

Es müssen noch die generierten Schlüssel in den Kibana-Konfigurationsordner entpackt werden:

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

Die Schlüssel sind vorhanden, also müssen Sie nur noch die Kibana-Konfiguration ändern, damit sie verwendet werden. Ändern Sie in der Konfigurationsdatei kibana.yml http in https und fügen Sie Zeilen mit SSL-Verbindungseinstellungen hinzu. Die letzten drei Zeilen konfigurieren die sichere Kommunikation zwischen dem Browser des Benutzers und 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

Damit sind die Einstellungen abgeschlossen und der Zugriff auf Daten im Elasticsearch-Cluster wird verschlüsselt.

Wenn Sie Fragen zu den Funktionen von Elastic Stack bei kostenlosen oder kostenpflichtigen Abonnements, Überwachungsaufgaben oder der Erstellung eines SIEM-Systems haben, hinterlassen Sie eine Anfrage an Feedback-Formular auf unserer Website.

Weitere unserer Artikel über Elastic Stack auf Habré:

Maschinelles Lernen im Elastic Stack verstehen (auch bekannt als Elasticsearch, auch bekannt als ELK)

Dimensionierung von Elasticsearch

Source: habr.com

Kommentar hinzufügen