Cassandra JMX-Authentifizierung und -Autorisierung: Benutzer erstellen

⚡ Intelligente Zusammenfassung

Cassandra Die Sicherheit basiert auf interner Authentifizierung, Rollenberechtigungen, Firewall-Regeln und JMX-Zugriffskontrolle. Diese Seite zeigt, wie Sie die einzelnen Ebenen aktivieren, Benutzer anlegen, Berechtigungen erteilen und den Remote-Zugriff auf Nodetools sichern.

  • 🔐 Zwei Schichten: Die Authentifizierung beweist, wer ein Benutzer ist; die Autorisierung entscheidet, was dieser Benutzer tun darf.
  • ⚙️ Aktivieren: Beide sind standardmäßig deaktiviert und werden über die Einstellungen für Authentifizierung und Autorisierung aktiviert.
  • 👤 Standardkonto: Der integrierte Cassandra-Superuser erstellt jedes zweite Konto, ändern Sie daher umgehend dessen Passwort.
  • 🔑 Fördermodell: Berechtigungen wie SELECT, MODIFY und ALTER werden pro Ressource mit GRANT erteilt.
  • 📡 Portsteuerung: Öffnen Sie die Ports 7000, 7001, 7199 und 9042 zwischen den Knoten und halten Sie die JMX-Authentifizierung aufrecht.

Cassandra JMX-Authentifizierung und -Autorisierung

Es gibt zwei Arten von Sicherheit Apache Cassandra und DataStax Enterprise.

  • Interne Authentifizierung
  • Genehmigung

Was ist interne Authentifizierung und Autorisierung?

Die interne Authentifizierung dient im Wesentlichen der Überprüfung einer Benutzerverbindung. Der Benutzer wird mit Benutzername und Passwort authentifiziert. Alle Benutzerkonten werden in der internen Authentifizierung verwaltet. Cassandra im Inneren.

Die interne Autorisierung regelt die Berechtigungen eines Benutzers. Sie legt fest, welche Aktionen ein Benutzer ausführen darf. Beispielsweise können wir Berechtigungen vergeben, etwa: Welcher Benutzer darf nur Daten lesen, welcher Benutzer darf Daten schreiben und welcher Benutzer darf Daten löschen?

Die Authentifizierung kann jedoch auch extern mit Kerberos (Kerberos wird zur sicheren Verwaltung von Anmeldeinformationen verwendet) und LDAP (LDAP wird zur Speicherung autoritativer Informationen über die Konten verwendet, z. B. worauf diese zugreifen dürfen) gesteuert werden.

Bei der externen Authentifizierung handelt es sich um die Authentifizierung, die mit Kerberos und LDAP unterstützt wird. Apache Cassandra unterstützt keine externe Authentifizierung.

Nur DataStax Enterprise unterstützt die externe Authentifizierung mit Kerberos und LDAP, während die interne Authentifizierung sowohl in Apache Cassandra sowie DataStax Enterprise.

Konfigurieren Sie Authentifizierung und Autorisierung

In CassandraStandardmäßig sind Authentifizierungs- und Autorisierungsoptionen deaktiviert. Sie müssen die Datei cassandra.yaml konfigurieren, um Authentifizierung und Autorisierung zu aktivieren.

Öffnen Sie die Datei cassandra.yaml und entfernen Sie die Kommentarzeichen vor den Zeilen, die sich mit der internen Authentifizierung und Autorisierung befassen, wie unten gezeigt.

Die Authentifizierungs- und Autorisierungszeilen in der cassandra.yaml-Datei wurden auskommentiert.

  • In der Datei cassandra.yaml ist der Wert für den Authentifizierungsalgorithmus standardmäßig auf „AllowAllAuthenticator“ gesetzt. Ändern Sie diesen Wert von „AllowAllAuthenticator“ in „com.datastax.bdp.cassandra.auth.PasswordAuthenticator“.
  • In der Datei cassandra.yaml ist der Wert für den Autorisierer standardmäßig auf 'AllowAllAuthorizer' gesetzt. Ändern Sie diesen Wert von 'AllowAllAuthorizer' in 'com.datastax.bdp.cassandra.auth'.CassandraAutorisierer‘.

Diese beiden Klassennamen sind die DataStax Enterprise-Werte. Auf Open-Source-Plattformen Apache Cassandra die gleichen Einstellungen PasswordAuthenticator und CassandraAuthorizerund die Anmeldeinformationen befinden sich dann im system_auth Schlüsselraum, dessen Replikationsfaktor auf über eins erhöht werden sollte.

Protokollierung in

Jetzt ist die Authentifizierung aktiviert. Wenn Sie versuchen, auf einen Schlüsselraum zuzugreifen, Cassandra wird einen Fehler zurückgeben.

Standardmäßig Cassandra Sie erhalten das Superkonto mit dem Benutzernamen „cassandra“ und dem Passwort „cassandra“. Nach dem Einloggen in das Konto „cassandra“ können Sie beliebige Aktionen ausführen.

Sehen wir uns dazu den folgenden Screenshot an, in dem Sie sich nicht anmelden können, wenn Sie nicht die Standardeinstellung verwenden Cassandra "Benutzername und Passwort".

Anmeldung in cqlsh abgelehnt, wenn nicht die Standardanmeldeinformationen verwendet werden

Im zweiten Screenshot können Sie nun sehen, was nach der Verwendung von … passiert ist. Cassandra Mit den Standard-Anmeldedaten können Sie sich anmelden.

Erfolgreiche cqlsh-Anmeldung mit den Standard-Cassandra-Anmeldeinformationen

Sie können mit diesem Konto auch einen weiteren Benutzer anlegen. Es wird empfohlen, das Standardpasswort zu ändern. Hier ist ein Beispiel für die Anmeldung als [Benutzername]. Cassandra Benutzer und Änderung des Standardpassworts.

alter user cassandra with password 'newpassword';

Neuen Benutzer erstellen

Neue Konten können mit dem Konto „cassandra“ erstellt werden.

Zum Anlegen eines neuen Benutzers werden Benutzername und Passwort sowie die Information, ob es sich um einen Superuser handelt oder nicht, angegeben. Nur Superuser können neue Benutzer anlegen.

create user robin with password 'manager' superuser;
create user robin with password 'newhire';

Mit der folgenden Syntax können Sie eine Liste aller Benutzer erhalten.

list users;

Die Ausgabe listet jedes Konto zusammen mit seinem Superuser-Flag auf.

Ausgabe des Befehls „list users“, die Benutzerkonten und Superuser-Flags anzeigt

Benutzer können mit der folgenden Syntax gelöscht werden.

drop user laura;

Genehmigung

Autorisierung ist die Zuweisung von Berechtigungen an Benutzer, wodurch festgelegt wird, welche Aktionen ein bestimmter Benutzer ausführen darf.

Hier ist die generische Syntax zum Zuweisen von Berechtigungen an Benutzer.

GRANT permission ON resource TO user

Es gibt die folgenden Arten von Berechtigungen, die dem Benutzer gewährt werden können.

  1. ALLER
  2. ALTER
  3. AUTORISIEREN
  4. CREATE
  5. DROP
  6. ÄNDERN
  7. SELECT

Hier finden Sie Beispiele für die Zuweisung von Berechtigungen an den Benutzer.

Create user laura with password 'newhire'; 
grant all on dev.emp to laura;
revoke all on dev.emp to laura;
grant select on dev.emp to laura;

Ein neuer Benutzer „Laura“ wird mit dem Passwort „newhire“ erstellt.

Hier ist ein Beispiel, in dem die Benutzerin „laura“ versucht, auf die Tabelle „emp_bonus“ zuzugreifen. Laura hat jedoch nur Zugriff auf die Tabelle „dev.emp“ und keine Berechtigung für die Tabelle „dev.emp_bonus“, weshalb ein Fehler zurückgegeben wurde.

Beim Abfragen der Tabelle emp_bonus durch Laura ohne Berechtigung trat ein Fehler auf.

select* form emp_bonus;

Sie können eine Liste aller dem Benutzer zugewiesenen Berechtigungen abrufen. Hier ist ein Beispiel für den Abruf von Berechtigungsinformationen.

Ausgabe von "Alle Berechtigungen von Laura auflisten"

list all permissions of laura;

Sie können auch alle Berechtigungen für eine Ressource auflisten. Hier ist ein Beispiel für das Abrufen von Berechtigungen für eine Tabelle.

Ausgabe von „Alle Berechtigungen für dev.emp auflisten“

list all permissions on dev.emp;

Firewall konfigurieren

Wenn die Firewall läuft, müssen folgende Ports für die Kommunikation zwischen Knoten geöffnet werden, darunter einige Cassandra Häfen. Wenn Cassandra Ports werden nicht geöffnet, Cassandra Die Knoten fungieren als eigenständige Datenbankserver, anstatt dem Datenbankcluster beizutreten.

Cassandra Client-Ports

Port-Nummer Beschreibung
9042 Cassandra Client-Port
9160 Cassandra Client-Port-Sparsamkeit

Cassandra Internode-Ports

Port-Nummer Beschreibung
7000 Cassandra Internodenclusterkommunikation
7001 Cassandra SSL-Kommunikation zwischen Knotenclustern
7199 Cassandra JMX-Überwachungsport

Öffentliche Häfen

Port-Nummer Beschreibung
22 SSH-Anschluss
8888 OpsCenter-Website. HTTP-Anfrage des Browsers.

Cassandra OpsCenter-Ports

