Usar Ranger con Kerberos

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

  5. Para acceder a Ranger, ingresa el nombre de usuario de “administrador” y la contraseña de administrador del Ranger.

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

  1. Selecciona yarn-dataproc en la IU para administrar de 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. 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
    

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

    1. La IU de Ranger muestra que se denegó el acceso a usertwo 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 de 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 userone:

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

    1. La IU de Ranger muestra que se permitió el acceso de userone al directorio /tmp de HDFS.
  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 de 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 de 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. 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;"
    

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

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

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 en la IU de Ranger Admin, luego, selecciona la pestaña Masking y haz clic en Add New Policy.

    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 en la IU de Ranger Admin, luego, elige la pestaña Row Level Filter y haz clic en Add New Policy.

    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: Expresión de filtro "eid != 1"

          Haz clic en Agregar para guardar la política.

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

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