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:

  • 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.

  • 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.

  • 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 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 conta de serviço para usuário em um arquivo YAML ou JSON local ou 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

Exemplo de comando 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 a conta de serviço do cluster executar 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 Como gerenciar a representação 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.