Port-Nummer Beschreibung
61620 OpsCenter-Überwachungsport.
61621 Opscenter-Agent-Port

Aktuelle Treiber verwenden nur Port 9042; Port 9160 dient der älteren Thrift-Schnittstelle und kann auf neuen Clustern geschlossen bleiben.

Aktivieren der JMX-Authentifizierung

Mit den Standardeinstellungen von CassandraJMX ist nur vom lokalen Rechner aus erreichbar. Um remote auf JMX zuzugreifen, ändern Sie die Einstellung LOCAL_JMX in der Datei cassandra-env.sh und aktivieren Sie die Authentifizierung oder SSL.

Stellen Sie sicher, dass Sie die JMX-Authentifizierung aktiviert haben OpsCenter und nodetool sind für die Verwendung der Authentifizierung konfiguriert.

Ablauf

Zum Aktivieren der JMX-Authentifizierung sind die folgenden Schritte erforderlich.

  1. Fügen Sie in der Datei cassandra-env.sh die folgenden Zeilen hinzu oder aktualisieren Sie sie.
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

    Ändern Sie außerdem die Einstellung LOCAL_JMX in cassandra-env.sh.

    LOCAL_JMX=no
  2. Kopieren Sie die Datei jmxremote.password.template von /jdk_install_location/lib/management/ nach /etc/cassandra/ und benennen Sie sie in jmxremote.password um.
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. Ändern Sie den Besitz von jmxremote.password auf den von Ihnen ausgeführten Benutzer Cassandra mit und ändern Sie die Berechtigung auf Nur-Lese-Zustand.
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. Bearbeiten Sie jmxremote.password und fügen Sie den Benutzer und das Passwort für JMX-kompatible Dienstprogramme hinzu:
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. Fügen Sie Cassandra Benutzer mit Lese- und Schreibberechtigung für /jdk_install_location/lib/management/jmxremote.access
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. Wiederaufnahme Cassandra.
  7. Führen Sie nodetool mit dem aus Cassandra Benutzer und Passwort.
    $ nodetool status -u cassandra -pw cassandra

Häufig gestellte Fragen

Beide befinden sich im Keyspace „system_auth“ in den Tabellen „roles“ und „role_permissions“. Da ein Verlust der Replik von „system_auth“ alle Benutzer aussperren kann, sollte der Replikationsfaktor erhöht werden, bevor die Authentifizierung in der Produktionsumgebung aktiviert wird.

CQL-Rollen haben die ältere Benutzersyntax abgelöst. Eine Rolle verfügt über Berechtigungen und kann anderen Rollen zugewiesen werden. Daher ersetzt CREATE ROLE in aktuellen Versionen CREATE USER, wobei die Benutzerbefehle weiterhin als Aliase fungieren.

Nein. Die Authentifizierung dient lediglich dem Identitätsnachweis; Passwörter werden weiterhin unverschlüsselt über das Netzwerk übertragen, sofern die Clientverschlüsselungsoptionen nicht aktiviert sind. Aktivieren Sie TLS separat für den Datenverkehr zwischen Client und Knoten sowie zwischen Knoten.

Erstellen Sie einen dedizierten Superuser und ändern Sie anschließend das integrierte Cassandra-Passwort oder löschen Sie das Konto. Die Beibehaltung des dokumentierten Cassandra/Cassandra-Paares ist die häufigste Vorgehensweise. Cassandra Fehlkonfiguration.

Berechtigungen werden zwischengespeichert. Eine Änderung wird erst nach Ablauf des Gültigkeitszeitraums der Berechtigungen wirksam. Verkürzen Sie daher diese Einstellung in der cassandra.yaml-Datei oder starten Sie den Knoten neu, wenn Sie eine Berechtigung erteilen oder widerrufen.

Unauthentifiziertes JMX auf Port 7199 ermöglicht die vollständige Kontrolle über den Knoten, einschließlich der Außerbetriebnahme. Cassandra Daher wird es lokal gebunden, und der Fernzugriff sollte nur mit einer Passwortdatei oder SSL-Verschlüsselung geöffnet werden.

Maschinelle Lernmodelle erstellen Profile typischer Abfrageformen, Anmeldezeiten und Quelladressen pro Rolle und kennzeichnen Abweichungen, beispielsweise wenn ein Anwendungskonto auf einen nicht zugehörigen Schlüsselbereich zugreift. Dadurch werden statische Regeln zum Missbrauch von Anmeldeinformationen unentdeckt.

Copilot erstellt schnell CREATE ROLE- und GRANT-Anweisungen aus einem Kommentar, neigt aber dazu, weit gefasste Berechtigungen vorzuschlagen. RevÜberprüfen Sie jede generierte Berechtigung nach dem Prinzip der minimalen Berechtigungen, bevor Sie sie auf einem Live-System ausführen. Gruppe.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: