Multilocação segura com base na conta de serviço do Dataproc

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.

  • Só é possível mapear as contas de serviço para usuários do Google, e não os 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 é compatível.

  • 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 menos https://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 de cluster precisa ter permissões para representar 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.