NiFi-Authentifizierung

NiFi REST API und NiFi CLI: zertifikatbasierte Authentifizierung

Arsal Jalib

Arsal Jalib

... hat seinen Master in Informatik an der TU Berlin mit seiner Abschlussarbeit zum Thema „Deep Learning“ abgeschlossen. Er war mehrere Jahre als Softwarequalitätsbeauftragter und Softwareentwickler tätig. Derzeit interessiert er sich eher für Such- und Analysethemen und liebt es, neue Dinge zu lernen. Lieblingsdateiformat: .txt und .json

Sicheres Verwalten von und Verbinden mit Apache NiFi

Apache NiFi ist eines der beliebtesten ETL-Tools (Extract Transform Load), das den Datenfluss zwischen Softwaresystemen automatisiert sowie Daten verarbeitet und verteilt. Es basiert auf einer Software, die von der National Security Agency (NSA) unter dem Namen „NiagaraFile“ entwickelt und später quelloffen gemacht wurde. Wichtige Hinweise und Tipps, wie Sie Apache NiFi sicher verwenden, erhalten Sie in diesem Beitrag.

Inhaltsverzeichnis:

  1. Sicherheit von Anfang an
  2. Authentifizierung einrichten: eine Anleitung
  3. NiFi REST API mit cURL verwenden
  4. NiFi CLI über HTTPS verwenden
  5. Zusammenfassung

Sicherheit von Anfang an

Seine Popularität verdankt NiFi der einfachen Einrichtung, der Integration mit anderen Tools, dem Datenfluss-Programmierkonzept und der Cloud-Bereitschaft. Entscheidend sind aber auch die Sicherheitsfunktionen, die Apache NiFi von Anfang an unterstützt hat und die immer weiter verbessert wurden. Es bietet standardmäßig HTTPS-Zugriff und die Authentifizierung für Einzelbenutzer.

Wie die Apache NiFi-Benutzeroberfläche erfordern auch die REST-API und die NiFi-CLI (Command Line Interface) eine Authentifizierung und Autorisierung. Damit sind die wichtigsten Möglichkeiten zum Verbinden mit und Verwalten von Apache NiFi gesichert.

Authentifizierung einrichten: eine Anleitung

Zum Einrichten der Authentifizierung für die NiFi REST API und das NiFi CLI gehen wir davon aus, dass Sie NiFi bereits heruntergeladen und extrahiert haben. Falls nicht, können Sie es hier herunterladen: https://nifi.apache.org/download.html. Bitte beachten Sie auch, dass sich diese Anleitung an Personen richtet, die bereits mit den Grundfunktionalitäten von Apache NiFi vertraut sind.

  1. Zum Generieren von Zertifikaten und Truststores ist das NiFi-Toolkit erforderlich. Laden Sie die neueste Version des NiFi-Toolkits herunter (https://nifi.apache.org/download.html) und extrahieren Sie es in ein Verzeichnis Ihrer Wahl.
  2. Wechseln Sie in das Toolkit-Verzeichnis und führen Sie den folgenden Befehl mit den entsprechenden IP-Adressen und Passwort aus:
bin/tls-toolkit.sh standalone -n 'localhost' -C 'CN=nifi,OU=NIFI' --subjectAlternativeNames '<YOUR_IP_ADDRESS_1>,<YOUR_IP_ADDRESS_2>,127.0.0.1' -P <yourTrustStorePassword>

Wenn dies erfolgreich ist, sehen Sie die letzte Zeile in der Ausgabe als „tls-toolkit standalone completed successfully“.

letzte Zeile Toolkit-Verzeichnis
  1. Die Keystore-, Truststore- und NiFi-Eigenschaften werden im Ordner „localhost“ generiert. Wechseln Sie in diesen Ordner und öffnen Sie die Datei nifi.properties, um diese zu Aktualisieren.
    Setzen Sie die Eigenschaft nifi.web.https.host auf Ihren Hostnamen. Andernfalls müssen Sie den Host beim Start von NiFi per Befehl angeben.
  2. Kopieren Sie Keystore, Truststore und die Datei nifi.properties in den Konfigurationsordner „conf“ der NiFi-Installation.
  3. Gehen Sie nun zum NiFi-Installationsordner und starten Sie NiFi mit dem folgenden Befehl:
bin/nifi.sh start
  1. Während des Starts werden der Benutzername und das Passwort für die Authentifizierung generiert und können mit dem folgenden Befehl in den Protokollen angezeigt werden
grep Generated logs/*

Bitte denken Sie daran, diese zu speichern, da sie in den nächsten Schritten benötigt werden.

  1. Lassen Sie uns einen einfachen Prozessor mit der Apache NiFi-Benutzeroberfläche erstellen, damit wir mit den API- und CLI-Tools damit herumspielen können. Öffnen Sie die Benutzeroberfläche, fügen Sie einen neuen Prozessor Ihrer Wahl hinzu, zum Beispiel „GenerateFlowFile“, und konfigurieren Sie ihn so, dass er mit der Relation „success“ automatisch beendet wird, und konvertieren Sie diesen Prozessor dann in eine „ProcessorGroup“.

NiFi REST API mit cURL verwenden

Um NiFi über die API zu verwalten, verwenden wir einfaches cURL, aber jedes API-Testtool kann verwendet werden.

  • In Schritt 2 wurde ein Zertifikat mit dem Namen „nifi-cert.pem“ generiert. Wir verwenden dieses Zertifikat zusammen mit dem in Schritt 6 erworbenen Benutzernamen und Passwort, um ein Authentifizierungstoken zu generieren
curl -XPOST https://<your hostname>:<your port>/nifi-api/access/token 
            --cacert nifi-cert.pem 
            -H "Accept-Encoding: gzip, deflate, br" 
            -H "Content-Type: application/x-www-form-urlencoded; char    set=UTF-8" 
            -H "Accept: */*" 
            -data "username=<your username>&password=<your password>" 
            -compressed

Das generierte Authentifizierungstoken sollte folgendermaßen aussehen:

Authentifizierungstoken

Dieses Authentifizierungstoken kann nun in weiteren API-Anfragen verwendet werden, um Änderungen in Apache NiFi vorzunehmen.

  • Wir können zum Beispiel einen Prozessor mit dem folgenden Befehl starten:
curl -i -H 'Content-Type: application/json' --cacert <path to your pem-file>/nifi-cert.pem -H "Authorization: Bearer <your token>" -XPUT "https://<your hostname>:<your port>/nifi-api/processors/<your processor id>/run-status" -d '
{
  "state": "RUNNING",
  "revision": {
  "version": <your version>
  }
}'

Man kann auch sehen, ob es funktioniert hat, indem man den Prozessor in der NiFi-Benutzeroberfläche aktualisiert.

Die API-Dokumentation für NiFi finden Sie unter https://nifi.apache.org/docs/nifi-docs/rest-api/index.html.

NiFi CLI über HTTPS verwenden

DiApache NiFi CLI befindet sich im bin-Ordner des NiFi-Toolkits, das wir in Schritt 1 installiert haben. Um NiFi CLI mit einer sicheren Verbindung über HTTPs zu verwenden, müssen Sie die Truststore- und Keystore-Informationen in einer Datei hinzufügen und diese Datei zusammen mit dem Befehl als Parameter angeben.

  • Legen Sie die folgenden Schlüssel und Werte fest und speichern Sie die Datei mit der Erweiterung „.properties“, zum Beispiel „cli.properties“. Die Werte dieser Parameter finden Sie auch in den nifi.properties-Dateien.
Werte NiFi Properties
  • Verwenden Sie nun zum Beispiel den folgenden Befehl, um die „Prozessgruppen“ in Ihrem NiFi aufzulisten:
./cli.sh nifi pg-list -u https://<your hostname>:<port> -p <path to file>
Auflistung Prozessgruppen

Es gibt eine alternative und nicht so sichere Möglichkeit, eine Verbindung zur CLI herzustellen, und zwar durch Zulassen einer anonymen Authentifizierung, aber das wird nicht empfohlen.

Zusammenfassung

Apache NiFi bietet CLI und REST API als Tools zur Verwaltung Ihrer Flows und ermöglicht Ihnen auch, diese sicher zu verwenden. Die Einrichtung der Authentifizierung kann anfangs schwierig sein, und NiFi kann mit seltsamen Fehlern reagieren, wenn nicht die richtige Syntax verwendet wird. Das macht es oft schwierig, den Fehler zu verstehen. Ein Tipp: Versuchen Sie, die Befehle einzugeben, anstatt sie im Terminal zu kopieren und einzufügen; und wenn Sie beim Lesen einer Datei oder eines Ordners zu irgendeinem Zeitpunkt einen Berechtigungsfehler erhalten, verwenden Sie „sudo“ oder aktualisieren Sie die Berechtigung für diesen Ordner.

Möchten Sie die Grundlagen von Apache NiFi lernen? Oder benötigen Sie Unterstützung bei fortgeschrittenen Themen?