Elastic unter Verschluss: Aktivieren Sie die Sicherheitsoptionen für den Elasticsearch-Cluster für den internen und externen Zugriff.

Elastic unter Verschluss: Aktivieren Sie die Sicherheitsoptionen für den Elasticsearch-Cluster für den internen und externen Zugriff.

Elastic Stack — ein bekanntes Werkzeug auf dem Markt der SIEM-Systeme (übrigens nicht nur dafür). Es kann viele verschiedene Daten sammeln, sowohl sensible als auch weniger sensible. Es wäre nicht ganz richtig, wenn der Zugriff auf die Elemente des Elastic Stack nicht gesichert wäre. Standardmäßig funktionieren alle vorkonfigurierten Elemente von Elastic (Elasticsearch, Logstash, Kibana und Beats-Collector) über offene Protokolle. Und in Kibana ist die Authentifizierung standardmäßig deaktiviert. All diese Interaktionen können abgesichert werden, und in diesem Artikel erklären wir, wie das geht. Zur besseren Übersicht haben wir die Erzählung in 3 sinnvolle Abschnitte unterteilt:

  • Rollenbasierendes Zugriffsmodell für Daten
  • Datensicherheit innerhalb des Elasticsearch-Clusters
  • Datensicherheit außerhalb des Elasticsearch-Clusters

Details weiter unten.

Rollenbasierendes Zugriffsmodell für Daten

Wenn Elasticsearch installiert wird, ohne dass es konfiguriert wird, ist der Zugang zu allen Indizes für alle Interessierten offen. Nun, oder für diejenigen, die curl verwenden können. Um dies zu vermeiden, gibt es in Elasticsearch ein rollenbasiertes Modell, das ab dem Basis-Abonnement verfügbar ist (es ist kostenlos). Es sieht schematisch ungefähr so aus:

Elastic unter Verschluss: Aktivieren Sie die Sicherheitsoptionen für den Elasticsearch-Cluster für den internen und externen Zugriff.

Was auf dem Bild gezeigt wird

  • Benutzer — das sind alle, die sich mit Anmeldedaten authentifizieren können.
  • Rolle — das ist eine Gruppe von Rechten.
  • Rechte — das ist eine Gruppe von Privilegien.
  • Privilegien — das sind Berechtigungen zum Schreiben, Lesen, Löschen usw. (Vollständige Liste der Privilegien)
  • Ressourcen — das sind Indizes, Dokumente, Felder, Benutzer und andere Subjekte des Speichers (das rollenbasierte Modell ist für einige Ressourcen nur in kostenpflichtigen Abonnements verfügbar).

In Elasticsearch gibt es standardmäßig vorkonfigurierte Benutzer, die an vorkonfigurierte Rollengebunden sind. Nachdem die Sicherheitseinstellungen aktiviert wurden, können sie sofort verwendet werden.

Um die Sicherheit in den Elasticsearch-Einstellungen zu aktivieren, muss in die Konfigurationsdatei (standardmäßig ist das elasticsearch/config/elasticsearch.yml) eine neue Zeile hinzugefügt werden:

xpack.security.enabled: true

Nach der Änderung der Konfigurationsdatei starten wir Elasticsearch neu, damit die Änderungen wirksam werden. Der nächste Schritt besteht darin, den vorkonfigurierten Benutzern Passwörter zuzuweisen. Lassen Sie uns dies interaktiv mit dem folgenden Befehl tun:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Initiierung des Setups der Passwörter für die reservierten Benutzer elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Sie werden aufgefordert, die Passwörter einzugeben, während der Prozess fortschreitet.
Bitte bestätigen Sie, dass Sie mit dem Fortfahren fortfahren möchten [y/N] y


Geben Sie das Passwort für [elastic] ein:
Geben Sie das Passwort für [elastic] erneut ein:
Geben Sie das Passwort für [apm_system] ein:
Geben Sie das Passwort für [apm_system] erneut ein:
Geben Sie das Passwort für [kibana] ein:
Geben Sie das Passwort für [kibana] erneut ein:
Geben Sie das Passwort für [logstash_system] ein:
Geben Sie das Passwort für [logstash_system] erneut ein:
Geben Sie das Passwort für [beats_system] ein:
Geben Sie das Passwort für [beats_system] erneut ein:
Geben Sie das Passwort für [remote_monitoring_user] ein:
Geben Sie das Passwort für [remote_monitoring_user] erneut ein:
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:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/_nodes?pretty'
Geben Sie das Host-Passwort für den Benutzer 'elastic' ein:
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Ein Schulterklopfen schadet nicht – die Einstellungen auf der Elasticsearch-Seite sind vorgenommen. Jetzt ist es an der Zeit, Kibana einzurichten. Wenn Sie es jetzt starten, kommen Fehler, daher ist es wichtig, ein Schlüsselspeicher zu erstellen. Das geschieht in zwei Befehlen (Benutzer kibana und Passwort, das in Schritt zur Erstellung der Passwörter in Elasticsearch eingegeben wurde):

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

