Como usar o Ranger com Kerberos

Os exemplos a seguir criam e usam um cluster do Dataproc ativado para Kerberos com os componentes Ranger e Solr para controlar o acesso dos usuários aos recursos Hadoop, YARN, and HIVE.

Observações:

  • A IU da Web do Ranger pode ser acessada por meio do Gateway de componentes.

  • Em um cluster do Ranger com Kerberos, o Dataproc mapeia um usuário do Kerberos para o usuário do sistema retirando o domínio e a instância do usuário do Kerberos. Por exemplo, a user1/cluster-m@MY.REALM do Kerberos principal é mapeada para o sistema user1, e as políticas do Ranger são definidas para permitir ou negar permissões de user1.

  1. Configure a senha de administrador do Ranger.

  2. Configurar a senha principal da raiz do Kerberos.

  3. Crie o cluster.

    1. O comando gcloud a seguir pode ser executado em uma janela de terminal local ou no 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 que o cluster estiver em execução, navegue até a página Clusters do Dataproc no Console do Google Cloud e selecione o nome do cluster para abrir a página Detalhes do cluster. Clique na guia Interfaces da Web para exibir uma lista de links do Gateway de componentes para as interfaces da Web dos componentes padrão e opcionais instalados no cluster. Clique no link do Ranger

  5. Faça login no Ranger digitando o nome de usuário "admin" e a senha de administrador do Ranger.

  6. A IU do administrador do Ranger é aberta em um navegador local.

Política de acesso ao YARN

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

  1. Selecione yarn-dataproc na IU de administrador do Ranger.

  2. Na página yarn-dataproc Policy, clique em Add New Policy. Na página Criar política, os seguintes campos são inseridos 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 permissões
    • Deny Conditions:

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

      Clique em Adicionar para salvar a política. A política está listada na página yarn-dataproc policies:

  3. Execute um job de MapReduce do Hadoop na janela mestre da sessão SSH como usuário um (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 permissão para enviar o job.
  4. Execute o job MapReduce do Hadoop na janela da sessão SSH do mestre 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 usertwo teve acesso negado para enviar o job.

Política de acesso ao HDFS

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

  1. Selecione hadoop-dataproc na IU de administrador do Ranger.

  2. Na página hadoop-dataproc policies, clique em Add New Policy. Na página Criar política, os seguintes campos são inseridos 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 permissões
    • Deny Conditions:

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

      Clique em Adicionar para salvar a política. A política está listada na página hadoop-dataproc policies:

  3. Acesse o diretório /tmp do HDFS como userone:

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

    1. A IU do Ranger mostra que userone recebeu acesso ao diretório HDFS /tmp.
  4. Acesse o diretório /tmp do HDFS como usertwo:

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

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

Política de acesso ao Hive

Este exemplo cria uma política do Ranger para permitir e negar acesso do usuário a uma tabela do Hive.

  1. Crie uma pequena tabela employee usando a CLI do Hive na instância mestre.

    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 administrador do Ranger.

  3. Na página hive-dataproc policies, clique em Add New Policy. Na página Criar política, os seguintes campos são inseridos ou selecionados:

    • Policy Name: "hive-policy-1"
    • database: "padrão"
    • table: "funcionário"
    • Hive Column: "*"
    • Audit Logging: "Sim"
    • Allow Conditions:
      • Select User: "userone"
      • Permissions: "Selecionar tudo" para conceder todas as permissões
    • Deny Conditions:

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

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

  4. Execute uma consulta da sessão SSH mestre 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 é bem-sucedida:
      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 da sessão SSH do mestre 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. usertwo tem acesso negado à tabela:
      Error: Could not open client transport with JDBC Uri:
      ...
      Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
      

Acesso refinado ao Hive

O Ranger é compatível com filtros de máscara e no nível da linha no Hive. Este exemplo se baseia no hive-policy-1 anterior adicionando políticas de mascaramento e filtro.

  1. Selecione hive-dataproc na IU do administrador do Ranger, selecione a guia Mascaramento e clique em Adicionar nova política.

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

      • Policy Name: "política de mascaramento do Hive"
      • database: "padrão"
      • table: "funcionário"
      • Hive Column: "nome"
      • Audit Logging: "Sim"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "selecione" adicionar/editar permissões
        • Select Masking Option: "esconder"

          Clique em Adicionar para salvar a política.

  2. Selecione hive-dataproc na IU do administrador do Ranger, selecione a guia Filtro no nível da linha e clique em Adicionar nova política.

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

      • Policy Name: "política de filtro do hive"
      • Hive Database: "padrão"
      • Hive Table: "funcionário"
      • Audit Logging: "Sim"
      • Mask Conditions:
        • Select User: "userone"
        • Access Types: "selecione" adicionar/editar permissões
        • Row Level Filter: expressão de filtro "eid != 1"

          Clique em Adicionar para salvar a política.

    2. Repita uma consulta anterior da sessão SSH mestre 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 retorna com a coluna de nome mascarada e Roberto (eid=1) filtrado dos resultados:
        Transaction isolation: TRANSACTION_REPEATABLE_READ
        +---------------+----------------+
        | employee.eid  | employee.name  |
        +---------------+----------------+
        | 2             | NULL           |
        | 3             | NULL           |
        +---------------+----------------+
        2 rows selected (0.47 seconds)