Gli esempi riportati di seguito creano e utilizzano un cluster Dataproc abilitato per Kerberos con i componenti Ranger e Solr per controllare l'accesso degli utenti alle risorse Hadoop, YARN e HIVE.
Note:
È possibile accedere alla Ranger Web UI tramite il gateway dei componenti.
In un cluster Ranger con Kerberos, Dataproc mappa un utente Kerberos all'utente di sistema rimuovendo il realm e l'istanza dell'utente Kerberos. Ad esempio, l'entità Kerberos
user1/cluster-m@MY.REALM
viene mappata al sistemauser1
e le policy Ranger sono definite per consentire o negare le autorizzazioni peruser1
.
Crea il cluster.
- Il seguente comando
gcloud
può essere eseguito in una finestra del terminale locale o da Cloud Shell di un progetto.gcloud dataproc clusters create cluster-name \ --region=region \ --optional-components=SOLR,RANGER \ --enable-component-gateway \ --properties="dataproc:ranger.kms.key.uri=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key,dataproc:ranger.admin.password.uri=gs://bucket/admin-password.encrypted" \ --kerberos-root-principal-password-uri=gs://bucket/kerberos-root-principal-password.encrypted \ --kerberos-kms-key=projects/project-id/locations/global/keyRings/keyring/cryptoKeys/key
- Il seguente comando
Una volta che il cluster è in esecuzione, vai alla pagina Cluster di Dataproc nella console Google Cloud , quindi seleziona il nome del cluster per aprire la pagina Dettagli cluster. Fai clic sulla scheda Interfacce web per visualizzare un elenco di link del gateway dei componenti alle interfacce web dei componenti predefiniti e facoltativi installati sul cluster. Fai clic sul link Ranger.
Accedi a Ranger inserendo il nome utente "admin" e la password di amministratore di Ranger.
L'interfaccia utente di Ranger Admin si apre in un browser locale.
Policy di accesso YARN
Questo esempio crea una policy Ranger per consentire e negare l'accesso degli utenti alla coda root.default di YARN.
Seleziona
yarn-dataproc
dall'interfaccia utente di Ranger Admin.Nella pagina yarn-dataproc Policies (Norme yarn-dataproc), fai clic su Add New Policy (Aggiungi nuove norme). Nella pagina Crea criterio, i seguenti campi vengono inseriti o selezionati:
Policy Name
: "yarn-policy-1"Queue
: "root.default"Audit Logging
: "Sì"Allow Conditions
:Select User
: "userone"Permissions
: seleziona "Seleziona tutto" per concedere tutte le autorizzazioni
Deny Conditions
:Select User
: "usertwo"Permissions
: seleziona "Seleziona tutto" per negare tutte le autorizzazioni
Fai clic su Aggiungi per salvare la norma. La norma è elencata nella pagina Norme yarn-dataproc:
Esegui un job Hadoop MapReduce nella finestra della sessione SSH master come userone:
userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- La UI di Ranger mostra che a
userone
è stato consentito inviare il job.
- La UI di Ranger mostra che a
Esegui il job Hadoop MapReduce dalla finestra della sessione SSH della VM master come
usertwo
:usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- La UI di Ranger mostra che a
usertwo
è stato negato l'accesso per inviare il job.
- La UI di Ranger mostra che a
Policy di accesso HDFS
Questo esempio crea una policy Ranger per consentire e negare l'accesso degli utenti alla
directory HDFS /tmp
.
Seleziona
hadoop-dataproc
dall'interfaccia utente di Ranger Admin.Nella pagina hadoop-dataproc Policies (Norme hadoop-dataproc), fai clic su Add New Policy (Aggiungi nuove norme). Nella pagina Crea criterio, i seguenti campi vengono inseriti o selezionati:
Policy Name
: "hadoop-policy-1"Resource Path
: "/tmp"Audit Logging
: "Sì"Allow Conditions
:Select User
: "userone"Permissions
: seleziona "Seleziona tutto" per concedere tutte le autorizzazioni
Deny Conditions
:Select User
: "usertwo"Permissions
: seleziona "Seleziona tutto" per negare tutte le autorizzazioni
Fai clic su Aggiungi per salvare la norma. La policy è elencata nella pagina hadoop-dataproc Policies:
Accedi alla directory HDFS
/tmp
come userone:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- La UI di Ranger mostra che
userone
ha ottenuto l'accesso alla directory /tmp di HDFS.
- La UI di Ranger mostra che
Accedi alla directory HDFS
/tmp
comeusertwo
:usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
- La UI di Ranger mostra che
usertwo
non ha avuto accesso alla directory /tmp di HDFS.
- La UI di Ranger mostra che
Policy di accesso Hive
Questo esempio crea una policy Ranger per consentire e negare l'accesso degli utenti a una tabella Hive.
Crea una piccola tabella
employee
utilizzando l'interfaccia a riga di comando Hive sull'istanza master.hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
Seleziona
hive-dataproc
dall'interfaccia utente di Ranger Admin.Nella pagina hive-dataproc Policies (Norme hive-dataproc), fai clic su Add New Policy (Aggiungi nuove norme). Nella pagina Crea criterio, i seguenti campi vengono inseriti o selezionati:
Policy Name
: "hive-policy-1"database
: "default"table
: "employee"Hive Column
: "*"Audit Logging
: "Sì"Allow Conditions
:Select User
: "userone"Permissions
: seleziona "Seleziona tutto" per concedere tutte le autorizzazioni
Deny Conditions
:Select User
: "usertwo"Permissions
: seleziona "Seleziona tutto" per negare tutte le autorizzazioni
Fai clic su Aggiungi per salvare la norma. La policy è elencata nella pagina hive-dataproc Policies:
Esegui una query dalla sessione SSH master della VM sulla tabella dei dipendenti Hive come userone:
userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- La query userone ha esito positivo:
Connected to: Apache Hive (version 2.3.6) Driver: Hive JDBC (version 2.3.6) Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 1 | bob | | 2 | alice | | 3 | john | +---------------+----------------+ 3 rows selected (2.033 seconds)
- La query userone ha esito positivo:
Esegui una query dalla sessione SSH master della VM sulla tabella dei dipendenti Hive come usertwo:
usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- A usertwo viene negato l'accesso alla tabella:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
- A usertwo viene negato l'accesso alla tabella:
Accesso granulare a Hive
Ranger supporta il mascheramento e i filtri a livello di riga su Hive. Questo esempio
si basa sul precedente hive-policy-1
aggiungendo criteri di mascheramento e filtro.
Seleziona
hive-dataproc
dall'interfaccia utente di Ranger Admin, poi seleziona la scheda Mascheramento e fai clic su Aggiungi nuova norma.Nella pagina Crea policy, i seguenti campi vengono inseriti o selezionati per creare una policy per mascherare (annullare) la colonna del nome del dipendente:
Policy Name
: "hive-masking policy"database
: "default"table
: "employee"Hive Column
: "name"Audit Logging
: "Sì"Mask Conditions
:Select User
: "userone"Access Types
: "select" add/edit permissionsSelect Masking Option
: "nullify"Fai clic su Aggiungi per salvare la norma.
Seleziona
hive-dataproc
dall'interfaccia utente di Ranger Admin, quindi seleziona la scheda Filtro a livello di riga e fai clic su Aggiungi nuovo criterio.Nella pagina Crea criterio, i seguenti campi vengono inseriti o selezionati per creare un criterio per filtrare (restituire) le righe in cui
eid
non è uguale a1
:Policy Name
: "hive-filter policy"Hive Database
: "default"Hive Table
: "employee"Audit Logging
: "Sì"Mask Conditions
:Select User
: "userone"Access Types
: "select" add/edit permissionsRow Level Filter
: espressione di filtro "eid != 1"Fai clic su Aggiungi per salvare la norma.
Ripeti la query precedente dalla sessione SSH master della VM sulla tabella dei dipendenti Hive come userone:
userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- La query viene restituita con la colonna del nome mascherata e bob
(eid=1) filtrato dai risultati:
Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 2 | NULL | | 3 | NULL | +---------------+----------------+ 2 rows selected (0.47 seconds)
- La query viene restituita con la colonna del nome mascherata e bob
(eid=1) filtrato dai risultati: