Plug-in do Ranger Cloud Storage

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

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 aos subcaminhos no caminho especificado.

Medidas de proteção

Para ajudar a 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 arquivo sudoer, para evitar a 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ário sudo.

  • Use iptable para bloquear solicitações de acesso direto ao Cloud Storage de 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 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 para administradores 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