Plug-in Ranger do Cloud Storage

O plug-in Dataproc Ranger do Cloud Storage, disponível com As versões de imagem 1.5 e 2.0 do Dataproc ativam um serviço de autorização em cada VM do cluster do Dataproc. O serviço de autorização avalia Solicitações do conector do Cloud Storage às políticas de Ranger e, se a solicitação for permitida, retorna um token de acesso para o cluster Conta de serviço de VM.

O plug-in Ranger para Cloud Storage depende do Kerberos para autenticação; e integra-se ao suporte do conector do Cloud Storage para tokens de delegação. Os tokens de delegação são armazenados MySQL no nó mestre do cluster. A senha raiz do banco de dados é especificado nas propriedades do cluster quando Crie o cluster do Dataproc.

Antes de começar

Conceda Criador de token de conta de serviço e o papel de Administrador de papéis do IAM no Conta de serviço da VM do Dataproc em seu projeto.

Instalar o plug-in do Ranger para Cloud Storage

Execute os comandos a seguir em uma janela de terminal local ou em Cloud Shell para instalar o Ranger plug-in do Cloud Storage 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:

Criar um cluster do Dataproc

Execute o comando a seguir para criar um cluster do Dataproc e instalar o Ranger plug-in do 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}"

Observações:

  • Versão da imagem 1.5: se você estiver criando um cluster da versão de imagem 1.5 (consulte Seleção de versões), adicione a sinalização --metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher para instalar a versão necessária do conector.

Verificar a instalação do plug-in Ranger para Cloud Storage

Após a conclusão da criação do cluster, um tipo de serviço GCS, chamado gcs-dataproc, aparece na interface da Web do administrador do Ranger.

Políticas padrão do plug-in Ranger para Cloud Storage

O serviço gcs-dataproc padrão tem as seguintes políticas:

Dicas de uso

Acesso de apps às pastas do bucket

Para acomodar apps que criam arquivos intermediários no bucket do Cloud Storage, é possível conceder acesso a Modify Objects, List Objects e Delete Objects no caminho do bucket do Cloud Storage e selecione Modo recursive para estender as permissões para subcaminhos no caminho especificado.

Medidas de proteção

Para ajudar a evitar a fraude do plug-in:

  • Conceda Conta de serviço de VM aos recursos na sua rede do Cloud Storage, para permitir que ele conceda acesso a esses recursos com tokens de acesso de escopo diminuído Consulte Permissões do IAM para o Cloud Storage. Além disso, remover o acesso dos usuários aos recursos do bucket para evitar o acesso direto dos usuários ao bucket.

  • Desativar sudo e outros meios de acesso raiz nas VMs do cluster, incluindo atualização o arquivo sudoer, para evitar falsificação de identidade ou alterações nas autenticações e as configurações de autorização. Para mais informações, consulte as instruções do Linux para adicionar/remover sudo privilégios de usuário.

  • Use iptable para bloquear solicitações de acesso direto ao Cloud Storage das VMs do 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 (consulte block_vm_metadata_server.sh, um script de inicialização que usa regras iptable para bloquear o acesso ao servidor de metadados da VM).

Jobs do Spark, Hive-on-MapReduce e Hive-on-Tez

Para proteger os detalhes confidenciais de autenticação do usuário e reduzir a carga da Key Distribution Center (KDC), o driver do Spark não distribui Kerberos credenciais aos executores. Em vez disso, o driver do Spark recebe uma permissão token do plug-in Ranger do Cloud Storage e, em seguida, distribui a token para os executores. Os executores usam o token de delegação para se autenticarem no Plug-in Ranger do 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 Cloud Storage. Use as seguintes propriedades para receber tokens para acessar buckets especificados do Cloud Storage ao enviar os seguintes tipos de trabalho:

  • 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 do Hive-on-Tez:

    --hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
    

Cenário do job do Spark

Um job de contagem de palavras do Spark falha quando executado uma janela do terminal em uma VM de cluster do Dataproc o plug-in Ranger para 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:

  • spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} é obrigatório em um Kerberos do Google Cloud.

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 com 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 outro bucket temp permissões.

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 wordcount.text. Caminho do Cloud Storage.

O job é executado e concluído com sucesso.

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