Crie um cluster multiinquilino com contas de serviço

A multi-posse segura baseada em contas de serviço do Dataproc permite-lhe partilhar um cluster com vários utilizadores, com um conjunto de contas de utilizador mapeadas para contas de serviço quando o cluster é criado. Os utilizadores podem enviar cargas de trabalho interativas, como o bloco de notas do Jupyter, para kernels em execução no cluster multi-inquilino com ambientes de utilizador isolados.

Quando um utilizador envia uma tarefa para o cluster multi-inquilino:

  • A tarefa é executada como um utilizador do SO específico com um principal Kerberos específico.

  • A tarefa acede aos Google Cloud recursos através de uma conta de serviço mapeada.

Este documento mostra como criar um cluster multi-inquilino do Dataproc e, em seguida, iniciar e associar um bloco de notas do Jupyter a um kernel do PySpark em execução no cluster.

Considerações e limitações

Quando cria um cluster multiinquilino:

  • O cluster só está disponível para utilizadores da Conta Google com contas de serviço mapeadas. Não é possível mapear grupos Google. Os utilizadores não mapeados não podem executar tarefas no cluster.

  • O Kerberos está ativado e configurado no cluster para uma comunicação segura no cluster. A autenticação do utilizador final através do Kerberos não é suportada.

  • O acesso SSH direto ao cluster e às funcionalidades do Compute Engine, como a capacidade de executar scripts de arranque em VMs do cluster, está bloqueado. Além disso, não é possível executar tarefas com privilégios sudo.

  • Os fluxos de trabalho do Dataproc não são suportados.

Crie um cluster multiinquilino

Ativa a funcionalidade multi-inquilino quando cria um cluster do Dataproc.

Consola

Crie um cluster do Dataproc através da Google Cloud consola, da seguinte forma:

  1. Na Google Cloud consola, aceda à página do Dataproc Crie um cluster do Dataproc no Compute Engine: Crie um cluster do Dataproc no Compute Engine

  2. No painel Configurar cluster:

    1. Em Componentes:
      1. Em Component Gateway, selecione Ativar Component Gateway.
      2. Em Componentes opcionais, selecione Jupyter Kernel Gateway para permitir que vários utilizadores associem os respetivos blocos de notas do Jupyter ao cluster multiinquilino.
  3. No painel Personalizar conjunto:

    1. Em Propriedades do cluster:

      1. Para permitir a adição ou a remoção de utilizadores multiinquilinos sem recriar o cluster (consulte o artigo Atualize os utilizadores do cluster multiinquilino), clique em Adicionar propriedades, adicione o prefixo dataproc, a propriedade dynamic.multi.tenancy.enabled e defina o respetivo valor como true.

        Recomendação: uma vez que o YARN consome recursos significativos do cluster para cada kernel do bloco de notas em execução num cluster multiinquilino, adicione propriedades do Spark e do YARN para aumentar a atribuição de recursos.

        Exemplo:

        Prefixo Chave Valor
        faísca spark.driver.memory 5G
        faísca spark.executor.memory 5G
        faísca spark.executor.cores 200
        capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5

  4. No painel de gestão de segurança:

    1. Em Acesso ao projeto, selecione Ativa o âmbito da plataforma na nuvem para este cluster.
    2. Em Secure Multi Tenancy:
      1. Selecione Ativar.
      2. Em Mapeamento de multi-posse:
        1. Clique em Adicionar mapeamento multi-inquilino para adicionar mapeamentos de contas de utilizador a contas de serviço.
  5. Confirme ou introduza outras definições do cluster (consulte o artigo Crie um cluster do Dataproc através da Google Cloud consola).

  6. Clique em Criar.

gcloud

Use o comando gcloud dataproc clusters create command com a flag --secure-multi-tenancy-user-mapping para especificar uma lista de mapeamentos de contas de utilizador para contas de serviço.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \
    --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \
    --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/iam \
    --optional-components=JUPYTER_KERNEL_GATEWAY \
    --enable-component-gateway \
    other args ...

Notas:

  • USER_MAPPINGS: especifique uma lista separada por vírgulas que mapeie as contas de utilizador para as contas de serviço.

    --secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    
    Use um ficheiro de mapeamento YAML: em vez de usar a flag --secure-multi-tenancy-user-mapping para especificar os mapeamentos da conta de utilizador para a conta de serviço, pode usar a flag --identity-config-file para especificar um ficheiro YAML local ou do Cloud Storage que contenha os mapeamentos.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Cada linha no ficheiro de mapeamento mapeia uma conta de utilizador para uma conta de serviço. A primeira linha contém o cabeçalho user_service_account_mapping:.
    user_service_account_mapping:
    UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com
    UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com
    UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    

  • --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": esta propriedade permite adicionar ou remover utilizadores de clusters multiinquilinos sem recriar o cluster (consulte Atualize os utilizadores de clusters multiinquilinos).

    Recomendação: uma vez que o YARN consome recursos significativos do cluster para cada kernel do bloco de notas em execução num cluster multiinquilino, adicione propriedades do Spark e do YARN para aumentar a atribuição de recursos.

    Exemplo:

    --properties=" \
    spark:spark.driver.memory=5g,\
    spark:spark.executor.memory=5g,\
    spark:spark.executor.cores=200, \
    capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
    
  • CLUSTER_SERVICE_ACCOUNT (Opcional): pode usar o comando --service-account flag para especificar uma conta de serviço de VM personalizada para o cluster. Se omitir este sinalizador, é usada a conta de serviço de VM do cluster predefinida.PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Recomendação: use contas de serviço de cluster diferentes para clusters diferentes para permitir que a conta de serviço de VM de cada cluster se faça passar por apenas um grupo limitado de contas de serviço de utilizador mapeadas.

  • --scopes=https://www.googleapis.com/auth/iam é necessário para que a conta de serviço do cluster faça a representação.

  • --enable-component-gateway e --optional-components=JUPYTER_KERNEL_GATEWAY: A ativação do Dataproc Component Gateway e do Jupyter Kernel Gateway permite que vários utilizadores associem os respetivos blocos de notas Jupyter ao cluster multiinquilino.

