
Elastic Stack — ein bekanntes Werkzeug auf dem Markt der SIEM-Systeme (eigentlich nicht nur dafür). Es kann viele unterschiedliche Daten erheben, sowohl sensible als auch weniger sensible. Es wäre nicht ganz richtig, wenn der Zugriff auf die einzelnen Elemente des Elastic Stack nicht geschützt wäre. Standardmäßig arbeiten alle Standardkomponenten von Elastic (Elasticsearch, Logstash, Kibana und Beats-Collector) über offene Protokolle. Zudem ist die Authentifizierung in Kibana standardmäßig deaktiviert. All diese Interaktionen können gesichert werden, und in diesem Artikel erklären wir, wie das geht. Zur besseren Übersicht haben wir die Inhalte in drei sinnvolle Blöcke unterteilt:
- Rollenzugriffsmodell für Daten
- Datensicherheit innerhalb des Elasticsearch-Clusters
- Datensicherheit außerhalb des Elasticsearch-Clusters
Details finden Sie weiter unten.
Rollenzugriffsmodell für Daten
Wenn Elasticsearch installiert ist und nicht konfiguriert wird, ist der Zugriff auf alle Indizes für alle Interessierten geöffnet. Oder für diejenigen, die curl nutzen können. Um dies zu vermeiden, gibt es in Elasticsearch ein Rollenzugriffsmodell, das ab dem Basic-Plan (der kostenlos ist) verfügbar ist. Das Schema sieht ungefähr so aus:

Was auf dem Bild zu sehen ist
- Benutzer — das sind alle, die sich mit Zugangsdaten authentifizieren können.
- Rolle — das ist eine Sammlung von Rechten.
- Rechte sind eine Reihe von Privilegien.
- Privilegien sind Berechtigungen zum Schreiben, Lesen, Löschen usw. ()
- Ressourcen sind Indizes, Dokumente, Felder, Benutzer und andere Subjekte des Speichers (das Rollenmodell für einige Ressourcen ist nur in kostenpflichtigen Abonnements verfügbar).
In Elasticsearch gibt es standardmäßig , die an gebunden sind. Nach Aktivierung der Sicherheitsfunktionen können diese sofort verwendet werden.
Um die Sicherheit in den Elasticsearch-Einstellungen zu aktivieren, muss im Konfigurationsdatei (standardmäßig ist dies elasticsearch/config/elasticsearch.yml) eine neue Zeile hinzugefügt werden:
xpack.security.enabled: trueNach der Änderung der Konfigurationsdatei starten wir Elasticsearch neu, damit die Änderungen wirksam werden. Der nächste Schritt ist die Vergabe von Passwörtern für die vordefinierten Benutzer. Das machen wir interaktiv mit dem folgenden Befehl:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Einrichtung der Passwörter für die reservierten Benutzer elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user wird initiiert.
Sie werden während des Prozesses aufgefordert, Passwörter einzugeben.
Bitte bestätigen Sie, dass Sie fortfahren möchten [y/N]y
Geben Sie das Passwort für [elastic] ein:
Wiederholen Sie das Passwort für [elastic]:
Geben Sie das Passwort für [apm_system] ein:
Wiederholen Sie das Passwort für [apm_system]:
Geben Sie das Passwort für [kibana] ein:
Wiederholen Sie das Passwort für [kibana]:
Geben Sie das Passwort für [logstash_system] ein:
Wiederholen Sie das Passwort für [logstash_system]:
Geben Sie das Passwort für [beats_system] ein:
Wiederholen Sie das Passwort für [beats_system]:
Geben Sie das Passwort für [remote_monitoring_user] ein:
Wiederholen Sie das Passwort für [remote_monitoring_user]:
Passwort für Benutzer [apm_system] geändert
Passwort für Benutzer [kibana] geändert
Passwort für Benutzer [logstash_system] geändert
Passwort für Benutzer [beats_system] geändert
Passwort für Benutzer [remote_monitoring_user] geändert
Passwort für Benutzer [elastic] geändert
Überprüfen wir:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Geben Sie das Host-Passwort für Benutzer 'elastic' ein:
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 starten, wird es Fehler geben, daher ist es wichtig, ein Keystore zu erstellen. Dies erfolgt in zwei Kommandos (Benutzer Kibana und das Passwort, das in Schritt der Passworterstellung in Elasticsearch eingegeben wurde):
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.passwordWenn alles korrekt ist, wird Kibana nach einem Benutzernamen und Passwort fragen. Im Basic-Tarif steht ein Rollenmodell basierend auf internen Nutzern zur Verfügung. Ab dem Gold-Tarif können externe Authentifizierungssysteme verbunden werden – LDAP, PKI, Active Directory und Single Sign-On-Systeme.

