Met de standaard Apache HBase-configuratie mag iedereen lezen van en schrijven naar alle tabellen die beschikbaar zijn in het systeem. Voor veel zakelijke instellingen is dit soort beleid onaanvaardbaar.
Beheerders kunnen firewalls instellen die bepalen welke machines mogen communiceren met HBase. Machines die de firewall kunnen passeren, mogen echter nog steeds lezen van en schrijven naar alle tabellen. Dit soort mechanisme is effectief maar onvoldoende omdat HBase nog steeds geen onderscheid kan maken tussen meerdere gebruikers die dezelfde clientcomputers gebruiken, en er is nog steeds geen granulariteit met betrekking tot HBase-tabel, kolomfamilie of toegang tot kolomkwalificatie.
In dit bericht bespreken we hoe Kerberos wordt gebruikt met Hadoop en HBase om Gebruikersauthenticatie te bieden , en hoe HBase Gebruikersautorisatie implementeert om gebruikers machtigingen te verlenen voor bepaalde acties op een gespecificeerde set gegevens.
Beveiligde HBase:authenticatie en autorisatie
Een veilige HBase is bedoeld om te beschermen tegen sniffers, niet-geverifieerde/ongeautoriseerde gebruikers en netwerkgebaseerde aanvallen. Het biedt geen bescherming tegen geautoriseerde gebruikers die per ongeluk alle gegevens verwijderen.
HBase kan worden geconfigureerd om Gebruikersauthenticatie . te bieden , die ervoor zorgt dat alleen geautoriseerde gebruikers met HBase kunnen communiceren. Het autorisatiesysteem is geïmplementeerd op RPC-niveau en is gebaseerd op de Simple Authentication and Security Layer (SASL), die (naast andere authenticatiemechanismen) Kerberos ondersteunt. SASL maakt authenticatie, encryptie-onderhandeling en/of berichtintegriteitsverificatie per verbinding mogelijk (configuratie-eigenschap "hbase.rpc.protection").
De volgende stap na het inschakelen van Gebruikersauthenticatie is om een beheerder de mogelijkheid te geven een reeks gebruikersautorisatieregels te definiëren die bepaalde acties toestaan of weigeren. Het autorisatiesysteem, ook bekend als de Access Controller Coprocessor of Access Control List (ACL), is beschikbaar vanaf HBase 0.92 (CDH4) en biedt de mogelijkheid om autorisatiebeleid te definiëren (lezen/schrijven/aanmaken/beheerder), met tabel/familie /qualifier granulariteit, voor een gespecificeerde gebruiker.
Kerberos
Kerberos is een netwerkverificatieprotocol. Het is ontworpen om sterke authenticatie te bieden voor client/server-applicaties door gebruik te maken van cryptografie met geheime sleutels. Het Kerberos-protocol maakt gebruik van sterke cryptografie (AES, 3DES, …) zodat een client zijn identiteit kan bewijzen aan een server (en vice versa) via een onveilige netwerkverbinding. Nadat een client en server Kerberos hebben gebruikt om hun identiteit te bewijzen, kunnen ze ook al hun communicatie versleutelen om de privacy en gegevensintegriteit te waarborgen terwijl ze bezig zijn met hun bedrijf.
Ticketuitwisselingsprotocol
Op een hoog niveau, om toegang te krijgen tot een service met Kerberos, moet elke klant drie stappen volgen:
- Kerberos-authenticatie:de client authenticeert zichzelf bij de Kerberos-authenticatieserver en ontvangt een Ticket Granting Ticket (TGT).
- Kerberos-autorisatie:de klant vraagt een serviceticket aan bij de Ticket Granting Server, die een ticket en een sessiesleutel uitgeeft als de klant-TGT die met het verzoek is verzonden, geldig is.
- Serviceverzoek:de client gebruikt het serviceticket om zichzelf te authenticeren bij de server die de service levert die de client gebruikt (bijv. HDFS, HBase, ...)
HBase, HDFS, ZooKeeper SASL
Aangezien HBase afhankelijk is van HDFS en ZooKeeper, is veilige HBase afhankelijk van een veilige HDFS en een veilige ZooKeeper. Dit betekent dat de HBase-servers een beveiligde servicesessie moeten maken, zoals hierboven beschreven, om te communiceren met HDFS en ZooKeeper.
Alle bestanden die door HBase zijn geschreven, worden opgeslagen in HDFS. Net als in Unix-bestandssystemen is de toegangscontrole van HDFS gebaseerd op gebruikers, groepen en machtigingen. Alle bestanden die door HBase zijn gemaakt, hebben "hbase" als gebruiker, maar deze toegangscontrole is gebaseerd op de gebruikersnaam die door het systeem wordt verstrekt, en iedereen die toegang heeft tot de machine, kan mogelijk "sudo" als de gebruiker "hbase". Secure HDFS voegt de authenticatiestappen toe die garanderen dat de “hbase”-gebruiker wordt vertrouwd.
ZooKeeper heeft een Access Control List (ACL) op elke znode die lees-/schrijftoegang geeft aan de gebruikers op basis van gebruikersinformatie op een vergelijkbare manier als HDFS.
HBase ACL
Nu onze gebruikers zijn geverifieerd via Kerberos, zijn we er zeker van dat de gebruikersnaam die we hebben ontvangen een van onze vertrouwde gebruikers is. Soms is dit niet voldoende gedetailleerd - we willen controleren of een bepaalde gebruiker een tabel kan lezen of schrijven. Om dat te doen, biedt HBase een autorisatiemechanisme dat beperkte toegang voor bepaalde gebruikers mogelijk maakt.
Om deze functie in te schakelen, moet u de toegangscontroller-coprocessor inschakelen door deze toe te voegen aan hbase-site.xml onder de master- en regioserver-coprocessorklassen. (Zie hier hoe u de HBase-beveiligingsconfiguratie instelt.)
Een coprocessor is code die binnen elke HBase Region Server en/of Master wordt uitgevoerd. Het kan de meeste bewerkingen onderscheppen (put, get, delete, ...) en willekeurige code uitvoeren voor en/of nadat de bewerking is uitgevoerd.
Met behulp van deze mogelijkheid om voor elke bewerking wat code uit te voeren, kan de coprocessor van de toegangscontroller de gebruikersrechten controleren en beslissen of de gebruiker de bewerking wel of niet kan uitvoeren.
De HBase-shell heeft een aantal opdrachten waarmee een beheerder de gebruikersrechten kan beheren:
grant [table] [family] [qualifier]
revoke [table] [family] [qualifier]
Zoals u ziet, heeft een beheerder de mogelijkheid om gebruikerstoegang te beperken op basis van het tabelschema:
- Geef User-W alleen leesrechten voor Table-X/Family-Y (
grant 'User-W', 'R', 'Table-X', 'Family-Y'
) - Geef gebruiker-W de volledige lees-/schrijfrechten aan Qualifier-Z (
grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z'
)
Een beheerder heeft ook de mogelijkheid om algemene rechten toe te kennen, die op clusterniveau werken, zoals het maken van tabellen, het in evenwicht brengen van regio's, het afsluiten van het cluster, enzovoort:
- Geef User-W de mogelijkheid om tabellen te maken (
grant 'User-W', 'C'
) - Geef User-W de mogelijkheid om het cluster te beheren (
grant 'User-W', 'A'
)
Alle machtigingen worden opgeslagen in een tabel die is gemaakt door de coprocessor van de toegangscontroller, genaamd _acl_. De primaire sleutel van deze tabel is de tabelnaam die u opgeeft in de opdracht Grant. De _acl_-tabel heeft slechts één kolomfamilie en elke kwalificatie beschrijft de granulariteit van de rechten voor een bepaalde tabel/gebruiker. De waarde bevat de daadwerkelijk verleende rechten.
Zoals u kunt zien, zijn de HBase-shell-opdrachten nauw gerelateerd aan hoe de gegevens worden opgeslagen. De opdracht grant voegt één rij toe of werkt deze bij, en de opdracht revoke verwijdert één rij uit de tabel _acl_.
Toegangscontroller onder de motorkap
Zoals eerder vermeld, gebruikt de coprocessor van de toegangscontroller de mogelijkheid om elk gebruikersverzoek te onderscheppen en te controleren of de gebruiker de rechten heeft om de bewerkingen uit te voeren.
Voor elke bewerking moet de toegangscontroller de _acl_-tabel doorzoeken om te zien of de gebruiker de rechten heeft om de bewerking uit te voeren.
Deze bewerking kan echter een negatieve invloed hebben op de prestaties. De oplossing om dit probleem op te lossen, is door de tabel _acl_ voor persistentie en ZooKeeper te gebruiken om het opzoeken van rechten te versnellen. Elke regioserver laadt de _acl_-tabel in het geheugen en ontvangt een melding van wijzigingen door de ZkPermissionWatcher. Op deze manier heeft elke regioserver elke keer de bijgewerkte waarde en wordt elke toestemmingscontrole uitgevoerd met behulp van een kaart in het geheugen.
Routekaart
Hoewel Kerberos een stabiel, goed getest en bewezen authenticatiesysteem is, is de HBase ACL-functie nog steeds erg eenvoudig en evolueert de semantiek ervan nog steeds. HBASE-6096 is de overkoepelende JIRA als referentie voor alle verbeteringen die worden geleverd in een v2 van de ACL-functie.
Een ander open onderwerp over autorisatie en toegangscontrole is het implementeren van een per-KeyValue-beveiligingssysteem (HBASE-6222 ) die de mogelijkheid geeft om verschillende waarden in dezelfde cel te hebben die aan een beveiligingstag zijn gekoppeld. Dat zou het mogelijk maken om een bepaald stuk informatie te tonen op basis van de gebruikersrechten.
Conclusie
HBase Security voegt twee extra functies toe waarmee u uw gegevens kunt beschermen tegen sniffers of andere netwerkaanvallen (door Kerberos te gebruiken om gebruikers te verifiëren en communicatie tussen services te versleutelen), en waarmee u gebruikersautorisatiebeleid kunt definiëren, bewerkingen kunt beperken en de zichtbaarheid van gegevens kunt beperken voor bepaalde gebruikers.
Matteo Bertozzi is een Software Engineer bij Spotify en een HBase Consultant bij Cloudera.