I seguenti esempi creano e utilizzano un cluster Dataproc abilitato a Kerberos con i componenti Ranger e Solr per controllare l'accesso degli utenti alle risorse Hadoop, YARN e HIVE.
Note:
È possibile accedere alla UI web di Ranger 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.REALMviene mappata auser1di sistema e le policy di Ranger sono definite per consentire o negare le autorizzazioni peruser1.
Crea il cluster.
- Il seguente comando
gcloudpuò 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
Dopo che il cluster è in esecuzione, vai alla pagina Cluster Dataproc su Google Cloud console, 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
admine la password di amministratore di Ranger.
La UI
admindi Ranger si apre in un browser locale.
Policy di accesso a YARN
Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti alla coda root.default di YARN.
Seleziona
yarn-dataprocdalla UI di amministrazione di Ranger.
Nella pagina yarn-dataproc Policies (Policy yarn-dataproc), fai clic su Add New Policy (Aggiungi nuova policy). Nella pagina Create Policy (Crea policy), vengono inseriti o selezionati i seguenti campi:
Policy Name: "yarn-policy-1"Queue: "root.default"Audit Logging: "Yes"Allow Conditions:Select User: "userone"Permissions: "Select All" (Seleziona tutto) per concedere tutte le autorizzazioni
Deny Conditions:Select User: "usertwo"Permissions: "Select All" (Seleziona tutto) per negare tutte le autorizzazioni
Fai clic su Add (Aggiungi) per salvare la policy. La policy è elencata nella pagina yarn-dataproc Policies (Policy 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 di inviare il job.
- La UI di Ranger mostra che a
Esegui il job Hadoop MapReduce dalla finestra della sessione SSH master della VM 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 a HDFS
Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti alla directory
HDFS /tmp.
Seleziona
hadoop-dataprocdalla UI di amministrazione di Ranger.
Nella pagina hadoop-dataproc Policies (Policy hadoop-dataproc), fai clic su Add New Policy (Aggiungi nuova policy). Nella pagina Create Policy (Crea policy), vengono inseriti o selezionati i seguenti campi:
Policy Name: "hadoop-policy-1"Resource Path: "/tmp"Audit Logging: "Yes"Allow Conditions:Select User: "userone"Permissions: "Select All" (Seleziona tutto) per concedere tutte le autorizzazioni
Deny Conditions:Select User: "usertwo"Permissions: "Select All" (Seleziona tutto) per negare tutte le autorizzazioni
Fai clic su Add (Aggiungi) per salvare la policy. La policy è elencata nella pagina hadoop-dataproc Policies (Policy hadoop-dataproc):
Accedi alla directory
/tmpdi HDFS come userone:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- La UI di Ranger mostra che
useroneè stato consentito l'accesso alla directory /tmp di HDFS.
- La UI di Ranger mostra che
Accedi alla directory
/tmpdi HDFS comeusertwo:usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
- La UI di Ranger mostra che
usertwoè stato negato l'accesso alla directory /tmp di HDFS.
- La UI di Ranger mostra che
Policy di accesso a Hive
Questo esempio crea una policy di Ranger per consentire e negare l'accesso degli utenti a una tabella Hive table.
Crea una piccola tabella
employeeutilizzando l'interfaccia a riga di comando di 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-dataprocdalla UI di amministrazione di Ranger.
Nella pagina hive-dataproc Policies (Policy hive-dataproc), fai clic su Add New Policy (Aggiungi nuova policy). Nella pagina Create Policy (Crea policy), vengono inseriti o selezionati i seguenti campi:
Policy Name: "hive-policy-1"database: "default"table: "employee"Hive Column: "*"Audit Logging: "Yes"Allow Conditions:Select User: "userone"Permissions: "Select All" (Seleziona tutto) per concedere tutte le autorizzazioni
Deny Conditions:Select User: "usertwo"Permissions: "Select All" (Seleziona tutto) per negare tutte le autorizzazioni
Fai clic su Add (Aggiungi) per salvare la policy. La policy è elencata nella pagina hive-dataproc Policies (Policy hive-dataproc):
Esegui una query dalla sessione SSH master della VM sulla tabella employee di 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 employee di 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 sulla precedente hive-policy-1 aggiungendo policy di mascheramento e filtro.
Seleziona
hive-dataprocdalla UI di amministrazione di Ranger, quindi seleziona la scheda Masking (Mascheramento) e fai clic su Add New Policy (Aggiungi nuova policy).
Nella pagina Create Policy (Crea policy), vengono inseriti o selezionati i seguenti campi per creare una policy per mascherare (impostare su null) la colonna del nome del dipendente:
Policy Name: "hive-masking policy"database: "default"table: "employee"Hive Column: "name"Audit Logging: "Yes"Mask Conditions:Select User: "userone"Access Types: "select" (seleziona) aggiungi/modifica le autorizzazioniSelect Masking Option: "nullify"
Fai clic su Add (Aggiungi) per salvare la policy.
Seleziona
hive-dataprocdalla UI di amministrazione di Ranger, quindi seleziona la scheda Row Level Filter (Filtro a livello di riga) e fai clic su Add New Policy (Aggiungi nuova policy).
Nella pagina Create Policy (Crea policy), vengono inseriti o selezionati i seguenti campi per creare una policy per filtrare (restituire) le righe in cui
eidnon è uguale a1:Policy Name: "hive-filter policy"Hive Database: "default"Hive Table: "employee"Audit Logging: "Yes"Mask Conditions:Select User: "userone"Access Types: "select" (seleziona) aggiungi/modifica le autorizzazioniRow Level Filter: "eid != 1" espressione di filtro
Fai clic su Add (Aggiungi) per salvare la policy.
Ripeti la query precedente dalla sessione SSH master della VM sulla tabella employee di 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) filtrata 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) filtrata dai risultati: