S výchozí konfigurací Apache HBase může každý číst a zapisovat do všech tabulek dostupných v systému. Pro mnoho podnikových nastavení je tento druh zásad nepřijatelný.
Správci mohou nastavit brány firewall, které rozhodnou, které počítače mohou komunikovat s HBase. Počítače, které mohou projít bránou firewall, však mohou číst ze všech tabulek a zapisovat do nich. Tento druh mechanismu je účinný, ale nedostatečný, protože HBase stále nedokáže rozlišit mezi více uživateli, kteří používají stejné klientské počítače, a stále neexistuje žádná granularita s ohledem na přístup k tabulce, rodině sloupců nebo kvalifikátoru HBase.
V tomto příspěvku probereme, jak se Kerberos používá s Hadoop a HBase k poskytování ověření uživatele a jak HBase implementuje Autorizaci uživatele udělovat uživatelům oprávnění pro konkrétní akce se zadanou sadou dat.
Secure HBase:Authentication &Authorization
Bezpečná HBase má za cíl chránit před sniffery, neověřenými/neoprávněnými uživateli a síťovými útoky. Nechrání před oprávněnými uživateli, kteří omylem vymažou všechna data.
HBase lze nakonfigurovat tak, aby poskytovala ověření uživatele , který zajišťuje, že s HBase mohou komunikovat pouze oprávnění uživatelé. Autorizační systém je implementován na úrovni RPC a je založen na Simple Authentication and Security Layer (SASL), která podporuje (kromě jiných ověřovacích mechanismů) Kerberos. SASL umožňuje autentizaci, vyjednávání šifrování a/nebo ověřování integrity zpráv na základě jednotlivých připojení (vlastnost konfigurace „hbase.rpc.protection“).
Další krok po povolení ověření uživatele je poskytnout správci možnost definovat řadu pravidel autorizace uživatelů, která povolují nebo zakazují konkrétní akce. Autorizační systém, také známý jako Access Controller Coprocessor nebo Access Control List (ACL), je k dispozici od HBase 0.92 (CDH4) výše a poskytuje možnost definovat politiku autorizace (čtení/zápis/vytváření/administrace) s tabulkou/rodinou /qualifier granularity, pro konkrétního uživatele.
Kerberos
Kerberos je síťový ověřovací protokol. Je navržen tak, aby poskytoval silnou autentizaci aplikací klient/server pomocí kryptografie tajného klíče. Protokol Kerberos používá silnou kryptografii (AES, 3DES, …), aby klient mohl prokázat svou identitu serveru (a naopak) přes nezabezpečené síťové připojení. Poté, co klient a server použijí Kerberos k prokázání své identity, mohou také zašifrovat veškerou svou komunikaci, aby zajistili soukromí a integritu dat při své práci.
Protokol výměny lístků
Na vysoké úrovni pro přístup ke službě pomocí Kerberos musí každý klient provést tři kroky:
- Ověření Kerberos:Klient se ověří na ověřovacím serveru Kerberos a obdrží lístek udělování lístků (TGT).
- Autorizace Kerberos:Klient si vyžádá servisní lístek od serveru pro udělování lístků, který vydá lístek a klíč relace, pokud je klientský TGT odeslaný s požadavkem platný.
- Požadavek na službu:Klient používá lístek služby k ověření na serveru, který poskytuje službu, kterou klient používá (např. HDFS, HBase, …)
HBase, HDFS, ZooKeeper SASL
Protože HBase závisí na HDFS a ZooKeeper, zabezpečený HBase spoléhá na zabezpečený HDFS a zabezpečený ZooKeeper. To znamená, že servery HBase musí vytvořit zabezpečenou relaci služby, jak je popsáno výše, aby mohly komunikovat s HDFS a ZooKeeperem.
Všechny soubory zapsané HBase jsou uloženy v HDFS. Stejně jako v souborových systémech Unix je řízení přístupu poskytované systémem HDFS založeno na uživatelích, skupinách a oprávněních. Všechny soubory vytvořené HBase mají jako uživatele „hbase“, ale toto řízení přístupu je založeno na uživatelském jménu poskytnutém systémem a každý, kdo má přístup k počítači, je potenciálně schopen „sudo“ jako uživatel „hbase“. Secure HDFS přidává ověřovací kroky, které zaručují, že uživatel „hbase“ je důvěryhodný.
ZooKeeper má v každém uzlu přístupový seznam (ACL), který umožňuje uživatelům přístup ke čtení/zápisu na základě informací o uživateli podobným způsobem jako HDFS.
HBase ACL
Nyní, když jsou naši uživatelé ověřeni pomocí Kerberos, jsme si jisti, že uživatelské jméno, které jsme obdrželi, je jedním z našich důvěryhodných uživatelů. Někdy to není dostatečná granularita – chceme mít pod kontrolou, že určený uživatel je schopen číst nebo zapisovat tabulku. Za tímto účelem poskytuje HBase mechanismus autorizace, který umožňuje omezený přístup určeným uživatelům.
Chcete-li povolit tuto funkci, musíte povolit koprocesor Access Controller tak, že jej přidáte do souboru hbase-site.xml pod třídami koprocesorů hlavního a regionálního serveru. (Jak nastavit konfiguraci zabezpečení HBase naleznete zde.)
Koprocesor je kód, který běží uvnitř každého HBase Region Server a/nebo Master. Je schopen zachytit většinu operací (put, get, delete, …) a spustit libovolný kód před a/nebo po provedení operace.
Pomocí této schopnosti spustit nějaký kód před každou operací může koprocesor Access Controlleru zkontrolovat uživatelská práva a rozhodnout, zda uživatel může nebo nemůže operaci provést.
Prostředí HBase má několik příkazů, které umožňují správci spravovat uživatelská práva:
grant [table] [family] [qualifier]
revoke [table] [family] [qualifier]
Jak vidíte, správce má možnost omezit přístup uživatelů na základě schématu tabulky:
- Udělte uživateli-W práva pouze ke čtení pro tabulku-X/rodinu-Y (
grant 'User-W', 'R', 'Table-X', 'Family-Y'
) - Udělte uživateli-W úplná práva pro čtení/zápis do kvalifikátoru-Z (
grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z'
)
Správce má také možnost udělovat globální práva, která fungují na úrovni clusteru, jako je vytváření tabulek, vyvažování regionů, vypínání clusteru a tak dále:
- Dejte uživateli-W možnost vytvářet tabulky (
grant 'User-W', 'C'
) - Dejte uživateli User-W možnost spravovat cluster (
grant 'User-W', 'A'
)
Všechna oprávnění jsou uložena v tabulce vytvořené koprocesorem Access Controller s názvem _acl_. Primárním klíčem této tabulky je název tabulky, který zadáte v příkazu grant. Tabulka _acl_ má pouze jednu rodinu sloupců a každý kvalifikátor popisuje podrobnost práv pro konkrétní tabulku/uživatele. Hodnota obsahuje skutečně udělená práva.
Jak vidíte, příkazy prostředí HBase úzce souvisí se způsobem ukládání dat. Příkaz grant přidá nebo aktualizuje jeden řádek a příkaz revoke odebere jeden řádek z tabulky _acl_.
Ovladač přístupu pod kapotou
Jak již bylo zmíněno dříve, koprocesor Access Controller využívá schopnost zachytit každý požadavek uživatele a zkontrolovat , zda má uživatel práva k provádění operací.
Pro každou operaci se musí řadič přístupu dotázat na tabulku _acl_, aby zjistil, zda má uživatel práva k provedení operace.
Tato operace však může mít negativní dopad na výkon. Řešením tohoto problému je použití tabulky _acl_ pro persistenci a ZooKeeper k urychlení vyhledávání práv. Každý regionový server načte tabulku _acl_ do paměti a dostane upozornění na změny od ZkPermissionWatcher. Tímto způsobem má každý regionální server pokaždé aktualizovanou hodnotu a každá kontrola oprávnění se provádí pomocí mapy v paměti.
Cestovní mapa
Zatímco Kerberos je stabilní, dobře otestovaný a osvědčený ověřovací systém, funkce HBase ACL je stále velmi základní a její sémantika se stále vyvíjí. HBASE-6096 je zastřešující JIRA jako reference pro všechna vylepšení, která mají být dodávána ve verzi 2 funkce ACL.
Dalším otevřeným tématem autorizace a řízení přístupu je implementace bezpečnostního systému per-KeyValue (HBASE-6222 ), což umožní mít různé hodnoty ve stejné buňce spojené s bezpečnostní značkou. To by umožnilo zobrazit konkrétní informace na základě oprávnění uživatele.
Závěr
HBase Security přidává dvě další funkce, které vám umožňují chránit vaše data před sniffery nebo jinými síťovými útoky (pomocí Kerberos k ověřování uživatelů a šifrování komunikace mezi službami) a umožňují vám definovat zásady autorizace uživatelů, omezovat operace a omezovat viditelnost dat pro konkrétní uživatelé.
Matteo Bertozzi je softwarový inženýr ve Spotify a konzultant HBase ve společnosti Cloudera.