Zugriffsrechte auf Objekte innerhalb von Elasticsearch können ebenfalls eingeschränkt werden. Um dasselbe für Dokumente oder Felder zu tun, wird allerdings ein kostenpflichtiges Abonnement benötigt (dieser Luxus beginnt auf dem Platinum-Niveau). Diese Einstellungen sind im Kibana-Interface oder über abfragbar. Man kann dies über das bereits vertraute Menü Dev Tools überprüfen:
Erstellung einer Rolle
PUT /_security/role/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Benutzer erstellen
POST /_security/user/pushkin
{
"password" : "nataliaonelove",
"roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
"full_name" : "Alexander Pushkin",
"email" : "pushkin@lyceum.edu",
"metadata" : {
"hometown" : "Sankt Petersburg"
}
}Datensicherheit innerhalb des Elasticsearch-Clusters
Wenn Elasticsearch in einem Cluster arbeitet (was üblich ist), werden die Sicherheitskonfigurationen innerhalb des Clusters wichtig. Für eine sichere Kommunikation zwischen den Knoten verwendet Elasticsearch das TLS-Protokoll. Um eine sichere Interaktion zwischen ihnen einzurichten, ist ein Zertifikat erforderlich. Generieren Sie ein Zertifikat und einen privaten Schlüssel im PEM-Format:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pemNach Ausführung des obigen Befehls wird im Verzeichnis /../elasticsearch ein Archiv erscheinen elastic-stack-ca.zip. Darin finden Sie das Zertifikat und den privaten Schlüssel mit den Erweiterungen crt und key jeweils. Es ist ratsam, diese auf einen gemeinsamen Speicherplatz zu legen, auf den von allen Knoten des Clusters zugegriffen werden kann.
Für jeden Knoten werden jetzt eigene Zertifikate und private Schlüssel benötigt, basierend auf denjenigen, die im gemeinsamen Verzeichnis liegen. Bei der Ausführung des Befehls wird aufgefordert, ein Passwort einzugeben. Zusätzliche Optionen wie —ip und —dns können zur vollständigen Verifizierung der interagierenden Knoten hinzugefügt werden.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keyAm Ende der Ausführung des Befehls erhalten wir ein Zertifikat und einen privaten Schlüssel im PKCS#12-Format, geschützt durch ein Passwort. Jetzt bleibt nur noch, die generierte Datei p12 in das Konfigurationsverzeichnis zu verschieben:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configLassen Sie uns ein Passwort für das Zertifikat im Format hinzufügen p12 in den Keystore und Truststore auf jeder Node:
[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_passwordIn die bereits bekannte elasticsearch.yml müssen die Zeilen mit den Zertifikatsdaten 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.p12Starten Sie alle Elasticsearch-Nodes und führen Sie aus curl. Wenn alles korrekt ausgeführt wurde, erhalten Sie eine Antwort mit mehreren Nodes:
[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 - node1Es gibt eine weitere Sicherheitsoption — IP-Adressfilterung (verfügbar in Abonnements ab der Gold-Stufe). Damit können Sie IP-Adresslisten erstellen, von denen der Zugriff auf die Nodes erlaubt ist.
Datensicherheit außerhalb des Elasticsearch-Clusters
Außerhalb des Clusters bedeutet die Verbindung von externen Tools: Kibana, Logstash, Beats oder anderen externen Clients.

Um die Unterstützung für https (anstatt http) einzurichten, fügen wir in die elasticsearch.yml neue Zeilen hinzu:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12Da das Zertifikat durch ein Passwort geschützt ist, fügen wir es in den 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_passwordNachdem die Schlüssel hinzugefügt wurden, sind die Elasticsearch-Knoten bereit für die Verbindung über https. Jetzt können sie gestartet werden.
Der nächste Schritt besteht darin, einen Schlüssel für die Verbindung mit Kibana zu erstellen und ihn in die Konfiguration aufzunehmen. Basierend auf dem Zertifikat, das bereits im gemeinsamen Verzeichnis abgelegt ist, generieren wir ein Zertifikat im PEM-Format (PKCS#12 wird derzeit von Kibana, Logstash und Beats nicht unterstützt):
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pemJetzt müssen die erstellten Schlüssel in den Konfigurationsordner von Kibana entpackt werden:
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/configDie Schlüssel sind vorhanden, jetzt müssen wir die Kibana-Konfiguration ändern, damit sie sie verwendet. Im Konfigurationsdatei kibana.yml ändern wir http auf https und fügen die Zeilen mit den SSL-Verbindungseinstellungen hinzu. Die letzten drei Zeilen konfigurieren die sichere Interaktion zwischen dem Benutzerbrowser 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.crtDamit sind die Einstellungen abgeschlossen und der Zugang zu den Daten im Elasticsearch-Cluster ist verschlüsselt.
Wenn Sie Fragen zu den Möglichkeiten von Elastic Stack bei kostenlosen oder kostenpflichtigen Abonnements, Überwachungsaufgaben oder dem Aufbau von SIEM-Systemen haben, hinterlassen Sie bitte eine Anfrage in auf unserer Webseite.
Außerdem finden Sie unsere Artikel über Elastic Stack auf Habr:
Quelle: habr.com
