Der Elastic Stack in der Praxis, Teil 4: Benutzerverwaltung

Nachdem unser Elastic Stack nun Daten empfängt und diese nach einer gewissen Zeit auch wieder löscht, kümmern wir uns jetzt um die Benutzerverwaltung.

Die Benutzerverwaltung ist eine der optionalen Sicherheitsfunktionen des Elastic Stacks. Darüber hinaus lässt sich auch die Kommunikation zwischen Elasticsearch und den Datenquellen, zwischen Elasticsearch und Kibana sowie zwischen mehreren Elasticsearch-Nodes verschlüsseln. Im Produktiveinsatz ist es dringend zu empfehlen, beide Features zu konfigurieren und zu aktivieren. Dieser Artikel beschränkt sich zunächst auf die Benutzerverwaltung, die den Zugriff auf die in Elasticsearch gespeicherten Daten reguliert. Die Übertragung erfolgt aber weiterhin unverschlüsselt.

Bis vor kurzer Zeit war dieses Feature nur in der kostenpflichtigen Variante des Elastic Stacks oder über ein Plug-in realisierbar. Seit Mai 2019 stehen grundlegende Sicherheitsfunktionen auch in der kostenlosen Version zur Verfügung. Eine Anbindung an LDAP-Verzeichnisse, Audit-Logs und einige weitere Features bleiben weiter der kostenpflichtigen Version vorbehalten.

1. Konfiguration von Elasticsearch und Kibana

Stoppen Sie Elasticsearch und Kibana:

Windows-Service (per Admin-PowerShell)

Stop-Service elasticsearch
Stop-Service kibana

Linux

sudo systemctl stop elasticsearch kibana

Öffnen Sie die Elasticsearch-Konfigurationsdatei elasticsearch.yml (der vollständige Dateipfad hängt von Ihrer Umgebung ab; weitere Informationen finden Sie in den Abschnitten 1.1 und 1.2 in Teil 1 der Reihe).

Fügen Sie am Ende der Datei die folgenden Zeilen ein:

xpack.security.enabled: true
discovery.type: single-node

Damit aktivieren Sie die Benutzerverwaltung und legen fest, dass es bislang nur einen einzigen Elasticsearch-Host gibt, sodass Sie vorerst keine Einstellungen zur verschlüsselten Kommunikation meherer Elasticsearch-Instanzen untereinander vornehmen müssen. Entfernen Sie außerdem die beiden folgenden Zeilen:

discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["node-1"]

Der Elastic Stack benötigt einige interne Benutzer und legt einen Standard-Benutzerzugang namens elastic an. Für diese müssen Passwörter eingestellt werden. Elasticsearch liefert ein Werkzeug mit, das diese Passwörter automatisch generiert.

Starten Sie Elasticsearch:

Windows-Service (per Admin-PowerShell)

Start-Service elasticsearch

Linux

sudo systemctl start elasticsearch

Nun muss das Programm elasticsearch-setup-passwords ausgeführt werden. Unter Windows befindet sich dieses im Verzeichnis bin der Elasticsearch-Installation, unter Linux finden Sie es in der Regel unter /usr/share/elasticsearch/bin.

Starten Sie ein Terminal (Linux) oder eine Powershell (Windows). Wechseln Sie mittels cd in das entsprechende bin-Verzeichnis und führen Sie anschließend den folgenden Befehl aus:

Windows

.\elasticsearch-setup-passwords.exe auto

Linux

./elasticsearch-setup-passwords auto

Das Programm fragt Sie zunächst, ob Sie damit einverstanden sind, dass die Passwörter automatisch generiert und anschließend ausgegeben werden. Bestätigen Sie diese Abfrage mit y. Alternativ können Sie die Passwörter auch selbst bestimmen. Ersetzen Sie dazu den Parameter auto beim Programmaufruf durch interactive.

$ elasticsearch-setup-passwords auto
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = BxVWXck5A78myrpwqiNb

Changed password for user kibana
PASSWORD kibana = uZVB9wLOH5OgDDJBFrJl

Changed password for user logstash_system
PASSWORD logstash_system = V8kGGmRw1WYy6PfvleJx

Changed password for user beats_system
PASSWORD beats_system = ScF9ncYaJ2IC6eAh13h3

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 1IOElU2xnQ0IuFUV57HM

Changed password for user elastic
PASSWORD elastic = 6xVF0bW338SJW5zggnlL

Notieren Sie sich die ausgegebenen Passwörter oder speichern Sie sie ab.

Öffnen Sie nun die Konfigurationsdatei von Kibana, kibana.yml (siehe Teil 1, Abschnitt 1.1 und 1.2). Suchen Sie den auskommentierten Block

#elasticsearch.username: "kibana"
#elasticsearch.password: "pass"

und ersetzen Sie ihn durch

elasticsearch.username: "kibana"
elasticsearch.password: "KIBANA-PASSWORT"

Ersetzen Sie dabei KIBANA-PASSWORT durch das eben generierte Passwort für den internen Benutzer kibana.

Starten Sie Kibana:

Windows-Service (per Admin-PowerShell)

Start-Service kibana

Linux

sudo systemctl start kibana

Wenn Sie nun die Weboberfläche von Kibana aufrufen, werden Sie von einer Login-Maske begrüßt:

Die Kibana-Login-Maske

Sie können sich hier mit dem Standard-Administrator elastic anmelden, dessen Passwort ebenfalls durch elasticsearch-setup-passwords generiert wurde.

2. Erstellen neuer Benutzer und Rollen

2.1 Erstellen von Kibana-Benutzern

Sie können für jede Person, die auf Kibana zugreifen soll, ein eigenes Benutzerkonto erstellen. Klicken Sie dazu in der Seitenleiste auf „Management“ (Zahnrad) und anschließend im Bereich „Security“ auf „Users“. Sie sehen eine Liste der (bisher ausschließlich internen) Benutzer. Klicken Sie auf „Create user“, um einen neuen Benutzer zu erstellen.

Benutzerverwaltung in Kibana

Füllen Sie das folgende Formular aus. Weisen Sie dem Benutzer insbesondere die Rolle kibana_user zu. Diese erlaubt es dem Benutzer, sich in Kibana anzumelden. Klicken Sie anschließend auf „Create user“, um den Benutzer zu erstellen.

Erstellen eines neuen Benutzers für Kibana

Der neue Benutzer kann sich nun in Kibana anmelden, wird aber noch keine Daten sehen können. Dazu müssen Sie ihm zunächst Zugriff auf einen oder mehrere Indizes gewähren.

Legen Sie dazu eine neue Rolle an, die diese Berechtigung abbildet. Klicken Sie dazu in der Seitenleiste auf „Roles“ und anschließend auf „Create role“.

Rollenverwaltung in Kibana

Geben Sie der Rolle einen (sprechenden) Namen, z. B. my_reader_role. Listen Sie im Feld „Indices“ alle Indizes auf, auf die der Benutzer Zugriff haben soll. Sie können das Zeichen * als Platzhalter verwenden. Bei der Eingabe sollten Ihnen die Indizes vorgeschlagen werden, die in Kibana als Index Patterns konfiguriert sind.

Tragen Sie unter „Privileges“ die folgenden Berechtigungen ein:

  • read
  • view_index_metadata

Speichern Sie die Rolle mit Klick auf „Create role“.

Erstellen einer neuen Rolle für Kibana-Benutzer

Gehen Sie nun zurück in den Bereich „Users“. Klicken Sie auf den Benutzernamen des eben angelegten neuen Benutzers, um ihn zu bearbeiten. Fügen Sie die eben erstellte Rolle my_reader_role im Feld „Roles“ hinzu und speichern Sie die Änderungen („Update user“).

2.2 Erstellen von Beats-Benutzern

Der Zugriff auf Elasticsearch wird jetzt nicht nur für das Abrufen von Daten limitiert, sondern auch für die Zulieferer – und damit auch für alle Beats. Auch für diese müssen Sie eine Rolle und Benutzerkonten erstellen.

Erstellen Sie zuerst die Rolle: klicken Sie im Bereich „Roles“ auf „Create role“. Geben Sie der Rolle bspw. den Namen beat_writer. Setzen Sie außerdem die folgenden Einstellungen im Bereich „Elasticsearch“:

  • Cluster privileges
    • manage_index_templates
    • manage_ingest_pipelines
    • monitor
    • manage_ilm
  • Indices
    • Fügen Sie hier die Indizes ein, die Sie mit den Beats befüllen möchten. Auch hier können Sie wieder den Platzhalter * verwenden.
  • Privileges
    • write
    • create_index
    • manage
    • manage_ilm
    • view_index_metadata
Erstellen einer neuen Rolle für Beats

Erstellen Sie nun im Bereich „Users“ einen neuen Benutzer für jeden Beat, den Sie verwenden. Weisen Sie diesem die neue Rolle beat_writer zu.

Erstellen eines Benutzers für Filebeat

Konfigurieren Sie zum Schluss die Beats entsprechend. Öffnen Sie dazu die Konfigurationsdatei, bspw. filebeat.yml, und fügen Sie den Benutzernamen und das Passwort im Bereich output.elasticsearch ein. Das könnte etwa so aussehen:

output.elasticsearch:
  hosts: ["localhost:9200"]
  username: "filebeat" 
  password: "FILEBEAT-PASSWORT"

Starten Sie den Beat anschließend neu.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.