A multilocação segura com base na conta de serviço do Dataproc permite compartilhar um cluster com vários usuários, com um conjunto de contas de usuário mapeadas para contas de serviço quando o cluster é criado. Os usuários podem enviar cargas de trabalho interativas, como notebooks do Jupyter, para kernels em execução no cluster multitenant com ambientes de usuário isolados.
Quando um usuário envia um job para o cluster multilocatário:
O job é executado como um usuário específico do SO com uma versão específica do Kerberos.
O job acessa recursos Google Cloud usando uma conta de serviço mapeada.
Este documento mostra como criar um cluster multitenant do Dataproc e, em seguida, iniciar e conectar um notebook Jupyter a um kernel do PySpark em execução no cluster.
Considerações e limitações
Ao criar um cluster multilocatário:
O cluster está disponível apenas para usuários da Conta do Google com contas de serviço mapeadas. Não é possível mapear grupos do Google. Os usuários não mapeados não podem executar jobs no cluster.
O Kerberos está ativado e configurado no cluster para proteger a comunicação intracluster. A autenticação de usuário final pelo Kerberos não é compatível.
O acesso SSH direto ao cluster e aos recursos do Compute Engine, como a execução de scripts de inicialização em VMs do cluster, é bloqueado. Além disso, os jobs não podem ser executados com privilégios
sudo
.Os fluxos de trabalho do Dataproc não são compatíveis.
Criar um cluster multilocatário
Você ativa o recurso multitenant ao criar um cluster do Dataproc.
Console
Crie um cluster do Dataproc usando o console Google Cloud , da seguinte maneira:
No console do Google Cloud , acesse a página do Dataproc Criar um cluster do Dataproc no Compute Engine: Criar um cluster do Dataproc no Compute Engine
No painel Configurar cluster:
- Em Componentes:
- Em Gateway de componentes, selecione Ativar gateway de componentes.
- Em Componentes opcionais, selecione Jupyter Kernel Gateway para permitir que vários usuários conectem os notebooks do Jupyter ao cluster multitenant.
- Em Componentes:
No painel Personalizar cluster:
Em Propriedades do cluster:
Para permitir a adição ou remoção de usuários multitenant sem recriar o cluster (consulte Atualizar usuários de cluster multitenant), clique em Adicionar propriedades, adicione o prefixo
dataproc
, a propriedadedynamic.multi.tenancy.enabled
e defina o valor comotrue
.Recomendação: como o YARN consome recursos significativos do cluster para cada kernel de notebook em execução em um cluster multitenant, adicione propriedades do Spark e do YARN para aumentar a alocação de recursos.
Exemplo:
Prefixo Chave Valor 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
No Painel de controle de segurança:
- Em Acesso ao projeto, selecione Ativa o escopo da plataforma de nuvem para este cluster.
- Em Multilocação segura:
- Selecione Ativar.
- Em Mapeamento de multilocação:
- Clique em Adicionar mapeamento multitenancy para adicionar mapeamentos de contas de usuário para contas de serviço.
Confirme ou insira outras configurações do cluster. Consulte Criar um cluster do Dataproc usando o console Google Cloud .
Clique em Criar.
gcloud
Use a flag gcloud dataproc clusters create command
com --secure-multi-tenancy-user-mapping
para especificar uma lista de mapeamentos de conta de usuário para conta 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 ...
Observações:
USER_MAPPINGS: especifique uma lista separada por vírgulas que mapeia contas de usuário para contas de serviço.
Use um arquivo de mapeamento YAML:em vez de usar a flag--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
--secure-multi-tenancy-user-mapping
para especificar os mapeamentos de conta de usuário para conta de serviço, use a flag--identity-config-file
para especificar um arquivo YAML local ou do Cloud Storage que contenha os mapeamentos. Cada linha no arquivo de mapeamento associa uma conta de usuário a uma conta de serviço. A primeira linha contém o cabeçalho--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
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"
: essa propriedade permite adicionar ou remover usuários do cluster multitenant sem recriar o cluster (consulte Atualizar usuários do cluster multitenant).Recomendação: como o YARN consome recursos significativos do cluster para cada kernel de notebook em execução em um cluster multitenant, adicione propriedades do Spark e do YARN para aumentar a alocaçã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): é possível usar o
--service-account flag
para especificar uma conta de serviço de VM personalizada para o cluster. Se você omitir essa flag, a conta de serviço padrão da VM do cluster,PROJECT_NUMBER-compute@developer.gserviceaccount.com
, será usada.Recomendação:use contas de serviço de cluster diferentes para clusters diferentes, permitindo que cada conta de serviço de VM do cluster personifique apenas um grupo limitado de contas de serviço de usuário 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
: ao ativar o gateway de componentes do Dataproc e o Jupyter Kernel Gateway, vários usuários podem conectar os notebooks do Jupyter ao cluster multitenant.
API
Use SecurityConfig.IdentityConfig.userServiceAccountMapping field
para especificar uma lista de mapeamentos de conta de usuário para conta de serviço.
Conceder permissões do Identity and Access Management
Para conectar notebooks de usuários a kernels de notebook em execução em um cluster multitenant, os usuários mapeados, as contas de serviço mapeadas e a conta de serviço da VM do cluster precisam ter as permissões do IAM necessárias para acessar recursos.
Permissões de usuário mapeadas
Cada usuário mapeado precisa ter as permissões dataproc.clusters.get
e dataproc.clusters.use
necessárias para acessar e se conectar aos kernels de notebook
em execução no cluster multitenant. É possível conceder o papel de
Editor do Dataproc (roles/dataproc.editor
),
que contém essas permissões (consulte Conceder um único papel do IAM),
ou criar um papel personalizado com essas
permissões.
Permissões mapeadas da conta de serviço
Cada conta de serviço mapeada precisa ter as permissões necessárias para o aplicativo de notebook do usuário mapeado, como acesso a um bucket do Cloud Storage ou a uma tabela do BigQuery. Consulte Gerenciar o acesso a contas de serviço.
Permissões da conta de serviço da VM
A conta de serviço da VM do cluster multitenant precisa ter a permissão iam.serviceAccounts.getAccessToken
em cada conta de serviço mapeada. É possível conceder o papel de
Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator
), que contém essa permissão. Consulte Gerenciar o acesso às contas de serviço ou crie um papel personalizado com essa permissão.
Consulte Conta de serviço da VM do Dataproc para informações sobre outros papéis de conta de serviço da VM.
Conectar notebooks Jupyter a um kernel de cluster multilocatário
Os usuários mapeados do cluster multitenant podem conectar o Vertex AI Workbench ou o notebook Jupyter gerenciado pelo usuário aos kernels instalados no cluster multitenant.
Notebook da Vertex AI
Para criar e conectar um notebook Jupyter ao cluster multilocatário, faça o seguinte:
- Crie uma instância do Vertex AI Workbench.
- Na guia Instâncias do Workbench, clique no link Abrir o JupyterLab da sua instância.
- Em Notebooks de cluster do Dataproc, clique no card
PySpark (cluster YARN) em
MULTI_TENANCY_CLUSTER_NAME
para se conectar e iniciar um novo notebook do Jupyter PySpark.
Notebook gerenciado pelo usuário
Para criar e conectar um notebook Jupyter gerenciado pelo usuário ao cluster multitenant do Dataproc, siga as etapas para instalar a extensão do JupyterLab na VM gerenciada pelo usuário.
Atualizar usuários do cluster multitenant (prévia)
Se você definir a propriedade do cluster dataproc:dataproc.dynamic.multi.tenancy.enabled
como true
ao criar um cluster multitenant, será possível adicionar, remover ou substituir usuários do cluster multitenant após a criação dele.
Adicionar usuários
O comando de atualização a seguir usa a flag --add-user-mappings
para adicionar dois novos
mapeamentos de conta de usuário para conta de serviço ao cluster multitenant 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 usuários
O comando de atualização a seguir usa a flag --remove-user-mappings
para remover dois usuários do cluster multitenant. A flag aceita as contas de usuário que serão removidas.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
Substituir usuários
É possível usar o comando de atualização com a flag --identity-config-file
para substituir o conjunto atual de usuários por um novo. Essa flag é útil para
adicionar e remover usuários com um comando de atualização.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
Observações:
--identity-config-file
: especifique um arquivo YAML local ou do Cloud Storage que contenha os novos mapeamentos de conta de usuário para conta de serviço. Cada linha no arquivo de mapeamento associa uma conta de usuário a uma conta de serviço. A primeira linha contém o cabeçalho--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
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