En los siguientes ejemplos, se crea y usa un Kerberos habilitado clúster de Dataproc con Ranger y Solr para 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 de
gcloud
se puede ejecutar en una ventana de la 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 de
Después de que el clúster se esté ejecutando, navega a Dataproc En la página Clústeres de 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.
Accede a Ranger ingresando el nombre de usuario "administrador" y la contraseña de administrador del Ranger.
La IU del administrador de Ranger se abre 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 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:
Ejecutar un trabajo de Hadoop mapreduce en la ventana de sesión de SSH principal como usuariouno:
userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples. jar pi 5 10
- La IU de Ranger muestra que
userone
pudo enviar el trabajo.
- La IU de Ranger muestra que
Ejecuta el trabajo mapreduce de Hadoop en la ventana de sesión SSH principal de 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 a
usertwo
se le denegó el acceso para enviar el trabajo.
- La IU de Ranger muestra que 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 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 usuariouno:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- La IU del Ranger muestra que
userone
tiene permitido el acceso al directorio HDFS /tmp.
- La IU del Ranger muestra que
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 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 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 :
Ejecute una consulta desde la sesión SSH principal de VM en la tabla de empleados de Hive como usuariouno:
userone@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- La consulta de usuariouno se realiza correctamente:
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 de usuariouno se realiza correctamente:
Ejecute una consulta desde la sesión SSH principal de VM en la tabla de empleados de Hive como "usuariodos":
usertwo@example-cluster-m:~$ beeline -u "jdbc:hive2://$(hostname -f):10000/default;principal=hive/$(hostname -f)@REALM" -e "select * from employee;"
- "usuariodos" tiene acceso denegado a la tabla:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
- "usuariodos" tiene acceso denegado 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
desde la IU para administrar Ranger, luego selecciona la pestaña Enmascaramiento y haz clic en Agregar nueva política.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
desde la IU para administrar Ranger, luego selecciona la pestaña Filtro de nivel de fila y haz clic en Agregar nueva política.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
: "eid != 1" expresión de filtroHaz clic en Agregar para guardar la política.
Repita la consulta anterior de la sesión SSH principal de VM con la tabla de empleados de Hive como usuerone:
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) filtrado en 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) filtrado en los resultados: