sql >> Databasteknik >  >> NoSQL >> HBase

Så här gör du:Aktivera användarautentisering och auktorisering i Apache HBase

Med Apache HBases standardkonfiguration tillåts alla läsa från och skriva till alla tabeller som är tillgängliga i systemet. För många företagsinställningar är den här typen av policy oacceptabel.

Administratörer kan konfigurera brandväggar som bestämmer vilka maskiner som får kommunicera med HBase. Datorer som kan passera brandväggen får dock fortfarande läsa från och skriva till alla tabeller. Den här typen av mekanism är effektiv men otillräcklig eftersom HBase fortfarande inte kan skilja mellan flera användare som använder samma klientdatorer, och det finns fortfarande ingen granularitet med avseende på HBase-tabell, kolumnfamilj eller kolumnkvalificerande åtkomst.

I det här inlägget kommer vi att diskutera hur Kerberos används med Hadoop och HBase för att tillhandahålla användarautentisering , och hur HBase implementerar användarauktorisering för att ge användarna behörigheter för särskilda åtgärder på en specificerad uppsättning data.

Secure HBase:Autentisering och auktorisering

En säker HBase syftar till att skydda mot sniffers, oautentiserade/obehöriga användare och nätverksbaserade attacker. Det skyddar inte mot auktoriserade användare som av misstag raderar all data.

HBase kan konfigureras för att tillhandahålla användarautentisering , vilket säkerställer att endast auktoriserade användare kan kommunicera med HBase. Auktoriseringssystemet implementeras på RPC nivå och är baserat på SASL (Simple Authentication and Security Layer), som stöder (bland andra autentiseringsmekanismer) Kerberos. SASL tillåter autentisering, krypteringsförhandling och/eller verifiering av meddelandeintegritet per anslutning (konfigurationsegenskapen "hbase.rpc.protection").

Nästa steg efter att ha aktiverat användarautentisering är att ge en administratör möjligheten att definiera en serie regler för användarauktorisering som tillåter eller nekar särskilda åtgärder. Auktoriseringssystemet, även känt som Access Controller Coprocessor eller Access Control List (ACL), är tillgängligt från HBase 0.92 (CDH4) och framåt och ger möjlighet att definiera auktoriseringspolicy (läs/skriv/skapa/admin), med tabell/familj /qualifier granularity, för en specificerad användare.

Kerberos

Kerberos är ett nätverksanslutet autentiseringsprotokoll. Den är utformad för att ge stark autentisering för klient/serverapplikationer genom att använda hemlig nyckelkryptering. Kerberos-protokollet använder stark kryptografi (AES, 3DES, …) så att en klient kan bevisa sin identitet för en server (och vice versa) över en osäker nätverksanslutning. Efter att en klient och server har använt Kerberos för att bevisa sina identiteter kan de också kryptera all kommunikation för att säkerställa integritet och dataintegritet när de arbetar med sin verksamhet.

Biljettbytesprotokoll

På en hög nivå, för att få tillgång till en tjänst med Kerberos, måste varje klient följa tre steg:

  • Kerberos-autentisering:Klienten autentiserar sig till Kerberos-autentiseringsservern och får en Ticket Granting Ticket (TGT).
  • Kerberos-auktorisering:Klienten begär en servicebiljett från Ticket Granting Server, som utfärdar en biljett och en sessionsnyckel om klientens TGT som skickades med begäran är giltig.
  • Servicebegäran:Klienten använder tjänstebiljetten för att autentisera sig till servern som tillhandahåller tjänsten som klienten använder (t.ex. HDFS, HBase, ...)

HBase, HDFS, ZooKeeper SASL

Eftersom HBase är beroende av HDFS och ZooKeeper, förlitar säker HBase sig på en säker HDFS och en säker ZooKeeper. Detta innebär att HBase-servrarna måste skapa en säker tjänstesession, enligt beskrivningen ovan, för att kommunicera med HDFS och ZooKeeper.

Alla filer skrivna av HBase lagras i HDFS. Precis som i Unix-filsystem är åtkomstkontrollen som tillhandahålls av HDFS baserad på användare, grupper och behörigheter. Alla filer som skapats av HBase har "hbase" som användare, men denna åtkomstkontroll är baserad på användarnamnet som tillhandahålls av systemet, och alla som kan komma åt maskinen kan potentiellt "sudo" som användaren "hbase". Secure HDFS lägger till autentiseringsstegen som garanterar att "hbase"-användaren är betrodd.

ZooKeeper har en åtkomstkontrolllista (ACL) på varje znod som tillåter läs-/skrivåtkomst till användarna baserat på användarinformation på liknande sätt som HDFS.

HBase ACL

Nu när våra användare är autentiserade via Kerberos är vi säkra på att användarnamnet som vi fick är en av våra betrodda användare. Ibland är detta inte tillräckligt granularitet – vi vill kontrollera att en angiven användare kan läsa eller skriva en tabell. För att göra det tillhandahåller HBase en auktoriseringsmekanism som tillåter begränsad åtkomst för specifika användare.

För att aktivera den här funktionen måste du aktivera Access Controller-samprocessorn genom att lägga till den i hbase-site.xml under master- och regionserversamprocessorklasserna. (Se hur du ställer in HBase-säkerhetskonfigurationen här.)

En samprocessor är kod som körs inuti varje HBase Region Server och/eller Master. Den kan fånga upp de flesta operationer (sätta, hämta, ta bort, …) och köra godtycklig kod före och/eller efter att operationen utförs.

Genom att använda denna förmåga att exekvera en del kod före varje operation kan åtkomstkontrollerns medprocessor kontrollera användarrättigheterna och bestämma om användaren kan eller inte kan utföra operationen.

HBase-skalet har ett par kommandon som låter en administratör hantera användarrättigheterna:

  • bevilja [tabell] [familj] [kvalificerare]
  • återkalla [tabell] [familj] [kvalificerare]

Som du ser har en administratör möjlighet att begränsa användaråtkomst baserat på tabellschemat:

  • Ge User-W endast läsrättigheter till Table-X/Family-Y (ge 'User-W', 'R', 'Table-X', 'Family-Y' )
  • Ge User-W de fullständiga läs-/skrivrättigheterna till Qualifier-Z (bevilja 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z' )

En administratör har också möjlighet att ge globala rättigheter, som fungerar på klusternivå, som att skapa tabeller, balansera regioner, stänga av klustret och så vidare:

  • Ge User-W möjligheten att skapa tabeller (ge 'User-W', 'C' )
  • Ge User-W möjligheten att hantera klustret (ge 'User-W', 'A' )

Alla behörigheter lagras i en tabell skapad av Access Controller-medprocessorn, kallad _acl_. Den primära nyckeln för den här tabellen är tabellnamnet som du anger i grant-kommandot. Tabellen _acl_ har bara en kolumnfamilj och varje kvalificering beskriver granulariteten av rättigheter för en viss tabell/användare. Värdet innehåller de faktiska rättigheter som beviljats.

Som du kan se är HBase-skalkommandona nära relaterade till hur data lagras. Grant-kommandot lägger till eller uppdaterar en rad, och kommandot återkalla tar bort en rad från tabellen _acl_.

Åtkomstkontroll under huven

Som nämnts tidigare använder åtkomstkontrollantens medprocessor förmågan att fånga upp varje användarförfrågan och kontrollera om användaren har rättigheterna att utföra operationerna.

För varje operation måste åtkomstkontrollanten fråga tabellen _acl_ för att se om användaren har rättigheterna att utföra operationen.

Denna operation kan dock ha en negativ inverkan på prestandan. Lösningen för att åtgärda det här problemet är att använda tabellen _acl_ för persistens och ZooKeeper för att snabba upp rättighetssökningen. Varje regionserver laddar _acl_-tabellen i minnet och får meddelande om ändringar av ZkPermissionWatcher. På detta sätt har varje regionserver det uppdaterade värdet varje gång och varje behörighetskontroll utförs med hjälp av en minneskarta.

Färdkarta

Även om Kerberos är ett stabilt, väl testat och beprövat autentiseringssystem, är HBase ACL funktionen fortfarande väldigt grundläggande och semantiken utvecklas fortfarande. HBASE-6096 är paraplyet JIRA som referens för alla förbättringar som ska levereras i en v2 av ACL-funktionen.

Ett annat öppet ämne om auktorisering och åtkomstkontroll är implementering av ett säkerhetssystem per nyckelvärde (HBASE-6222 ) som ger möjlighet att ha olika värden på samma cell kopplade till en säkerhetstagg. Det skulle göra det möjligt att visa en viss information baserat på användarens behörigheter.

Slutsats

HBase Security lägger till två extra funktioner som gör att du kan skydda din data mot sniffers eller andra nätverksattacker (genom att använda Kerberos för att autentisera användare och kryptera kommunikation mellan tjänster), och låter dig definiera policyer för användarauktorisering, begränsa operationer och begränsa datasynlighet för särskilda användare.

Matteo Bertozzi är mjukvaruingenjör på Spotify och HBase-konsult på Cloudera.


  1. Hur du säkrar dina Open Source-databaser med ClusterControl

  2. Range Querying in Redis - Spring Data Redis

  3. Är det OK att fråga en MongoDB flera gånger per begäran?

  4. MongoDB :aggregeringsramverk :$matchning mellan fält