HBase
 sql >> Datenbank >  >> NoSQL >> HBase

Anleitung:Aktivieren Sie die Benutzerauthentifizierung und -autorisierung in Apache HBase

Mit der standardmäßigen Apache HBase-Konfiguration darf jeder aus allen im System verfügbaren Tabellen lesen und schreiben. Für viele Unternehmenskonfigurationen ist diese Art von Richtlinie nicht akzeptabel.

Administratoren können Firewalls einrichten, die entscheiden, welche Computer mit HBase kommunizieren dürfen. Computer, die die Firewall passieren können, dürfen jedoch weiterhin aus allen Tabellen lesen und in sie schreiben. Diese Art von Mechanismus ist effektiv, aber unzureichend, da HBase immer noch nicht zwischen mehreren Benutzern unterscheiden kann, die dieselben Client-Computer verwenden, und es immer noch keine Granularität in Bezug auf den Zugriff auf HBase-Tabellen, Spaltenfamilien oder Spaltenqualifizierer gibt.

In diesem Beitrag besprechen wir, wie Kerberos mit Hadoop und HBase verwendet wird, um Benutzerauthentifizierung bereitzustellen und wie HBase die Benutzerautorisierung implementiert um Benutzern Berechtigungen für bestimmte Aktionen für einen bestimmten Datensatz zu erteilen.

Sicheres HBase:Authentifizierung und Autorisierung

Eine sichere HBase soll vor Sniffer, nicht authentifizierten/nicht autorisierten Benutzern und netzwerkbasierten Angriffen schützen. Es schützt nicht vor autorisierten Benutzern, die versehentlich alle Daten löschen.

HBase kann so konfiguriert werden, dass es Benutzerauthentifizierung bereitstellt , wodurch sichergestellt wird, dass nur autorisierte Benutzer mit HBase kommunizieren können. Das Autorisierungssystem wird auf RPC-Ebene implementiert und basiert auf der einfachen Authentifizierungs- und Sicherheitsschicht (SASL), die (neben anderen Authentifizierungsmechanismen) Kerberos unterstützt. SASL ermöglicht Authentifizierung, Verschlüsselungsaushandlung und/oder Nachrichtenintegritätsprüfung auf Verbindungsbasis (Konfigurationseigenschaft „hbase.rpc.protection“).

Der nächste Schritt nach dem Aktivieren der Nutzerauthentifizierung besteht darin, einem Administrator die Möglichkeit zu geben, eine Reihe von Benutzerautorisierungsregeln zu definieren, die bestimmte Aktionen zulassen oder verweigern. Das Autorisierungssystem, auch bekannt als Access Controller Coprocessor oder Access Control List (ACL), ist ab HBase 0.92 (CDH4) verfügbar und bietet die Möglichkeit, Autorisierungsrichtlinien (Lesen/Schreiben/Erstellen/Admin) mit Tabelle/Familie zu definieren /qualifier-Granularität für einen bestimmten Benutzer.

Kerberos

Kerberos ist ein Netzwerkauthentifizierungsprotokoll. Es wurde entwickelt, um eine starke Authentifizierung für Client/Server-Anwendungen durch die Verwendung von Kryptografie mit geheimen Schlüsseln bereitzustellen. Das Kerberos-Protokoll verwendet eine starke Kryptografie (AES, 3DES usw.), damit ein Client seine Identität gegenüber einem Server (und umgekehrt) über eine unsichere Netzwerkverbindung nachweisen kann. Nachdem ein Client und ein Server Kerberos verwendet haben, um ihre Identität nachzuweisen, können sie auch ihre gesamte Kommunikation verschlüsseln, um den Datenschutz und die Datenintegrität zu gewährleisten, während sie ihren Geschäften nachgehen.

Ticketaustauschprotokoll

Auf hoher Ebene muss jeder Client drei Schritte ausführen, um mit Kerberos auf einen Dienst zuzugreifen:

  • Kerberos-Authentifizierung:Der Client authentifiziert sich beim Kerberos-Authentifizierungsserver und erhält ein Ticket Granting Ticket (TGT).
  • Kerberos-Autorisierung:Der Client fordert ein Dienstticket vom Ticket Granting Server an, der ein Ticket und einen Sitzungsschlüssel ausstellt, wenn das mit der Anfrage gesendete Client-TGT gültig ist.
  • Dienstanforderung:Der Client verwendet das Dienstticket, um sich gegenüber dem Server zu authentifizieren, der den Dienst bereitstellt, den der Client verwendet (z. B. HDFS, HBase, …)

HBase, HDFS, ZooKeeper SASL

Da HBase von HDFS und ZooKeeper abhängt, ist sicheres HBase auf ein sicheres HDFS und einen sicheren ZooKeeper angewiesen. Das bedeutet, dass die HBase-Server wie oben beschrieben eine sichere Dienstsitzung erstellen müssen, um mit HDFS und ZooKeeper zu kommunizieren.

Alle von HBase geschriebenen Dateien werden in HDFS gespeichert. Wie in Unix-Dateisystemen basiert die von HDFS bereitgestellte Zugriffskontrolle auf Benutzern, Gruppen und Berechtigungen. Alle von HBase erstellten Dateien haben „hbase“ als Benutzer, aber diese Zugriffskontrolle basiert auf dem vom System bereitgestellten Benutzernamen, und jeder, der auf den Computer zugreifen kann, kann möglicherweise als Benutzer „hbase“ „sudo“ verwenden. Secure HDFS fügt die Authentifizierungsschritte hinzu, die garantieren, dass dem „hbase“-Benutzer vertraut wird.

ZooKeeper verfügt auf jedem Znode über eine Zugriffskontrollliste (ACL), die den Benutzern basierend auf Benutzerinformationen Lese-/Schreibzugriff ermöglicht, ähnlich wie bei HDFS.

HBase-ACL

Jetzt, da unsere Benutzer über Kerberos authentifiziert werden, sind wir sicher, dass der Benutzername, den wir erhalten haben, einer unserer vertrauenswürdigen Benutzer ist. Manchmal reicht die Granularität nicht aus – wir möchten steuern, dass ein bestimmter Benutzer eine Tabelle lesen oder schreiben kann. Zu diesem Zweck stellt HBase einen Autorisierungsmechanismus bereit, der bestimmten Benutzern eingeschränkten Zugriff gewährt.

Um diese Funktion zu aktivieren, müssen Sie den Access Controller-Coprozessor aktivieren, indem Sie ihn zu hbase-site.xml unter den Master- und Regionsserver-Coprozessorklassen hinzufügen. (Hier erfahren Sie, wie Sie die HBase-Sicherheitskonfiguration einrichten.)

Ein Coprozessor ist Code, der in jedem HBase-Regionsserver und/oder Master ausgeführt wird. Es ist in der Lage, die meisten Operationen abzufangen (put, get, delete, …) und beliebigen Code vor und/oder nach der Ausführung der Operation auszuführen.

Mit dieser Fähigkeit, vor jeder Operation Code auszuführen, kann der Access Controller-Coprozessor die Benutzerrechte prüfen und entscheiden, ob der Benutzer die Operation ausführen kann oder nicht.

Die HBase-Shell verfügt über einige Befehle, mit denen ein Administrator die Benutzerrechte verwalten kann:

  • grant [table] [family] [qualifier]
  • revoke [table] [family] [qualifier]

