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:
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.
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.
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“.
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“.
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.
- Fügen Sie hier die Indizes ein, die Sie mit den Beats befüllen möchten. Auch hier können Sie wieder den Platzhalter
- Privileges
write
create_index
manage
manage_ilm
view_index_metadata
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.
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.