O plugin do Dataproc Ranger Cloud Storage, disponível com as versões 1.5 e 2.0 da imagem do Dataproc, ativa um serviço de autorização em cada VM do cluster do Dataproc. O serviço de autorização avalia os pedidos do conetor do Cloud Storage em função das políticas do Ranger e, se o pedido for permitido, devolve um token de acesso para a conta de serviço da VM do cluster.
O plug-in do Ranger Cloud Storage baseia-se no Kerberos para autenticação e integra-se com o suporte do conetor do Cloud Storage para tokens de delegação. Os tokens de delegação são armazenados numa base de dados MySQL no nó principal do cluster. A palavra-passe de raiz da base de dados é especificada através das propriedades do cluster quando cria o cluster do Dataproc.
Antes de começar
Conceda a função criador de tokens de conta de serviço e a função administrador de funções de IAM na conta de serviço da VM do Dataproc no seu projeto.
Instale o plug-in de armazenamento na nuvem do Ranger
Execute os seguintes comandos numa janela de terminal local ou no Cloud Shell para instalar o plugin do Ranger Cloud Storage quando criar um cluster do Dataproc.
Defina variáveis de ambiente
export CLUSTER_NAME=new-cluster-name \ export REGION=region \ export KERBEROS_KMS_KEY_URI=Kerberos-KMS-key-URI \ export KERBEROS_PASSWORD_URI=Kerberos-password-URI \ export RANGER_ADMIN_PASSWORD_KMS_KEY_URI=Ranger-admin-password-KMS-key-URI \ export RANGER_ADMIN_PASSWORD_GCS_URI=Ranger-admin-password-GCS-URI \ export RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI=MySQL-root-password-KMS-key-URI \ export RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI=MySQL-root-password-GCS-URI
Notas:
- CLUSTER_NAME: o nome do novo cluster.
- REGION: a região onde o cluster vai ser criado, por exemplo,
us-west1
. - KERBEROS_KMS_KEY_URI e KERBEROS_PASSWORD_URI: consulte o artigo Configure a palavra-passe principal de raiz do Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI e RANGER_ADMIN_PASSWORD_GCS_URI: consulte o artigo Configure a palavra-passe de administrador do Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI e RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: configure uma palavra-passe do MySQL seguindo o mesmo procedimento que usou para configurar uma palavra-passe de administrador do Ranger.
Crie um cluster do Dataproc
Execute o seguinte comando para criar um cluster do Dataproc e instalar o plug-in do Ranger Cloud Storage no cluster.
gcloud dataproc clusters create ${CLUSTER_NAME} \ --region=${REGION} \ --scopes cloud-platform \ --enable-component-gateway \ --optional-components=SOLR,RANGER \ --kerberos-kms-key=${KERBEROS_KMS_KEY_URI} \ --kerberos-root-principal-password-uri=${KERBEROS_PASSWORD_URI} \ --properties="dataproc:ranger.gcs.plugin.enable=true, \ dataproc:ranger.kms.key.uri=${RANGER_ADMIN_PASSWORD_KMS_KEY_URI}, \ dataproc:ranger.admin.password.uri=${RANGER_ADMIN_PASSWORD_GCS_URI}, \ dataproc:ranger.gcs.plugin.mysql.kms.key.uri=${RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI}, \ dataproc:ranger.gcs.plugin.mysql.password.uri=${RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI}"
Notas:
- Versão de imagem 1.5: se estiver a criar um cluster de versão de imagem 1.5 (consulte a secção
Selecionar versões),
adicione a flag
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher
para instalar a versão do conetor necessária.
Valide a instalação do plugin Ranger Cloud Storage
Após a conclusão da criação do cluster, é apresentado um tipo de serviço GCS
denominadogcs-dataproc
na interface Web de administração do Ranger.

Políticas predefinidas do plug-in do Ranger Cloud Storage
O serviço gcs-dataproc
predefinido tem as seguintes políticas:
Políticas para ler e escrever nos buckets de preparação e temporários do cluster do Dataproc
Uma política
all - bucket, object-path
, que permite que todos os utilizadores acedam aos metadados de todos os objetos. Este acesso é necessário para permitir que o conector do Cloud Storage execute operações HCFS (Hadoop Compatible Filesystem).

Sugestões de utilização
Acesso da app a pastas de contentores
Para acomodar apps que criam ficheiros intermédios no contentor do Cloud Storage, pode conceder autorizações Modify Objects
, List Objects
e Delete Objects
no caminho do contentor do Cloud Storage e, em seguida, selecionar o modo recursive
para estender as autorizações a subcaminhos no caminho especificado.