Wie Sie sehen, hat ein Administrator die Möglichkeit, den Benutzerzugriff basierend auf dem Tabellenschema einzuschränken:

  • Geben Sie Benutzer-W nur ​​Leserechte für Tabelle-X/Familie-Y (grant 'User-W', 'R', 'Table-X', 'Family-Y' )
  • Geben Sie Benutzer-W die vollen Lese-/Schreibrechte für Qualifizierer-Z (grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z' )

Ein Administrator hat auch die Möglichkeit, globale Rechte zu erteilen, die auf Clusterebene funktionieren, z. B. Tabellen erstellen, Regionen ausgleichen, Cluster herunterfahren und so weiter:

  • Geben Sie Benutzer-W die Möglichkeit, Tabellen zu erstellen (grant 'User-W', 'C' )
  • Geben Sie Benutzer-W die Möglichkeit, den Cluster zu verwalten (grant 'User-W', 'A' )

Alle Berechtigungen werden in einer vom Access Controller-Coprozessor erstellten Tabelle namens _acl_ gespeichert. Der Primärschlüssel dieser Tabelle ist der Tabellenname, den Sie im Grant-Befehl angeben. Die Tabelle _acl_ hat nur eine Spaltenfamilie und jeder Qualifizierer beschreibt die Granularität der Rechte für eine bestimmte Tabelle/einen bestimmten Benutzer. Der Wert enthält die tatsächlich gewährten Rechte.

Wie Sie sehen können, hängen die HBase-Shell-Befehle eng damit zusammen, wie die Daten gespeichert werden. Der Grant-Befehl fügt eine Zeile hinzu oder aktualisiert sie, und der Revoke-Befehl entfernt eine Zeile aus der _acl_-Tabelle.

Access Controller unter der Haube

Wie bereits erwähnt, nutzt der Access Controller-Coprozessor die Fähigkeit, jede Benutzeranfrage abzufangen und zu prüfen, ob der Benutzer die Rechte zum Ausführen der Vorgänge hat.

Für jeden Vorgang muss der Access Controller die _acl_-Tabelle abfragen, um festzustellen, ob der Benutzer die Rechte zum Ausführen des Vorgangs hat.

Dieser Vorgang kann sich jedoch negativ auf die Leistung auswirken. Die Lösung zur Behebung dieses Problems besteht darin, die _acl_-Tabelle für Persistenz und ZooKeeper zu verwenden, um die Rechtesuche zu beschleunigen. Jeder Regionsserver lädt die _acl_-Tabelle in den Arbeitsspeicher und wird vom ZkPermissionWatcher über Änderungen benachrichtigt. Auf diese Weise verfügt jeder Regionsserver jedes Mal über den aktualisierten Wert, und jede Berechtigungsprüfung wird mithilfe einer speicherinternen Zuordnung durchgeführt.

Fahrplan

Während Kerberos ein stabiles, gut getestetes und bewährtes Authentifizierungssystem ist, ist die HBase ACL-Funktion immer noch sehr einfach und ihre Semantik entwickelt sich noch weiter. HBASE-6096 ist das übergeordnete JIRA als Referenz für alle Verbesserungen, die in v2 der ACL-Funktion ausgeliefert werden.

Ein weiteres offenes Thema zur Autorisierung und Zugriffskontrolle ist die Implementierung eines Per-KeyValue-Sicherheitssystems (HBASE-6222 ), die die Möglichkeit bieten, unterschiedliche Werte in derselben Zelle zu haben, die einem Sicherheitstag zugeordnet ist. Dies würde es ermöglichen, eine bestimmte Information basierend auf den Berechtigungen des Benutzers anzuzeigen.

Schlussfolgerung

HBase Security fügt zwei zusätzliche Funktionen hinzu, mit denen Sie Ihre Daten vor Sniffer oder anderen Netzwerkangriffen schützen können (indem Sie Kerberos verwenden, um Benutzer zu authentifizieren und die Kommunikation zwischen Diensten zu verschlüsseln), und mit denen Sie Benutzerautorisierungsrichtlinien definieren, Vorgänge einschränken und die Datensichtbarkeit einschränken können bestimmte Benutzer.

Matteo Bertozzi ist Software Engineer bei Spotify und HBase Consultant bei Cloudera.