A multilocação segura com base na conta de serviço do Dataproc, chamada "multilocação segura" abaixo, permite compartilhar um cluster com vários usuários, com um conjunto de usuários mapeados para contas de serviço quando o cluster é criado. Com a multilocação segura, os usuários podem enviar cargas de trabalho interativas para o cluster com identidades de usuário isoladas.
Quando um usuário envia um job para o cluster, o job:
é executado como um usuário específico do SO com uma versão específica do Kerberos
acessa os recursos do Google Cloud usando as credenciais mapeadas da conta de serviço.
Considerações e limitações
Quando você cria um cluster com a multilocação segura ativada:
Só é possível enviar jobs pela API Jobs do Dataproc.
O cluster está disponível apenas para usuários com contas de serviço mapeadas. Por exemplo, os usuários não mapeados não podem executar jobs no cluster.
As contas de serviço só podem ser mapeadas para usuários do Google, não para grupos do Google.
O gateway de componentes do Dataproc não está ativado.
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
.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 é aceita.
Os fluxos de trabalho do Dataproc não são compatíveis.
Como criar um cluster de multilocação seguro
Para criar um cluster de multilocação seguro do Dataproc, use a sinalização
--secure-multi-tenancy-user-mapping
para especificar uma lista de mapeamentos de usuário para conta de serviço.
Exemplo:
O comando a seguir cria um cluster, com o usuário bob@my-company.com
mapeado para a conta de serviço service-account-for-bob@iam.gserviceaccount.com
e o usuário alice@my-company.com
mapeado para a conta de serviço service-account-for-alice@iam.gserviceaccount.com
.
gcloud dataproc clusters create my-cluster \ --secure-multi-tenancy-user-mapping="bob@my-company.com:service-account-for-bob@iam.gserviceaccount.com,alice@my-company.com:service-account-for-alice@iam.gserviceaccount.com" \ --scopes=https://www.googleapis.com/auth/iam \ --service-account=cluster-service-account@iam.gserviceaccount.com \ --region=region \ other args ...
Como alternativa, é possível armazenar a lista de mapeamentos de usuário para conta de serviço em um arquivo local ou YAML ou JSON do Cloud Storage. Use a sinalização --identity-config-file
para especificar o local do arquivo.
Exemplo de arquivo de configuração de identidade:
user_service_account_mapping: bob@my-company.com: service-account-for-bob@iam.gserviceaccount.com alice@my-company.com: service-account-for-alice@iam.gserviceaccount.com
Comando de amostra para criar o cluster usando a sinalização --identity-config-file
:
gcloud dataproc clusters create my-cluster \ --identity-config-file=local or "gs://bucket" /path/to/identity-config-file \ --scopes=https://www.googleapis.com/auth/iam \ --service-account=cluster-service-account@iam.gserviceaccount.com \ --region=region \ other args ...
Observações:
Conforme mostrado nos comandos acima, o cluster
--scopes
precisa incluir pelo menoshttps://www.googleapis.com/auth/iam
, o que é necessário para que a conta de serviço do cluster execute a representação.A conta de serviço do cluster precisa ter permissões para personificar as contas de serviço mapeadas para os usuários. Consulte Permissões da conta de serviço.
Recomendação: use contas de serviço de cluster diferentes para clusters diferentes, permitindo que cada conta de serviço personifique apenas um grupo limitado e pretendido de contas de serviço de usuário mapeadas.