sql >> Database teknologi >  >> NoSQL >> HBase

Sådan gør du:Aktiver brugergodkendelse og -autorisation i Apache HBase

Med standard Apache HBase-konfigurationen har alle tilladelse til at læse fra og skrive til alle tilgængelige tabeller i systemet. For mange virksomhedsopsætninger er denne form for politik uacceptabel.

Administratorer kan konfigurere firewalls, der bestemmer, hvilke maskiner der må kommunikere med HBase. Maskiner, der kan passere firewallen, har dog stadig tilladelse til at læse fra og skrive til alle tabeller. Denne form for mekanisme er effektiv, men utilstrækkelig, fordi HBase stadig ikke kan skelne mellem flere brugere, der bruger de samme klientmaskiner, og der er stadig ingen granularitet med hensyn til HBase-tabel, kolonnefamilie eller kolonnekvalifikationsadgang.

I dette indlæg vil vi diskutere, hvordan Kerberos bruges med Hadoop og HBase til at give brugergodkendelse , og hvordan HBase implementerer Brugergodkendelse at give brugere tilladelser til bestemte handlinger på et specificeret sæt data.

Sikker HBase:Godkendelse og autorisation

En sikker HBase har til formål at beskytte mod sniffere, uautoriserede/uautoriserede brugere og netværksbaserede angreb. Det beskytter ikke mod autoriserede brugere, der ved et uheld sletter alle data.

HBase kan konfigureres til at give brugergodkendelse , som sikrer, at kun autoriserede brugere kan kommunikere med HBase. Autorisationssystemet er implementeret på RPC niveau og er baseret på Simple Authentication and Security Layer (SASL), som understøtter (blandt andre godkendelsesmekanismer) Kerberos. SASL tillader godkendelse, krypteringsforhandling og/eller verifikation af meddelelsesintegritet pr. forbindelse ("hbase.rpc.protection"-konfigurationsegenskab).

Det næste trin efter aktivering af Brugergodkendelse er at give en administrator mulighed for at definere en række brugerautorisationsregler, der tillader eller afviser bestemte handlinger. Autorisationssystemet, også kendt som Access Controller Coprocessor eller Access Control List (ACL), er tilgængeligt fra HBase 0.92 (CDH4) og fremefter og giver mulighed for at definere autorisationspolitik (læs/skriv/opret/admin) med tabel/familie /qualifier granularitet, for en specificeret bruger.

Kerberos

Kerberos er en netværksprotokol for godkendelsesprotokol. Det er designet til at give stærk autentificering til klient/server-applikationer ved at bruge hemmelig nøglekryptering. Kerberos-protokollen bruger stærk kryptografi (AES, 3DES, …), så en klient kan bevise sin identitet over for en server (og omvendt) på tværs af en usikker netværksforbindelse. Efter at en klient og server har brugt Kerberos til at bevise deres identitet, kan de også kryptere al deres kommunikation for at sikre privatliv og dataintegritet, mens de går i gang med deres virksomhed.

Billetudvekslingsprotokol

På et højt niveau skal hver klient følge tre trin for at få adgang til en tjeneste ved hjælp af Kerberos:

  • Kerberos-godkendelse:Klienten godkender sig selv til Kerberos-godkendelsesserveren og modtager en Ticket Granting Ticket (TGT).
  • Kerberos-autorisation:Klienten anmoder om en servicebillet fra Ticket Granting Server, som udsteder en billet og en sessionsnøgle, hvis klientens TGT, der sendes med anmodningen, er gyldig.
  • Serviceanmodning:Klienten bruger servicebilletten til at godkende sig selv over for den server, der leverer den service, klienten bruger (f.eks. HDFS, HBase, ...)

HBase, HDFS, ZooKeeper SASL

Da HBase afhænger af HDFS og ZooKeeper, er sikker HBase afhængig af en sikker HDFS og en sikker ZooKeeper. Dette betyder, at HBase-serverne skal oprette en sikker servicesession, som beskrevet ovenfor, for at kommunikere med HDFS og ZooKeeper.

Alle filer skrevet af HBase er gemt i HDFS. Som i Unix-filsystemer er adgangskontrollen leveret af HDFS baseret på brugere, grupper og tilladelser. Alle filer, der er oprettet af HBase, har "hbase" som bruger, men denne adgangskontrol er baseret på det brugernavn, som systemet giver, og alle, der kan få adgang til maskinen, er potentielt i stand til at "sudo" som brugeren "hbase". Secure HDFS tilføjer godkendelsestrinene, der garanterer, at "hbase"-brugeren er tillid til.

ZooKeeper har en adgangskontrolliste (ACL) på hver znode, der tillader læse/skriveadgang til brugerne baseret på brugeroplysninger på samme måde som HDFS.

HBase ACL

Nu hvor vores brugere er godkendt via Kerberos, er vi sikre på, at det brugernavn, vi modtog, er en af ​​vores betroede brugere. Nogle gange er dette ikke nok granularitet - vi ønsker at kontrollere, at en specificeret bruger er i stand til at læse eller skrive en tabel. For at gøre det, leverer HBase en autorisationsmekanisme, der tillader begrænset adgang for specificerede brugere.

For at aktivere denne funktion skal du aktivere Access Controller-coprocessoren ved at tilføje den til hbase-site.xml under master- og regionserver-coprocessorklasserne. (Se, hvordan du opsætter HBase-sikkerhedskonfigurationen her.)

En coprocessor er kode, der kører inde i hver HBase Region Server og/eller Master. Den er i stand til at opsnappe de fleste operationer (sætte, hente, slette, …) og køre vilkårlig kode før og/eller efter operationen er udført.

Ved at bruge denne evne til at udføre noget kode før hver handling, kan Access Controller-medprocessoren kontrollere brugerrettighederne og beslutte, om brugeren kan eller ikke kan udføre handlingen.

HBase-skallen har et par kommandoer, der tillader en administrator at administrere brugerrettighederne:

  • tildel [tabel] [familie] [kvalifikation]
  • tilbagekald [tabel] [familie] [kvalifikation]

Som du kan se, har en administrator mulighed for at begrænse brugeradgang baseret på tabelskemaet:

  • Giv kun bruger-W læserettigheder til Table-X/Family-Y (tildel 'User-W', 'R', 'Table-X', 'Family-Y' )
  • Giv User-W de fulde læse-/skriverettigheder til Qualifier-Z (giv 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z' )

En administrator har også mulighed for at tildele globale rettigheder, som fungerer på klyngeniveau, såsom at oprette tabeller, afbalancere områder, lukke klyngen og så videre:

  • Giv User-W muligheden for at oprette tabeller (giv 'User-W', 'C' )
  • Giv User-W muligheden for at administrere klyngen (giv 'User-W', 'A' )

Alle tilladelser er gemt i en tabel oprettet af Access Controller-coprocessoren, kaldet _acl_. Den primære nøgle i denne tabel er tabelnavnet, som du angiver i grant-kommandoen. Tabellen _acl_ har kun én kolonnefamilie, og hver kvalifikation beskriver granulariteten af ​​rettigheder for en bestemt tabel/bruger. Værdien indeholder de faktiske tildelte rettigheder.

Som du kan se, er HBase-shell-kommandoerne tæt forbundet med, hvordan dataene opbevares. Grant-kommandoen tilføjer eller opdaterer én række, og revoke-kommandoen fjerner én række fra _acl_-tabellen.

Adgang Controller under motorhjelmen

Som tidligere nævnt bruger Adgangscontrollerens coprocessor muligheden for at opsnappe hver brugeranmodning og kontrollere om brugeren har rettighederne til at udføre handlingerne.

For hver handling skal adgangscontrolleren forespørge tabellen _acl_ for at se, om brugeren har rettighederne til at udføre handlingen.

Denne operation kan dog have en negativ indvirkning på ydeevnen. Løsningen til at løse dette problem er at bruge tabellen _acl_ for persistens og ZooKeeper til at fremskynde rettighedsopslaget. Hver regionsserver indlæser _acl_-tabellen i hukommelsen og får besked om ændringer af ZkPermissionWatcher. På denne måde har hver regionsserver den opdaterede værdi hver gang, og hver tilladelseskontrol udføres ved hjælp af et kort i hukommelsen.

Køreplan

Selvom Kerberos er et stabilt, gennemtestet og gennemprøvet autentificeringssystem, er HBase ACL funktionen stadig meget grundlæggende, og dens semantik er stadig under udvikling. HBASE-6096 er paraplyen JIRA som reference for alle forbedringer til at sende i en version 2 af ACL-funktionen.

Et andet åbent emne om autorisation og adgangskontrol er implementering af et per-KeyValue-sikkerhedssystem (HBASE-6222 ), der vil give mulighed for at have forskellige værdier på den samme celle forbundet med et sikkerhedsmærke. Det ville gøre det muligt at vise et bestemt stykke information baseret på brugerens tilladelser.

Konklusion

HBase Security tilføjer to ekstra funktioner, der giver dig mulighed for at beskytte dine data mod sniffere eller andre netværksangreb (ved at bruge Kerberos til at godkende brugere og kryptere kommunikation mellem tjenester), og giver dig mulighed for at definere brugerautorisationspolitikker, begrænse operationer og begrænse datasynlighed for bestemte brugere.

Matteo Bertozzi er softwareingeniør hos Spotify og HBase-konsulent hos Cloudera.


  1. Hvordan overvåger man Redis som en kømotor ved hjælp af cli, der ligner beanstalkd?

  2. NodeJS - sikker forbindelse til ekstern redis-server

  3. Hvordan får man vist dokumentfelter i mongo shell?

  4. $unionWith – MongoDBs ækvivalent af UNION ALL