O plug-in do Cloud Storage do Dataproc Ranger, 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 de cluster do Dataproc. O serviço de autorização avalia as solicitações do conector do Cloud Storage em relação às políticas do Ranger e, se a solicitação for permitida, retorna um token de acesso para a conta de serviço da VM do cluster.
O plug-in do Ranger Cloud Storage depende do Kerberos para autenticação e se integra ao suporte do conector do Cloud Storage para tokens de delegação. Os tokens de delegação são armazenados em um banco de dados MySQL no nó mestre do cluster. A senha raiz do banco de dados é especificada pelas propriedades do cluster quando você cria o cluster do Dataproc.
Antes de começar
Conceda o papel de Criador de token da conta de serviço e o papel de Administrador de função do IAM na conta de serviço da VM do Dataproc no seu projeto.
Instalar o plug-in do Cloud Storage do Ranger
Execute os comandos abaixo em uma janela de terminal local ou no Cloud Shell para instalar o plug-in do Cloud Storage do Ranger ao criar um cluster do Dataproc.
Defina as 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
Observações:
- CLUSTER_NAME: o nome do novo cluster.
- REGION: a região em que o cluster será criado, por exemplo,
us-west1
. - KERBEROS_KMS_KEY_URI e KERBEROS_PASSWORD_URI: consulte Configurar a senha principal raiz do Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI e RANGER_ADMIN_PASSWORD_GCS_URI: consulte Configurar a senha de administrador do Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI e RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: configure uma senha do MySQL seguindo o mesmo procedimento usado para configurar uma senha de administrador do Ranger.
Criar um cluster do Dataproc
Execute o comando a seguir para criar um cluster do Dataproc e instalar o plug-in do Cloud Storage do Ranger 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}"
Observações:
- Versão da imagem 1.5:se você estiver criando um cluster com a versão da imagem 1.5 (consulte
Como selecionar versões),
adicione a flag
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher
para instalar a versão do conector necessária.
Verificar a instalação do plug-in do Ranger Cloud Storage
Depois que a criação do cluster for concluída, um tipo de serviço GCS
, chamado gcs-dataproc
,
vai aparecer na interface da Web de administrador do Ranger.
Políticas padrão do plug-in do Ranger Cloud Storage
O serviço gcs-dataproc
padrão tem as seguintes políticas:
Políticas para ler e gravar nos buckets temporários e de preparo do cluster do Dataproc.
Uma política
all - bucket, object-path
, que permite que todos os usuários acessem os metadados de todos os objetos. Esse acesso é necessário para permitir que o conector do Cloud Storage execute operações do HCFS (Hadoop Compatible Filesystem).
Dicas de uso
Acesso do app às pastas do bucket
Para acomodar apps que criam arquivos intermediários no bucket do Cloud Storage,
é possível conceder permissões Modify Objects
, List Objects
e Delete Objects
no caminho do bucket do Cloud Storage e selecionar
o modo recursive
para estender as permissões a subcaminhos no caminho especificado.
Medidas de proteção
Para evitar a evasão do plug-in:
Conceda à conta de serviço da VM acesso aos recursos nos buckets do Cloud Storage para permitir que ela conceda acesso a esses recursos com tokens de acesso de escopo reduzido. Consulte Permissões do IAM para o Cloud Storage. Além disso, remova o acesso dos usuários aos recursos do bucket para evitar o acesso direto.
Desative
sudo
e outros meios de acesso raiz em VMs de cluster, incluindo a atualização do arquivosudoer
, para evitar falsificação de identidade ou alterações nas configurações de autenticação e autorização. Para mais informações, consulte as instruções do Linux para adicionar/remover privilégios de usuáriosudo
.Use
iptable
para bloquear solicitações de acesso direto ao Cloud Storage de VMs de cluster. Por exemplo, é possível 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.
Jobs do Spark, Hive-on-MapReduce e Hive-on-Tez
Para proteger detalhes sensíveis de autenticação do usuário e reduzir a carga no centro de distribuição de chaves (KDC, na sigla em inglês), o driver do Spark não distribui credenciais do Kerberos para executores. Em vez disso, o driver do Spark obtém um token de delegação do plug-in do Ranger Cloud Storage e o distribui para os executores. Os executores usam o token de delegação para se autenticar no plug-in do Ranger Cloud Storage, trocando-o por um token de acesso do Google que permite o acesso ao Cloud Storage.
Os jobs Hive-on-MapReduce e Hive-on-Tez também usam tokens para acessar o Cloud Storage. Use as propriedades a seguir para receber tokens e acessar buckets do Cloud Storage especificados ao enviar os seguintes tipos de jobs:
Jobs do Spark:
--conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
Jobs do Hive-on-MapReduce:
--hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
Jobs Hive-on-Tez:
--hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
Cenário de job do Spark
Um job de contagem de palavras do Spark falha quando é executado em uma janela de terminal em uma VM do 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
Observações:
- FILE_BUCKET: bucket do Cloud Storage para acesso ao 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'
Observações:
- O
spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET}
é necessário em um ambiente ativado pelo Kerberos.
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 usando o Gerenciador de acesso na interface da Web do administrador do Ranger
para adicionar username
à lista de usuários que têm List Objects
e outras permissões de bucket
temp
.
A execução do job 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'
Uma política é adicionada para conceder ao usuário acesso de leitura ao caminho wordcount.text
do Cloud Storage.
O job é executado e concluído.
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