Use o Ranger com o Kerberos

Os exemplos seguintes criam e usam um cluster do Dataproc com o Kerberos ativado com os componentes Ranger e Solr para controlar o acesso dos utilizadores aos recursos do Hadoop, YARN e HIVE.

Notas:

  • Pode aceder à IU Web do Ranger através do gateway de componentes.

  • Num cluster do Ranger com Kerberos, o Dataproc mapeia um utilizador do Kerberos para o utilizador do sistema removendo o domínio e a instância do utilizador do Kerberos. Por exemplo, o principal do Kerberos user1/cluster-m@MY.REALM é mapeado para o sistema user1 e as políticas do Ranger são definidas para permitir ou negar autorizações para user1.

  1. Configure a palavra-passe de administrador do Ranger.

  2. Configure a palavra-passe principal de raiz do Kerberos.

  3. Crie o cluster.

    1. O seguinte comando gcloud pode ser executado numa janela de terminal local ou a partir do Cloud Shell de um projeto.
      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. Depois de o cluster estar em execução, navegue para a página Clusters do Dataproc na Google Cloud consola e, de seguida, selecione o nome do cluster para abrir a página Detalhes do cluster. Clique no separador Interfaces Web para apresentar uma lista de links do gateway de componentes para as interfaces Web dos componentes predefinidos e opcionais instalados no cluster. Clique no link Ranger.

  5. Inicie sessão no Ranger introduzindo o nome de utilizador "admin" e a palavra-passe de administrador do Ranger.

  6. A IU de administração do Ranger é aberta num navegador local.

Política de acesso do YARN

Este exemplo cria uma política do Ranger para permitir e negar o acesso do utilizador à fila root.default do YARN.

  1. Selecione yarn-dataproc na IU de administração do Ranger.

  2. Na página yarn-dataproc Policies (Políticas do yarn-dataproc), clique em Add New Policy (Adicionar nova política). Na página Criar política, os seguintes campos são introduzidos ou selecionados:

    • Policy Name: "yarn-policy-1"
    • Queue: "root.default"
    • Audit Logging: "Sim"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Selecionar tudo" para conceder todas as autorizações
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Selecionar tudo" para negar todas as autorizações

      Clique em Adicionar para guardar a política. A política está listada na página Políticas do yarn-dataproc:

  3. Execute uma tarefa mapreduce do Hadoop na janela de sessão SSH principal como userone:

    userone@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10
    

    1. A IU do Ranger mostra que userone teve autorização para enviar a tarefa.
  4. Execute a tarefa MapReduce do Hadoop na janela da sessão SSH principal da VM como usertwo:

    usertwo@example-cluster-m:~$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduced-examples.
    jar pi 5 10

    1. A IU do Ranger mostra que o acesso de usertwo foi negado para enviar o trabalho.

Política de acesso do HDFS

Este exemplo cria uma política do Ranger para permitir e negar o acesso do utilizador ao diretório /tmp do HDFS.

  1. Selecione hadoop-dataproc na IU de administração do Ranger.

  2. Na página hadoop-dataproc Policies (Políticas do hadoop-dataproc), clique em Add New Policy (Adicionar nova política). Na página Criar política, os seguintes campos são introduzidos ou selecionados:

    • Policy Name: "hadoop-policy-1"
    • Resource Path: "/tmp"
    • Audit Logging: "Sim"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Selecionar tudo" para conceder todas as autorizações
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Selecionar tudo" para negar todas as autorizações

      Clique em Adicionar para guardar a política. A política está listada na página Políticas do hadoop-dataproc:

  3. Aceda ao diretório /tmp do HDFS como userone:

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

    1. A IU do Ranger mostra que o utilizador userone teve acesso autorizado ao diretório /tmp do HDFS.
  4. Aceda ao diretório /tmp do HDFS como usertwo:

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

    1. A IU do Ranger mostra que o utilizador usertwo teve o acesso ao diretório /tmp do HDFS negado.

Política de acesso do Hive

Este exemplo cria uma política do Ranger para permitir e negar o acesso do utilizador a uma tabela do Hive.

  1. Crie uma pequena tabela employee através da CLI do Hive na instância principal.

    hive> CREATE TABLE IF NOT EXISTS employee (eid int, name String); INSERT INTO employee VALUES (1 , 'bob') , (2 , 'alice'), (3 , 'john');
    

  2. Selecione hive-dataproc na IU de administração do Ranger.

  3. Na página hive-dataproc Policies (Políticas do hive-dataproc), clique em Add New Policy (Adicionar nova política). Na página Criar política, os seguintes campos são introduzidos ou selecionados:

    • Policy Name: "hive-policy-1"
    • database: "default"
    • table: "employee"
    • Hive Column: "*"
    • Audit Logging: "Sim"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Selecionar tudo" para conceder todas as autorizações
    • Deny Conditions:

      • Select User: "usertwo"
      • Permissions: "Selecionar tudo" para negar todas as autorizações

      Clique em Adicionar para guardar a política. A política é apresentada na página hive-dataproc Policies:

  4. Execute uma consulta a partir da sessão SSH principal da VM na tabela de funcionários do 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. A consulta userone tem êxito:
      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. Execute uma consulta a partir da sessão SSH principal da VM na tabela de funcionários do 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. O acesso de usertwo à tabela é negado:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

Acesso detalhado ao Hive

O Ranger suporta a ocultação e os filtros ao nível da linha no Hive. Este exemplo baseia-se no exemplo anterior hive-policy-1 adicionando políticas de filtragem e ocultação.

  1. Selecione hive-dataproc na IU de administração do Ranger e, de seguida, selecione o separador Masking e clique em Add New Policy.

    1. Na página Criar política, os seguintes campos são introduzidos ou selecionados para criar uma política para ocultar (anular) a coluna do nome do funcionário:

      • Policy Name: "hive-masking policy"
      • database: "default"
      • table: "employee"
      • Hive Column: "name"
      • Audit Logging: "Sim"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Select Masking Option: "nullify"

          Clique em Adicionar para guardar a política.

  2. Selecione hive-dataproc na IU de administração do Ranger e, de seguida, selecione o separador Filtro ao nível da linha e clique em Adicionar nova política.

    1. Na página Criar política, os seguintes campos são introduzidos ou selecionados para criar uma política para filtrar (devolver) linhas em que eid não é igual a 1:

      • Policy Name: "hive-filter policy"
      • Hive Database: "default"
      • Hive Table: "employee"
      • Audit Logging: "Sim"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "select" add/edit permissions
        • Row Level Filter: expressão de filtro "eid != 1"

          Clique em Adicionar para guardar a política.

    2. Repita a consulta anterior da sessão SSH principal da VM na tabela de funcionários do 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. A consulta é devolvida com a coluna de nome ocultada e bob(eid=1) filtrada dos resultados.:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)