L’agente HBase è un coprocessore di master, regioni e region server: HBase lo interroga per ogni operazione, lettura e scrittura, e risponde in base alle policy firmate del servizio dati hbase. La distribuzione lo fornisce come un unico JAR compatibile con Java 8, agents/hbase/grantforge-agent-hbase-<version>.jar, con le dipendenze rilocate al suo interno.
I test di integrazione Testcontainers del repository eseguono il JAR in HBase 2.5.16, 2.6.7 e 3.0.0. Ciò non certifica ogni altra versione. Per il plug-in di servizio vedi Apache HBase.
Funzionamento
- Ogni richiesta viene controllata in ogni ambito che nomina. In HBase un permesso copre tutto ciò che rientra nel suo ambito, quindi l’agente decide una richiesta nel suo namespace, nella sua tabella, nella sua famiglia di colonne e nella sua colonna: un divieto in uno qualsiasi la rifiuta, un permesso in uno qualsiasi la concede.
- I proprietari di un namespace ne hanno le tabelle.
createeadminsu un namespace consentono di crearlo, di crearvi tabelle e di amministrarle, senza una policy per tabella. - Le letture restituiscono ciò che può essere letto. Quando un utente può leggere solo una parte di una tabella, come una famiglia di colonne, un get o uno scan restituisce quelle colonne invece di fallire; un utente che non può leggere nulla della tabella viene rifiutato.
- Gli elenchi omettono ciò che non può essere usato. Elencare namespace e tabelle mostra solo quelli che l’utente può usare, o in cui può usare qualcosa, ed elencare gli snapshot solo quelli delle tabelle che amministra; descrivere un namespace che non può usare viene rifiutato.
- I rifiuti dicono perché. Il client riceve
Permission denied: user bob has no read on table sales:items (no GrantForge policy allows it), oppure la policy che l’ha negato. - Le decisioni vengono conservate e gli accessi raggruppati. Le decisioni dello snapshot corrente vengono conservate, per impostazione predefinita 100.000 per 10 secondi, e un nuovo snapshot riparte da zero. Gli accessi consentiti identici entro una finestra, predefinita 10 secondi, vengono segnalati come un unico evento di accesso che indica quanti sono stati; i rifiuti vengono segnalati uno per uno, subito.
- I server non vengono controllati. I superutenti di HBase, indicati in
hbase.superuser, e il lavoro dei server stessi non vengono controllati né sottoposti ad audit. Le tabelle del namespacehbase, comehbase:meta, sono leggibili da tutti, come serve ai client.
| Operazione | Accesso necessario |
|---|---|
| Get, scan | read sulla tabella, o sulle colonne restituite |
| Put, increment, append, delete di colonne | write su ogni colonna scritta |
| Delete di una famiglia di colonne o di una riga | write su ogni famiglia di colonne, poiché HBase elimina una riga famiglia per famiglia |
| Check-and-mutate | read sulla colonna confrontata, o sulla tabella con un filtro, e write su ciò che viene scritto |
| Creare una tabella | create sul namespace |
| Eliminare, troncare, modificare, abilitare, disabilitare, flush, split, merge, compattare | admin o create sulla tabella |
| Spostare, assegnare, revocare l’assegnazione, mettere offline | admin sulla tabella |
| Creare, ripristinare, eliminare o elencare uno snapshot | admin sulla tabella; la clonazione richiede anche create sul namespace di destinazione |
| Caricamento massivo | create sulla tabella |
| Creare, modificare, eliminare un namespace | admin sul namespace |
| Descrivere un namespace; elencare namespace e tabelle | Qualsiasi accesso a esso o al suo interno |
| Bilanciatore, arresto, quote, peer di replica, gruppi di region server, procedure, dismissione, arresto dei region server, rotazione dei WAL | admin su global |
Distribuzione
-
Aggiungi un servizio dati
hbasee configura le sue policy. Apri Permessi sui dati → Agenti, seleziona il servizio ed emetti un token dell’agente. Viene mostrato una sola volta; salvalo in un file leggibile solo dall’account di HBase. -
Copia il JAR in
libdi ogni master e region server, ad esempio/opt/hbase/lib. -
Aggiungi le impostazioni all’
hbase-site.xmldi ciascuno, sostituendo indirizzo, percorsi e nome dell’istanza di esempio:<property><name>hbase.coprocessor.master.classes</name> <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property> <property><name>hbase.coprocessor.region.classes</name> <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property> <property><name>hbase.coprocessor.regionserver.classes</name> <value>org.devlive.grantforge.hbase.agent.GrantForgeHBaseCoprocessor</value></property> <property><name>grantforge.server.url</name><value>https://grantforge.example.com</value></property> <property><name>grantforge.token.file</name><value>/etc/hbase/grantforge.token</value></property> <property><name>grantforge.instance</name><value>regionserver-1</value></property> <property><name>grantforge.cache.dir</name><value>/var/lib/hbase/grantforge-cache</value></property>La directory della cache deve essere scrivibile dall’account di HBase. Sostituisci l’
AccessControllerdi HBase negli elenchi dei coprocessori invece di caricarli entrambi. -
Riavvia master e region server uno alla volta. Finché l’agente non ha il primo snapshot, le richieste diverse da quelle dei superutenti vengono rifiutate.
-
Migra prima i permessi esistenti: i permessi che l’
AccessControllerdi HBase ha memorizzato inhbase:aclnon si applicano più. Elencali prima conuser_permissione crea le policy corrispondenti.
| Impostazione | Scopo |
|---|---|
grantforge.server.url, grantforge.token.file, grantforge.instance, grantforge.cache.dir |
Obbligatorie: il server GrantForge, il file del token dell’agente, un nome per questo master o region server e una directory scrivibile per lo snapshot firmato e gli eventi accodati |
grantforge.signing.key.file |
File facoltativo che fissa la chiave di firma degli snapshot; copia la chiave pubblica Ed25519 X.509 codificata in Base64 dalla pagina Agenti. Se omesso, la chiave viene ottenuta dal server al primo contatto |
grantforge.connect.timeout.ms, grantforge.read.timeout.ms |
Timeout di connessione e lettura verso GrantForge, predefiniti 5000 / 8000 millisecondi |
grantforge.refresh.interval.ms |
Ogni quanto l’agente chiede nuove policy, predefinito 30000, almeno 1000 millisecondi |
grantforge.audit.batch.size, grantforge.audit.queue.capacity, grantforge.audit.flush.interval.ms, grantforge.audit.spool.limit.bytes |
Eventi di accesso: dimensione del lotto (predefinita 500), dimensione della coda (predefinita 10000), intervallo di invio (predefinito 5000 millisecondi) e limite della coda su disco (predefinito 64 MiB) |
grantforge.audit.fold.window.ms |
Per quanto tempo gli accessi consentiti identici vengono raggruppati in un evento, predefinito 10000, fino a 3600000 millisecondi; 0 li segnala uno per uno |
grantforge.decision.cache.size, grantforge.decision.cache.ttl.ms |
Numero massimo di decisioni conservate, predefinito 100000, fino a 10000000, 0 non ne conserva; e per quanto tempo, predefinito 10000, 1..3600000 millisecondi |
HBase avvia un coprocessore per il master, per il region server e per ogni regione che apre; tutti condividono un solo agente, una cache delle decisioni e il raggruppamento degli eventi.
Utenti, gruppi e ruoli
Le policy nominano il nome breve che HBase assegna all’utente della connessione: il nome utente dell’autenticazione simple, o il nome breve di un principal Kerberos secondo hadoop.security.auth_to_local. I gruppi sono quelli che la mappatura dei gruppi di Hadoop assegna all’utente sul server, insieme ai gruppi in cui GrantForge lo inserisce; i ruoli sono quelli che GrantForge gli assegna.
Decisioni e limiti
- Senza uno snapshot utilizzabile, tutto viene rifiutato tranne le richieste dei superutenti e le letture del namespace
hbase. Un servizio non in uso lascia HBase senza controlli, come senza autorizzatore. - Un token legato a un servizio il cui tipo non è
hbaserifiuta tutto. - I comandi
grant,revokeeuser_permissiondi HBase falliscono con AccessController is not loaded: i permessi sono policy di GrantForge. - Le chiamate agli endpoint dei coprocessori non vengono controllate; carica solo endpoint di cui ti fidi.
- Qui HBase non dà al creatore di una tabella alcun permesso proprio; una policy di namespace, come sopra, dà ai proprietari le loro tabelle.
- HBase registra alcuni rifiuti invece di restituirli, come quello dell’interruttore del bilanciatore: l’interruttore resta com’era, ma il client non viene avvisato.
- Le decisioni vengono conservate per
grantforge.decision.cache.ttl.ms, quindi il periodo di validità di una policy inizia o finisce con un ritardo fino a tale durata. - I permessi a livello di cella e le etichette di visibilità di HBase non sono coperti. Le colonne vengono confrontate come testo UTF-8.