Wenn alles richtig ist, wird Kibana nach Benutzername und Passwort fragen. Im Basic-Abonnement ist ein rollenbasiertes Modell für interne Benutzer verfügbar. Ab Gold können externe Authentifizierungssysteme angeschlossen werden – LDAP, PKI, Active Directory und Systeme für Single Sign-On.

Elastic unter Verschluss: Aktivieren Sie die Sicherheitsoptionen für den Elasticsearch-Cluster für den internen und externen Zugriff.

Der Zugriff auf Objekte innerhalb von Elasticsearch kann ebenfalls eingeschränkt werden. Um dasselbe für Dokumente oder Felder zu erreichen, ist jedoch ein kostenpflichtiges Abonnement erforderlich (dieser Luxus beginnt ab der Platinum-Ebene). Diese Einstellungen sind im Kibana-Interface oder über die Sicherheits-API. Man kann über das bereits bekannte Menü Dev Tools überprüfen:

Rolle erstellen

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 Sicherheitseinstellungen innerhalb des Clusters wichtig. Für eine sichere Interaktion zwischen den Knoten verwendet Elasticsearch das TLS-Protokoll. Um eine sichere Interaktion zwischen ihnen einzurichten, ist ein Zertifikat erforderlich. Zertifikat und privaten Schlüssel im PEM-Format generieren:

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

Nach der Ausführung des obigen Befehls wird im Verzeichnis /../elasticsearch ein Archiv erscheinen elastic-stack-ca.zip. Darin finden sich das Zertifikat und der private Schlüssel mit den Erweiterungen crt und key entsprechend. Es ist ratsam, sie auf einen gemeinsam genutzten Speicherort abzulegen, auf den von allen Knoten des Clusters zugegriffen werden kann.

Für jeden Knoten werden nun eigene Zertifikate und private Schlüssel benötigt, die auf den in dem gemeinsam genutzten Verzeichnis basieren. Bei der Ausführung des Befehls wird nach einem Passwort gefragt. Man kann zusätzliche Optionen -ip und -dns für die vollständige Überprüfung der interagierenden Knoten hinzufügen.

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

Nach der Ausführung des Befehls erhalten wir ein Zertifikat und einen privaten Schlüssel im PKCS#12-Format, die durch ein Passwort geschützt sind. Jetzt bleibt nur noch, die generierte Datei p12 in das Konfigurationsverzeichnis zu verschieben:

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

Fügen wir das Passwort zum Zertifikat im Format hinzu p12 in den 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

Im bereits bekannten elasticsearch.yml müssen wir die Zeilen mit den Informationen über das Zertifikat hinzufügen:

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

Starten Sie alle Elasticsearch-Knoten und führen Sie curlaus. Wenn alles korrekt ausgeführt 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 noch eine Sicherheitsoption — die Filterung von IP-Adressen (verfügbar in Abonnements ab der Gold-Stufe). Sie ermöglicht das Erstellen von IP-Whitelist, von denen der Zugriff auf die Knoten erlaubt ist.

Datensicherheit außerhalb des Elasticsearch-Clusters

Außerhalb des Clusters bedeutet die Verbindung zu externen Werkzeugen: Kibana, Logstash, Beats oder anderen externen Clients.

Elastic unter Verschluss: Aktivieren Sie die Sicherheitsoptionen für den Elasticsearch-Cluster für den internen und externen Zugriff.

Um die Unterstützung für https (anstatt http) einzurichten, fügen wir dem 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.p12

Da 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_password

Nachdem die Schlüssel hinzugefügt wurden, sind die Elasticsearch-Knoten bereit, sich über https zu verbinden. Sie können jetzt gestartet werden.

Der nächste Schritt besteht darin, einen Schlüssel für die Verbindung von Kibana zu erstellen und ihn in die Konfiguration aufzunehmen. Basierend auf dem bereits im gemeinsamen Verzeichnis abgelegten Zertifikat werden wir ein Zertifikat im PEM-Format generieren (PKCS#12 Kibana, Logstash und Beats werden derzeit 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

Jetzt müssen die erstellten Schlüssel in den Kibana-Konfigurationsordner entpackt werden:

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

Die Schlüssel sind vorhanden, jetzt müssen wir die Kibana-Konfiguration ändern, damit sie diese verwendet. Im Konfigurationsdatei kibana.yml ändern wir http in 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.crt

Somit sind die Einstellungen vorgenommen worden und der Zugriff auf die Daten im Elasticsearch-Cluster ist verschlüsselt.

Wenn Sie Fragen zu den Funktionen des Elastic Stack in kostenlosen oder kostenpflichtigen Abonnements haben, zu Monitoring-Aufgaben oder zur Erstellung eines SIEM-Systems, hinterlassen Sie eine Anfrage in dem Kontaktformular auf unserer Website.

Außerdem unsere Artikel über Elastic Stack bei Habr:

Wir betrachten Machine Learning im Elastic Stack (auch bekannt als Elasticsearch, auch bekannt als ELK)

Sizing von Elasticsearch

Quelle: habr.com

60GB SSD 8Gb DDR4