En los ejemplos siguientes, se crea y se usa un clúster de Dataproc habilitado para Kerberos con componentes Ranger y Solr a fin de controlar el acceso de los usuarios a los recursos de Hadoop, YARN y HIVE.
Notas:
Se puede acceder a la IU web de Ranger a través de la puerta de enlace de componentes.
En un Ranger con un clúster de Kerberos, Dataproc asigna un usuario de Kerberos al usuario del sistema mediante la eliminación del dominio y la instancia del usuario de Kerberos. Por ejemplo, el
user1/cluster-m@MY.REALM
principal de Kerberos se asigna aluser1
del sistema, y las políticas de Ranger se definen para permitir o denegar permisos parauser1
.
Crea el clúster.
- El siguiente comando
gcloud
se puede ejecutar en una ventana de terminal local o desde Cloud Shell de un proyecto.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
- El siguiente comando
Después de que el clúster se esté ejecutando, navega a la página Clústeres de Dataproc en la consola de Google Cloud y, luego, selecciona el nombre del clúster para abrir la página Detalles del clúster. Haz clic en la pestaña Interfaces web para ver una lista de los vínculos de puerta de enlace de componentes a las interfaces web de los componentes predeterminados y opcionales instalados en el clúster. Haz clic en el vínculo Ranger.
Para acceder a Ranger, ingresa el nombre de usuario de “administrador” y la contraseña de administrador del Ranger.
Se abrirá la IU para administrar Ranger en un navegador local.
Política de acceso a YARN
En este ejemplo, se crea una política de Ranger para permitir y denegar el acceso de usuarios a la cola root.default de YARN.
Selecciona
yarn-dataproc
en la IU para administrar de Ranger.En la página Políticas de yarn-dataproc, haz clic en Agregar política nueva. En la página Crear política, se ingresan o seleccionan los siguientes campos:
Policy Name
: "yarn-policy-1"Queue
: “root.default”Audit Logging
: "Sí" (yes)Allow Conditions
:Select User
: "usuariouno" (userone)Permissions
: "Seleccionar todo" (Select all) para otorgar todos los permisos
Deny Conditions
:Select User
: "usuariodos" (usertwo)Permissions
: "Seleccionar todo" (Select all) para denegar todos los permisos
Haz clic en Agregar para guardar la política. La política aparece en la página de políticas de yarn-dataproc:
Ejecuta un trabajo de MapReduce de Hadoop en la ventana de la sesión de SSH principal como userone:
userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- La IU de Ranger muestra que se permitió a
userone
enviar el trabajo.
- La IU de Ranger muestra que se permitió a
Ejecuta el trabajo mapreduce de Hadoop desde la ventana de sesión SSH de la instancia principal de la VM como
usertwo
:usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- La IU de Ranger muestra que se denegó el acceso a
usertwo
para enviar el trabajo.
- La IU de Ranger muestra que se denegó el acceso a
Política de acceso a HDFS
En este ejemplo, se crea una política de Ranger para permitir y denegar el acceso de usuarios al directorio /tmp
de HDFS.
Selecciona
hadoop-dataproc
en la IU para administrar de Ranger.En la página Políticas de hadoop-dataproc, haz clic en Agregar política nueva. En la página Crear política, se ingresan o seleccionan los siguientes campos:
Policy Name
: "hadoop-policy-1"Resource Path
: "/tmp"Audit Logging
: "Sí" (yes)Allow Conditions
:Select User
: "usuariouno" (userone)Permissions
: "Seleccionar todo" (Select all) para otorgar todos los permisos
Deny Conditions
:Select User
: "usuariodos" (usertwo)Permissions
: "Seleccionar todo" (Select all) para denegar todos los permisos
Haz clic en Agregar para guardar la política. La política se muestra en la página Políticas de hadoop-dataproc:
Accede al directorio
/tmp
de HDFS como userone:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- La IU de Ranger muestra que se permitió el acceso de
userone
al directorio /tmp de HDFS.
- La IU de Ranger muestra que se permitió el acceso de
Accede al directorio
/tmp
de HDFS comousertwo
:usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
- La IU de Ranger muestra que a
usertwo
se le denegó el acceso al directorio de HDFS /tmp.
- La IU de Ranger muestra que a
Política de acceso a Hive
En este ejemplo, se crea una política de Ranger para permitir y denegar el acceso de usuarios a una tabla de Hive.
Crea una tabla
employee
pequeña con la CLI de Hive en la instancia principal.hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
Selecciona
hive-dataproc
en la IU para administrar de Ranger.En la página Políticas de hive-dataproc, haz clic en Agregar política nueva. En la página Crear política, se ingresan o seleccionan los siguientes campos:
Policy Name
: "hive-policy-1"database
: "predeterminado" (default)table
: "empleado" (employee)Hive Column
: "*"Audit Logging
: "Sí" (yes)Allow Conditions
:Select User
: "usuariouno" (userone)Permissions
: "Seleccionar todo" (Select all) para otorgar todos los permisos
Deny Conditions
:Select User
: "usuariodos" (usertwo)Permissions
: "Seleccionar todo" (Select all) para denegar todos los permisos
Haz clic en Agregar para guardar la política. La política aparece en la página de políticas de hive-dataproc :
Ejecuta una consulta desde la sesión SSH de la instancia principal de la VM en la tabla de empleados de Hive como userone:
userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- La consulta userone se realiza de forma correcta:
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 consulta userone se realiza de forma correcta:
Ejecuta una consulta desde la sesión SSH de la instancia principal de la VM en la tabla de empleados de Hive como usertwo:
usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- usertwo no tiene acceso a la tabla:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
- usertwo no tiene acceso a la tabla:
Acceso detallado a Hive
Ranger admite el enmascaramiento y los filtros de nivel de fila en Hive. Este ejemplo se basa en el hive-policy-1
anterior mediante el agregado de políticas de enmascaramiento y filtro.
Selecciona
hive-dataproc
en la IU de Ranger Admin, luego, selecciona la pestaña Masking y haz clic en Add New Policy.En la página Crear política, se ingresan o seleccionan los siguientes campos para crear una política que enmascare (anule) la columna de nombre del empleado:
Policy Name
: "política de enmascaramiento de hive"database
: "predeterminado" (default)table
: "empleado" (employee)Hive Column
: "nombre" (name)Audit Logging
: "Sí" (yes)Mask Conditions
:Select User
: "usuariouno" (userone)Access Types
: "selecciona" agregar/editar permisosSelect Masking Option
: “nullify”Haz clic en Agregar para guardar la política.
Selecciona
hive-dataproc
en la IU de Ranger Admin, luego, elige la pestaña Row Level Filter y haz clic en Add New Policy.En la página Crear política, los siguientes campos se ingresan o seleccionan a fin de crear una política para filtrar (mostrar) las filas en las que
eid
no es igual a1
:Policy Name
: "política de filtro de hive"Hive Database
: "predeterminado" (default)Hive Table
: "empleado" (employee)Audit Logging
: "Sí" (yes)Mask Conditions
:Select User
: "usuariouno" (userone)Access Types
: "selecciona" agregar/editar permisosRow Level Filter
: Expresión de filtro "eid != 1"Haz clic en Agregar para guardar la política.
Repite la consulta anterior desde la sesión SSH de la instancia principal de la VM en la tabla de empleados de Hive como userone:
userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- La consulta muestra la columna de nombre enmascarada y bob (eid=1) se filtra de los resultados:
Transaction isolation: TRANSACTION_REPEATABLE_READ +---------------+----------------+ | employee.eid | employee.name | +---------------+----------------+ | 2 | NULL | | 3 | NULL | +---------------+----------------+ 2 rows selected (0.47 seconds)
- La consulta muestra la columna de nombre enmascarada y bob (eid=1) se filtra de los resultados: