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

Procedura:abilitare l'autenticazione e l'autorizzazione utente in Apache HBase

Con la configurazione predefinita di Apache HBase, tutti possono leggere e scrivere su tutte le tabelle disponibili nel sistema. Per molte configurazioni aziendali, questo tipo di criterio è inaccettabile.

Gli amministratori possono configurare firewall che decidono quali macchine possono comunicare con HBase. Tuttavia, le macchine che possono superare il firewall possono comunque leggere e scrivere su tutte le tabelle. Questo tipo di meccanismo è efficace ma insufficiente perché HBase non è ancora in grado di distinguere tra più utenti che utilizzano le stesse macchine client e non c'è ancora granularità per quanto riguarda l'accesso a tabelle HBase, famiglie di colonne o qualificatori di colonne.

In questo post, discuteremo di come Kerberos viene utilizzato con Hadoop e HBase per fornire Autenticazione utente , e come HBase implementa Autorizzazione utente per concedere agli utenti autorizzazioni per azioni particolari su un insieme specifico di dati.

HBase sicuro:autenticazione e autorizzazione

Un HBase sicuro mira a proteggere da sniffer, utenti non autenticati/non autorizzati e attacchi basati sulla rete. Non protegge dagli utenti autorizzati che eliminano accidentalmente tutti i dati.

HBase può essere configurato per fornire Autenticazione utente , che garantisce che solo gli utenti autorizzati possano comunicare con HBase. Il sistema di autorizzazione è implementato a livello RPC e si basa sul Simple Authentication and Security Layer (SASL), che supporta (tra gli altri meccanismi di autenticazione) Kerberos. SASL consente l'autenticazione, la negoziazione della crittografia e/o la verifica dell'integrità dei messaggi in base alla connessione (proprietà di configurazione "hbase.rpc.protection").

Il passaggio successivo dopo aver abilitato Autenticazione utente consiste nel fornire a un amministratore la possibilità di definire una serie di regole di autorizzazione utente che consentono o negano determinate azioni. Il sistema di autorizzazione, noto anche come Access Controller Coprocessor o Access Control List (ACL), è disponibile a partire da HBase 0.92 (CDH4) e offre la possibilità di definire criteri di autorizzazione (Lettura/Scrittura/Crea/Ammin), con tabella/famiglia /qualifier granularità, per un utente specificato.

Kerberos

Kerberos è un protocollo di autenticazione in rete. È progettato per fornire un'autenticazione avanzata per le applicazioni client/server utilizzando la crittografia a chiave segreta. Il protocollo Kerberos utilizza una crittografia avanzata (AES, 3DES, ...) in modo che un client possa dimostrare la propria identità a un server (e viceversa) attraverso una connessione di rete non sicura. Dopo che un client e un server hanno utilizzato Kerberos per dimostrare la loro identità, possono anche crittografare tutte le loro comunicazioni per garantire la privacy e l'integrità dei dati durante la loro attività.

Protocollo di scambio biglietti

Ad alto livello, per accedere a un servizio utilizzando Kerberos, ogni client deve seguire tre passaggi:

  • Autenticazione Kerberos:il client si autentica sul server di autenticazione Kerberos e riceve un Ticket Granting Ticket (TGT).
  • Autorizzazione Kerberos:il client richiede un ticket di servizio dal Ticket Granting Server, che emette un ticket e una chiave di sessione se il client TGT inviato con la richiesta è valido.
  • Richiesta di servizio:il client utilizza il ticket di servizio per autenticarsi presso il server che fornisce il servizio utilizzato dal client (ad es. HDFS, HBase, ...)

HBase, HDFS, ZooKeeper SASL

Poiché HBase dipende da HDFS e ZooKeeper, secure HBase si basa su un HDFS sicuro e su ZooKeeper sicuro. Ciò significa che i server HBase devono creare una sessione di servizio sicura, come descritto sopra, per comunicare con HDFS e ZooKeeper.

Tutti i file scritti da HBase sono archiviati in HDFS. Come nei filesystem Unix, il controllo dell'accesso fornito da HDFS si basa su utenti, gruppi e autorizzazioni. Tutti i file creati da HBase hanno “hbase” come utente, ma questo controllo di accesso è basato sul nome utente fornito dal sistema, e tutti coloro che possono accedere alla macchina sono potenzialmente in grado di “sudo” come utente “hbase”. Secure HDFS aggiunge i passaggi di autenticazione che garantiscono che l'utente "hbase" sia affidabile.

ZooKeeper ha un Access Control List (ACL) su ogni znode che consente l'accesso in lettura/scrittura agli utenti in base alle informazioni dell'utente in modo simile a HDFS.

ACL HBase

