É possível gerenciar o controle de acesso centralizado em cargas de trabalho do Hadoop, YARN e Hive integrando o Apache Ranger ao Kerberos no Serviço Gerenciado para Apache Spark. Neste tutorial, você vai criar um cluster com os componentes Ranger e Apache Solr, configurar políticas de autorização e verificar as permissões do usuário.
Ao avaliar as políticas de acesso, o Serviço Gerenciado para Apache Spark mapeia os principais do Kerberos para usuários do sistema, removendo o realm e a instância, como mapear user1/cluster-m@MY.REALM para user1. É possível gerenciar essas políticas na interface da Web do Ranger pelo gateway de componentes.
Crie o cluster.
- O comando
gclouda seguir pode ser executado em uma janela do 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
- O comando
Depois que o cluster estiver em execução, acesse a página Clusters do Serviço Gerenciado para Apache Spark 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 de componentes padrão e opcionais instalados no cluster. Clique no link do Ranger
Faça login no Ranger inserindo o nome de usuário
admine a senha de administrador do Ranger.
A UI do Ranger
adminé 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.
Selecione
yarn-dataprocna interface de admin do Ranger.
Na página Políticas yinc-dataproc, clique em Adicionar nova política. 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 Políticas yarn-dataproc:
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
- A IU do Ranger mostra que
useroneteve permissão para enviar o job.
- A IU do Ranger mostra que
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
- A IU do Ranger mostra que
usertwoteve acesso negado para enviar o job.
- A IU do Ranger mostra que
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.
Selecione
hadoop-dataprocna interface de admin do Ranger.
Na página Políticas hadoop-dataproc, clique em Adicionar nova política. 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 Políticas hadoop-dataproc:
Acesse o diretório
/tmpdo HDFS como userone:userone@example-cluster-m:~$ hadoop fs -ls /tmp
- A IU do Ranger mostra que
useronerecebeu acesso ao diretório HDFS /tmp.
- A IU do Ranger mostra que
Acesse o diretório
/tmpdo HDFS comousertwo:usertwo@example-cluster-m:~$ hadoop fs -ls /tmp
- A IU do Ranger mostra que
usertwoteve acesso negado ao diretório HDFS /tmp.
- A IU do Ranger mostra que
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.
Crie uma pequena tabela
employeeusando 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');
Selecione
hive-dataprocna interface de admin do Ranger.
Na página Políticas hive-dataproc, clique em Adicionar nova política. 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:
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;"
- 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)
- A consulta userone é bem-sucedida:
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;"
- usertwo tem acesso negado à tabela:
Error: Could not open client transport with JDBC Uri: ... Permission denied: user=usertwo, access=EXECUTE, inode="/tmp/hive"
- usertwo tem acesso negado à tabela:
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.
Selecione
hive-dataprocna interface de admin do Ranger, selecione a guia Mascaramento e clique em Adicionar nova política.
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õesSelect Masking Option: "esconder"
Clique em Adicionar para salvar a política.
Selecione
hive-dataprocna interface de admin do Ranger, selecione a guia Filtro no nível da linha e clique em Adicionar nova política.
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
eidnão é igual a1: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õesRow Level Filter: expressão de filtro "eid != 1"
Clique em Adicionar para salvar a política.
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;"
- 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)
- A consulta retorna com a coluna de nome mascarada e Roberto (eid=1) filtrado dos resultados: