Questa è una domanda a più parti, che tutti in realtà tornano alla domanda principale:
(Versione corrente, distro di ramo principale di vaniglia - anche se sono aperto a parlare di altri). Dopo molte ricerche e ricerche, non ho trovato un sacco di cose ...
Il mio scenario è un fornitore di servizi, che ospita ed elabora grandi quantità di dati da diversi grandi clienti aziendali (multi-tenancy). Questi clienti non accedono direttamente a Hadoop, ma solo attraverso l'applicazione SaaS. Tuttavia, questi clienti sono spesso concorrenti diretti, e spesso piuttosto paranoici (giustificatamente, dal momento che ognuno sarebbe probabilmente contento di qualche spionaggio aziendale contro gli altri ...).
La mia vecchia reazione, istintiva, è quella di distribuire istanze individuali e isolate per ogni cliente. Tuttavia, questo non è pratico, né consente di sfruttare i vantaggi e le capacità di Hadoop.
Inoltre, trovo difficile credere che con tutti i grandi utenti di Hadoop, non ci siano buone soluzioni per questi problemi ...
In particolare, sto esaminando questi problemi:
- Limitare l'accesso agli utenti specifici in uso da ciascuna applicazione (utente dell'applicazione per cliente)
- Codifica
- Isolamento tra i clienti, ovvero non consente a un cliente di visualizzarne un altro.
- Suggerimenti generali
Sono riuscito a trovare alcune indicazioni, ma non sono stato in grado di verificare che queste siano buone indicazioni, o se ci sono soluzioni migliori.
- Autorizzazione di livello di servizio
- Isolamento di rete / sistema, per impedire a chiunque tranne l'applicazione di accedere direttamente
- Permessi file / cartelle, per utente dell'applicazione (cioè cliente).
Problemi che ho riscontrato con questo approccio:
- Le autorizzazioni vengono applicate solo al NameNode; accesso diretto a DataNode fornirebbe comunque accesso.
- L'autenticazione è un po '"incerta", almeno fino a quando non aggiungono il supporto Kerberos (dopo di ciò, dovremo vedere la reimplementazione ...)
- Mi sembra che questo non offra abbastanza isolamento tra i clienti.
- HDFS Federation / Namespace
Questo potrebbe essere in grado di fornire un migliore isolamento dei privilegi, per non parlare dei server separati e della larghezza di banda allocata per cliente (per evitare di provare a fare un altro tramite il singolo punto di errore NameNode). Ma non ho trovato alcuna informazione reale sull'uso degli sprechi reali, o su come si regge l'abuso.
Inoltre, questo non risolve il problema dell'autenticazione soft (vero?) E l'accesso diretto al blocco DataNode (vero?) - Per la crittografia dei dati, sono diviso tra la crittografia HDFS (una singola chiave simmetrica condivisa tra TUTTI i nodi) o la crittografia a livello di applicazione (e la chiave (o le chiavi, per esempio una per cliente) dovrebbero ancora essere distribuite a ciascun nodo attività per i lavori MapReduce).