A multilocação segura baseada em conta de serviço do Serviço Gerenciado para Apache Spark 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 multilocatário 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 Google Cloud recursos usando uma conta de serviço mapeada.
Este documento mostra como criar um cluster multilocatário do Serviço Gerenciado para Apache Spark e, em seguida, iniciar e conectar um notebook do 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. 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 do 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 Serviço Gerenciado para Apache Spark não são compatíveis.
Criar um cluster multilocatário
Você ativa o recurso multilocatário ao criar um cluster do Serviço Gerenciado para Apache Spark.
Console
Crie um cluster usando o Google Cloud console, da seguinte maneira:
- Noconsole, acesse a página Criar cluster. Google Cloud
- Clique em Configuração adicional para expandir essa seção.
- Edite Componentes opcionais.
- Marque a caixa de seleção Ativar componentes na interface para ativar as interfaces de componentes e, em seguida, marque a caixa de seleção Jupyter Kernel Gateway.
- Clique em Salvar.
- Edite Personalização e outros.
- Para permitir a adição ou remoção de usuários multilocatários sem recriar o cluster (consulte Atualizar usuários de clusters multilocatários), na seção Propriedades do cluster, clique em + Adicionar propriedades.
- Adicione a seguinte propriedade: Prefixo:
dataproc, Chave:dataproc.dynamic.multi.tenancy.enabled, Valor:trueRecomendação: como o YARN consome recursos significativos do cluster para cada kernel de notebook em execução em um cluster multilocatário, 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 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5 - Clique em Salvar.
- Edite Segurança.
- Em Acesso ao projeto, marque a caixa de seleção Ativa o escopo da plataforma do Cloud para este cluster.
- Em Multilocação segura, selecione Ativar.
- Em Mapeamento multilocatário, clique em Adicionar mapeamento multilocatário para mapear contas de usuário para contas de serviço.
- Clique em Salvar.
- Confirme outras configurações e clique em Criar cluster.
gcloud
Use o gcloud dataproc clusters create command com a
--secure-multi-tenancy-user-mapping
flag 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.
Usar um arquivo de mapeamento YAML: Em vez de usar a--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-mappingflag para especificar os mapeamentos de conta de usuário para conta de serviço, use a--identity-config-fileflag para especificar um arquivo YAML local ou do Cloud Storage que contenha os mapeamentos. Cada linha no arquivo de mapeamento mapeia uma conta de usuário para 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": Esta propriedade permite adicionar ou remover usuários de clusters multilocatários sem recriar o cluster (consulte Atualizar usuários de clusters multilocatários).Recomendação: como o YARN consome recursos significativos do cluster para cada kernel de notebook em execução em um cluster multilocatário, 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
--service-account flagpara especificar uma conta de serviço de VM personalizada para o cluster. Se você omitir essa flag, a conta de serviço de VM do cluster padrão,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 represente 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 execute a representação.--enable-component-gatewaye--optional-components=JUPYTER_KERNEL_GATEWAY: Ativar o gateway de componentes do Serviço Gerenciado para Apache Spark e o Jupyter Kernel Gateway permite que vários usuários conectem os notebooks do Jupyter ao cluster multilocatário.
API
Use o 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 multilocatário, os usuários mapeados, as contas de serviço mapeadas e a conta de serviço de VM do cluster precisam ter as permissões do IAM necessárias para acessar os recursos.
Permissões de usuário mapeadas
Cada usuário mapeado precisa ter as permissões dataproc.clusters.get e dataproc.clusters.use, que são necessárias para que o usuário acesse e se conecte aos kernels de notebook em execução no cluster multilocatário. É possível conceder o
papel de Editor do Serviço Gerenciado para Apache Spark (roles/dataproc.editor),
que contém essas permissões (consulte Conceder um único papel do IAM),
ou criar um papel personalizado com estas
permissões.
Permissões de conta de serviço mapeadas
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 de VM do cluster multilocatário
precisa ter a iam.serviceAccounts.getAccessToken permissão
em cada conta de serviço mapeada. É possível conceder o
papel de Criador do token da conta de serviço (roles/iam.serviceAccountTokenCreator), que contém essa permissão (consulte Gerenciar o acesso a contas de serviço),
ou criar um papel personalizado com essa permissão.
Consulte Conta de serviço de VM do Serviço Gerenciado para Apache Spark
para informações sobre outros papéis de conta de serviço de VM.
Conectar notebooks do Jupyter a um kernel de cluster multilocatário
Os usuários de clusters multilocatários mapeados podem conectar o Vertex AI Workbench ou o notebook do Jupyter gerenciado pelo usuário aos kernels instalados no cluster multilocatário.
Notebook da Vertex AI
Para criar e conectar um notebook do 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 JupyterLab" da sua instância.
- Em Notebooks do cluster do Dataproc, clique no
PySpark (cluster YARN) em
MULTI_TENANCY_CLUSTER_NAMEcard para se conectar e iniciar um novo notebook do Jupyter PySpark.
Notebook gerenciado pelo usuário
Para criar e conectar um notebook do Jupyter gerenciado pelo usuário ao cluster multilocatário do Serviço Gerenciado para Apache Spark, siga as etapas para instalar a extensão do JupyterLab na VM gerenciada pelo usuário.
Atualizar usuários de clusters multilocatários (visualização)
Se você definir a propriedade do cluster dataproc:dataproc.dynamic.multi.tenancy.enabled
como true ao criar um cluster multilocatário,
será possível adicionar, remover ou substituir usuários de clusters multilocatários após a criação do cluster.
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 multilocatário 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 multilocatário. A flag aceita as contas de usuário dos usuários a serem removidos.
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 update com a flag --identity-config-file para substituir o conjunto de usuários atual 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 mapeamentos de conta de novo usuário para conta de serviço. Cada linha no arquivo de mapeamento mapeia uma conta de usuário para 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