API

Use o elemento SecurityConfig.IdentityConfig.userServiceAccountMapping field para especificar uma lista de mapeamentos de contas de utilizador para contas de serviço.

Conceda autorizações de gestão de identidade e de acesso

Para associar blocos de notas de utilizadores a kernels de blocos de notas executados num cluster multiinquilino, os utilizadores mapeados, as contas de serviço mapeadas e a conta de serviço da VM do cluster têm de ter as autorizações do IAM necessárias para aceder aos recursos.

Autorizações do utilizador mapeadas

Cada utilizador mapeado tem de ter as autorizações dataproc.clusters.get e dataproc.clusters.use, que são necessárias para o utilizador aceder e estabelecer ligação aos kernels do bloco de notas em execução no cluster multiinquilino. Pode conceder a função de Editor do Dataproc (roles/dataproc.editor), que contém estas autorizações (consulte o artigo Conceda uma única função de IAM), ou criar uma função personalizada com estas autorizações.

Autorizações de contas de serviço mapeadas

Cada conta de serviço mapeada tem de ter as autorizações necessárias para a aplicação de bloco de notas do utilizador mapeado, como acesso a um contentor do Cloud Storage ou acesso a uma tabela do BigQuery (consulte o artigo Gerir o acesso a contas de serviço).

Autorizações da conta de serviço da VM

A conta de serviço da VM do cluster multiinquilino tem de ter a autorização iam.serviceAccounts.getAccessToken em cada conta de serviço mapeada. Pode conceder a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator), que contém esta autorização (consulte o artigo Faça a gestão do acesso a contas de serviço), ou criar uma função personalizada com esta autorização. Consulte o artigo Conta de serviço da VM do Dataproc para obter informações sobre outras funções da conta de serviço da VM.

Associe blocos de notas do Jupyter a um kernel de cluster multiinquilino

Os utilizadores do cluster multi-inquilino mapeados podem ligar o respetivo Vertex AI Workbench ou bloco de notas do Jupyter gerido pelo utilizador aos kernels instalados no cluster multi-inquilino.

Bloco de notas do Vertex AI

Para criar e associar um bloco de notas do Jupyter ao cluster multiinquilino, faça o seguinte:

  1. Crie uma instância do Vertex AI Workbench.
  2. No separador Workbench Instances, clique no link Open JupyterLab da sua instância.
  3. Em Blocos de notas do cluster do Dataproc, clique no cartão PySpark (cluster YARN) no MULTI_TENANCY_CLUSTER_NAME para se ligar e iniciar um novo bloco de notas do Jupyter PySpark.

Bloco de notas gerido pelo utilizador

Para criar e associar um bloco de notas do Jupyter gerido pelo utilizador ao seu cluster multi-inquilino do Dataproc, siga os passos para instalar a extensão do JupyterLab na VM gerida pelo utilizador.

Atualize os utilizadores do cluster multiinquilino (pré-visualização)

Se definir a propriedade dataproc:dataproc.dynamic.multi.tenancy.enabled do cluster como true quando criou um cluster multiinquilino, pode adicionar, remover ou substituir utilizadores do cluster multiinquilino após a criação do cluster.

Adicionar utilizadores

O comando de atualização seguinte usa a flag --add-user-mappings para adicionar dois novos mapeamentos de contas de utilizador para contas de serviço ao cluster multi-inquilino seguro.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com

Remover utilizadores

O comando de atualização seguinte usa a flag --remove-user-mappings para remover dois utilizadores do cluster multi-inquilino. A flag aceita as contas de utilizador dos utilizadores a remover.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --remove-user-mappings=UserB@my-company.com,UserC@my-company.com

Substitua utilizadores

Pode usar o comando update com a flag --identity-config-file para substituir o conjunto de utilizadores existente por um novo conjunto. Esta flag é útil para adicionar e remover utilizadores com um comando de atualização.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --identity-config-file=identity-config.yaml

Notas:

  • --identity-config-file: especifique um ficheiro YAML local ou do Cloud Storage que contenha os novos mapeamentos de contas de utilizador para contas de serviço.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Cada linha no ficheiro de mapeamento mapeia uma conta de utilizador para uma conta de serviço. A primeira linha contém o cabeçalho user_service_account_mapping:.
    user_service_account_mapping:
    new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com
    new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com