Medidas de proteção
Para ajudar a evitar a circumvenção do plug-in:
Conceda à conta de serviço da VM acesso aos recursos nos seus contentores do Cloud Storage para lhe permitir conceder acesso a esses recursos com tokens de acesso com âmbito reduzido (consulte as autorizações do IAM para o Cloud Storage). Além disso, remova o acesso dos utilizadores aos recursos do contentor para evitar o acesso direto dos utilizadores ao contentor.
Desative o
sudo
e outros meios de acesso root nas VMs do cluster, incluindo a atualização do ficheirosudoer
, para impedir a representação ou alterações às definições de autenticação e autorização. Para mais informações, consulte as instruções do Linux para adicionar/removersudo
privilégios de utilizador.Use
iptable
para bloquear pedidos de acesso direto ao Cloud Storage de VMs de cluster. Por exemplo, pode bloquear o acesso ao servidor de metadados da VM para impedir o acesso à credencial da conta de serviço da VM ou ao token de acesso usado para autenticar e autorizar o acesso ao Cloud Storage (consulteblock_vm_metadata_server.sh
, um script de inicialização que usa regrasiptable
para bloquear o acesso ao servidor de metadados da VM).
Tarefas Spark, Hive-on-MapReduce e Hive-on-Tez
Para proteger os detalhes de autenticação do utilizador confidenciais e reduzir a carga no centro de distribuição de chaves (KDC), o controlador do Spark não distribui credenciais do Kerberos aos executores. Em vez disso, o controlador do Spark obtém um token de delegação do plug-in do Ranger Cloud Storage e, em seguida, distribui o token de delegação aos executores. Os executores usam o token de delegação para fazer a autenticação no plug-in do Ranger Cloud Storage, trocando-o por um token de acesso Google que permite o acesso ao Cloud Storage.
As tarefas Hive-on-MapReduce e Hive-on-Tez também usam tokens para aceder ao Cloud Storage. Use as seguintes propriedades para obter tokens para aceder a contentores do Cloud Storage especificados quando envia os seguintes tipos de tarefas:
Empregos do Spark:
--conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
Tarefas Hive-on-MapReduce:
--hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
Tarefas Hive-on-Tez:
--hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
Cenário de tarefa do Spark
Uma tarefa de contagem de palavras do Spark falha quando é executada a partir de uma janela de terminal numa VM de cluster do Dataproc que tem o plug-in do Ranger Cloud Storage instalado.
spark-submit \ --conf spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} \ --class org.apache.spark.examples.JavaWordCount \ /usr/lib/spark/examples/jars/spark-examples.jar \ gs://bucket-name/wordcount.txt
Notas:
- FILE_BUCKET: contentor do Cloud Storage para acesso do Spark.
Saída de erro:
Caused by: com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: '<USER>', Bucket: '<dataproc_temp_bucket>', Object Path: 'a97127cf-f543-40c3-9851-32f172acc53b/spark-job-history/', Action: 'LIST_OBJECTS'
Notas:
spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET}
é obrigatório num ambiente com o Kerberos ativado.
Saída de erro:
Caused by: java.lang.RuntimeException: Failed creating a SPNEGO token. Make sure that you have run `kinit` and that your Kerberos configuration is correct. See the full Kerberos error message: No valid credentials provided (Mechanism level: No valid credentials provided)
Uma política é editada através do gestor de acesso na interface Web de administração do Ranger
para adicionar username
à lista de utilizadores que têm List Objects
e outras autorizações de contentor temp
.

A execução da tarefa gera um novo erro.
Saída de erro:
com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: <USER>, Bucket: '<file-bucket>', Object Path: 'wordcount.txt', Action: 'READ_OBJECTS'
É adicionada uma política para conceder ao utilizador acesso de leitura ao caminho do wordcount.text
Cloud Storage.

O trabalho é executado e concluído com êxito.
INFO com.google.cloud.hadoop.fs.gcs.auth.GcsDelegationTokens: Using delegation token RangerGCSAuthorizationServerSessionToken owner=<USER>, renewer=yarn, realUser=, issueDate=1654116824281, maxDate=0, sequenceNumber=0, masterKeyId=0 this: 1 is: 1 a: 1 text: 1 file: 1 22/06/01 20:54:13 INFO org.sparkproject.jetty.server.AbstractConnector: Stopped