Usar Ranger con Kerberos

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 al user1 del sistema, y las políticas de Ranger se definen para permitir o denegar permisos para user1.

  1. Configura la contraseña de administrador de Ranger.

  2. Configura la contraseña de principal raíz de Kerberos.

  3. Crea el clúster.

    1. 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
      
  4. Después de que el clúster esté en ejecución, navega hasta 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.

  5. Accede a Ranger ingresando el nombre de usuario "administrador" y la contraseña de administrador del Ranger.

  6. 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.

  1. Selecciona yarn-dataproc en la IU para administrar Ranger.

  2. 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:

  3. 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
    

    1. La IU de Ranger muestra que userone pudo enviar el trabajo.
  4. 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

    1. La IU de Ranger muestra que a usertwo se le denegó el acceso para enviar el trabajo.

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.

  1. Selecciona hadoop-dataproc en la IU para administrar Ranger.

  2. 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:

  3. Accede al directorio /tmp de HDFS como usuariouno:

    userone@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. La IU del Ranger muestra que userone tiene permitido el acceso al directorio HDFS /tmp.
  4. Accede al directorio /tmp de HDFS como usertwo:

    usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
    

    1. La IU de Ranger muestra que a usertwo se le denegó el acceso al directorio HDFS /tmp.

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.

  1. 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');
    

  2. Selecciona hive-dataproc en la IU para administrar Ranger.

  3. 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 :

  4. 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;"
    

    1. 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)
      
  5. 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;"
    

    1. "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"
      

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.

  1. Selecciona hive-dataproc desde la IU para administrar Ranger, luego selecciona la pestaña Enmascaramiento y haz clic en Agregar nueva política.

    1. 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 permisos
        • Select Masking Option: “nullify”

          Haz clic en Agregar para guardar la política.

  2. 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.

    1. 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 a 1:

      • 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 permisos
        • Row Level Filter: "eid != 1" expresión de filtro

          Haz clic en Agregar para guardar la política.

    2. 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;"
      

      1. 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)