Ora che i nostri utenti sono autenticati tramite Kerberos, siamo sicuri che il nome utente che abbiamo ricevuto sia uno dei nostri utenti fidati. A volte questa non è abbastanza granularità:vogliamo controllare che un utente specificato sia in grado di leggere o scrivere una tabella. Per fare ciò, HBase fornisce un meccanismo di autorizzazione che consente l'accesso limitato per utenti specifici.

Per abilitare questa funzione, è necessario abilitare il coprocessore del controller di accesso, aggiungendolo a hbase-site.xml nelle classi del coprocessore del server master e della regione. (Vedi come impostare la configurazione di sicurezza HBase qui.)

Un coprocessore è codice che viene eseguito all'interno di ogni server e/o master della regione HBase. È in grado di intercettare la maggior parte delle operazioni (put, get, delete, ...) ed eseguire codice arbitrario prima e/o dopo l'esecuzione dell'operazione.

Utilizzando questa capacità di eseguire del codice prima di ogni operazione, il coprocessore del controller di accesso può verificare i diritti dell'utente e decidere se l'utente può o non può eseguire l'operazione.

La shell HBase ha un paio di comandi che consentono a un amministratore di gestire i diritti utente:

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

Come puoi vedere, un amministratore ha la possibilità di limitare l'accesso degli utenti in base allo schema della tabella:

  • Concedi all'utente-W i diritti di sola lettura per Table-X/Family-Y (grant 'User-W', 'R', 'Table-X', 'Family-Y' )
  • Concedi all'utente-W i diritti di lettura/scrittura completi per Qualifier-Z (grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z' )

Un amministratore ha anche la possibilità di concedere diritti globali, che operano a livello di cluster, come la creazione di tabelle, il bilanciamento delle regioni, l'arresto del cluster e così via:

  • Offri a User-W la possibilità di creare tabelle (grant 'User-W', 'C' )
  • Offri a User-W la possibilità di gestire il cluster (grant 'User-W', 'A' )

Tutti i permessi sono memorizzati in una tabella creata dal coprocessore del controller di accesso, denominata _acl_. La chiave primaria di questa tabella è il nome della tabella specificato nel comando grant. La tabella _acl_ ha solo una famiglia di colonne e ogni qualificatore descrive la granularità dei diritti per una determinata tabella/utente. Il valore contiene i diritti effettivi concessi.

Come puoi vedere, i comandi della shell di HBase sono strettamente correlati al modo in cui i dati vengono archiviati. Il comando grant aggiunge o aggiorna una riga e il comando revoke rimuove una riga dalla tabella _acl_.

Controller di accesso sotto il cofano

Come accennato in precedenza, il coprocessore del Titolare del trattamento si avvale della possibilità di intercettare ogni richiesta dell'utente e verificare se l'utente dispone dei diritti per eseguire le operazioni.

Per ogni operazione, il controller di accesso deve interrogare la tabella _acl_ per verificare se l'utente dispone dei diritti per eseguire l'operazione.

Tuttavia, questa operazione può avere un impatto negativo sulle prestazioni. La soluzione per risolvere questo problema è utilizzare la tabella _acl_ per la persistenza e ZooKeeper per accelerare la ricerca dei diritti. Ogni server regionale carica la tabella _acl_ in memoria e riceve una notifica delle modifiche da ZkPermissionWatcher. In questo modo, ogni server regionale ha il valore aggiornato ogni volta e ogni controllo dei permessi viene eseguito utilizzando una mappa in memoria.

Tabella di marcia

Sebbene Kerberos sia un sistema di autenticazione stabile, ben testato e collaudato, la funzionalità HBase ACL è ancora molto semplice e la sua semantica è ancora in evoluzione. HBASE-6096 è l'ombrello JIRA come riferimento per tutti i miglioramenti da spedire in una v2 della funzione ACL.

Un altro argomento aperto sull'autorizzazione e il controllo dell'accesso è l'implementazione di un sistema di sicurezza per KeyValue (HBASE-6222 ) che darà la possibilità di avere valori diversi sulla stessa cella associata a un tag di sicurezza. Ciò consentirebbe di mostrare una particolare informazione in base alle autorizzazioni dell'utente.

Conclusione

HBase Security aggiunge due funzionalità aggiuntive che ti consentono di proteggere i tuoi dati da sniffer o altri attacchi di rete (utilizzando Kerberos per autenticare gli utenti e crittografare le comunicazioni tra i servizi) e ti consentono di definire criteri di autorizzazione utente, limitare le operazioni e limitare la visibilità dei dati per utenti particolari.

Matteo Bertozzi è Software Engineer presso Spotify e HBase Consultant presso Cloudera.