Contas de serviço do Managed Service for Apache Spark

Nesta página, descrevemos as contas de serviço e os escopos de acesso da VM, além de como eles são usados com o Serviço gerenciado para Apache Spark.

Requisito de segurança a partir de 3 de agosto de 2020:os usuários do Serviço gerenciado para Apache Spark precisam ter a permissão de conta de serviço ActAs para implantar recursos do Serviço gerenciado para Apache Spark, como criar clusters e enviar jobs. O papel de Usuário da conta de serviço contém essa permissão. Consulte Papéis para autenticação de conta de serviço para informações sobre os papéis necessários do Serviço gerenciado para Apache Spark.

Ativação para usuários atuais do Serviço Gerenciado para Apache Spark : os usuários atuais do Serviço Gerenciado para Apache Spark a partir de 3 de agosto de 2020 podem ativar esse requisito de segurança. Consulte Como proteger o Serviço Gerenciado para Apache Spark, o Dataflow e o Cloud Data Fusion.

O que são contas de serviço?

Uma conta de serviço é uma conta especial que pode ser usada por serviços e aplicativos executados em uma instância de máquina virtual (VM) do Compute Engine para interagir com outras APIs Google Cloud . Os aplicativos podem usar as credenciais de conta de serviço para se autorizar em um conjunto de APIs e realizar ações na VM dentro das permissões concedidas à conta de serviço.

Contas de serviço do cluster do Serviço Gerenciado para Apache Spark

As contas de serviço a seguir precisam ter as permissões necessárias para executar ações do Serviço Gerenciado para Apache Spark no projeto em que o cluster está localizado.

Conta de serviço da VM do Serviço Gerenciado para Apache Spark

As VMs em um cluster do Serviço Gerenciado para Apache Spark usam uma conta de serviço para operações do plano de dados do Serviço Gerenciado para Apache Spark. A conta de serviço padrão do Compute Engine, project_number-compute@developer.gserviceaccount.com, é usada como a conta de serviço da VM, a menos que você especifique uma conta de serviço personalizada ao criar um cluster. A conta de serviço da VM precisa ter a função Worker do Serviço Gerenciado para Apache Spark, que inclui as permissões necessárias para operações do plano de dados do Serviço Gerenciado para Apache Spark. Para mais informações, consulte Funções do Serviço Gerenciado para Apache Spark.

Ver papéis da conta de serviço da VM

Para conferir os papéis concedidos à conta de serviço da VM do Serviço Gerenciado para Apache Spark, faça o seguinte:

  1. No console Google Cloud , acesse a página IAM.

    Acessar IAM

  2. Clique em Incluir atribuições de papel fornecidas pelo Google.

  3. Confira os papéis listados para a conta de serviço da VM. A imagem a seguir mostra a função Trabalhador do Dataproc necessária listada para a conta de serviço padrão do Compute Engine (project_number-compute@developer.gserviceaccount.com) que o Serviço Gerenciado para Apache Spark usa por padrão como a conta de serviço da VM.

  4. Clique no ícone de lápis exibido na linha da conta de serviço para conceder ou remover papéis da conta de serviço.

Conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark

O Serviço Gerenciado para Apache Spark cria a conta de serviço do agente de serviço, service-project_number@dataproc-accounts.iam.gserviceaccount.com, e concede à conta de serviço o papel Agente de serviço do Serviço Gerenciado para Apache Spark em um projeto Google Cloud . Essa conta de serviço executa operações do plano de controle do Serviço Gerenciado para Apache Spark, como a criação, atualização e exclusão de VMs de cluster. Não é possível substituir essa conta de serviço por uma conta de serviço de VM personalizada ao criar um cluster.

Concessão de função à conta de serviço do agente de serviço em uma rede VPC compartilhada

Se um cluster do Serviço gerenciado para Apache Spark usar uma rede VPC compartilhada, um administrador de VPC compartilhada precisará conceder à conta de serviço do agente de serviço do Serviço gerenciado para Apache Spark o papel de Usuário de rede para o projeto host da VPC compartilhada. Para ver mais informações, consulte os seguintes tópicos:

Criar um cluster com uma conta de serviço de VM personalizada

Ao criar um cluster, é possível especificar uma conta de serviço de VM personalizada que o cluster usará para operações do plano de dados do Serviço Gerenciado para Apache Spark em vez da conta de serviço de VM padrão. Não é possível mudar a conta de serviço de VM depois que o cluster é criado. Ao usar uma conta de serviço de VM com papéis do IAM atribuídos, é possível fornecer ao cluster acesso refinado aos recursos do projeto.

Etapas preliminares

  1. Crie a conta de serviço personalizada da VM no projeto em que o cluster será criado.

  2. Conceda à conta de serviço da VM personalizada o papel de Worker do Serviço Gerenciado para Apache Spark no projeto e quaisquer outros papéis necessários para seus jobs, como os papéis de Leitor e gravador do BigQuery. Consulte Papéis do Serviço Gerenciado para Apache Spark.

    Exemplo da CLI gcloud:

    • O comando de exemplo a seguir concede à conta de serviço da VM personalizada no projeto do cluster o papel de worker do Dataproc no nível do projeto:
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • Considere um papel personalizado:em vez de conceder à conta de serviço o papel predefinido de worker do Dataproc (roles/dataproc.worker), é possível conceder a ela um papel personalizado que contenha permissões de worker, mas limite as permissões storage.objects.*.

Crie o cluster

  • Crie o cluster no projeto.

Comando gcloud

Use o comando gcloud dataproc clusters create para criar um cluster com a conta de serviço personalizada da VM.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

Substitua:

  • CLUSTER_NAME: o nome do cluster, que precisa ser exclusivo em um projeto. O nome precisa começar com uma letra minúscula e pode conter até 51 letras minúsculas, números e hifens. Ele não pode terminar com um hífen. O nome de um cluster excluído pode ser reutilizado.
  • REGION: a região em que o cluster vai estar localizado.
  • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.
  • PROJECT_ID: o ID do projeto Google Cloud que contém a conta de serviço da VM. Esse será o ID do projeto em que o cluster será criado ou o ID de outro projeto se você estiver criando um cluster com uma conta de serviço de VM personalizada em outro projeto.
  • SCOPE: escopos de acesso para instâncias de VM do cluster (por exemplo, https://www.googleapis.com/auth/cloud-platform).

API REST

Ao preencher o GceClusterConfig como parte da solicitação de API clusters.create, defina os seguintes campos:

Console

Não é possível definir uma conta de serviço da VM do Serviço Gerenciado para Apache Spark no console Google Cloud . É possível definir o cloud-platform escopo de acesso nas VMs do cluster ao criar o cluster clicando em "Ativa o escopo do cloud-platform para este cluster" na seção Acesso ao projeto do painel Gerenciar segurança na página Criar um cluster do Serviço Gerenciado para Apache Spark no console Google Cloud .

Criar um cluster com uma conta de serviço de VM personalizada de outro projeto

Ao criar um cluster, é possível especificar uma conta de serviço de VM personalizada que será usada para operações do plano de dados do Serviço Gerenciado para Apache Spark em vez da conta de serviço de VM padrão. Não é possível especificar uma conta de serviço de VM personalizada depois que o cluster é criado. Usar uma conta de serviço de VM personalizada com papéis do IAM atribuídos permite fornecer ao cluster acesso refinado aos recursos do projeto.

Etapas preliminares

  1. No projeto da conta de serviço (onde a conta de serviço personalizada da VM está localizada):

    1. Ative a vinculação de contas de serviço entre projetos.

    2. Ative a API Dataproc.

      Funções necessárias para ativar APIs

      Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

      Ativar a API

  2. Conceda à sua conta de e-mail (o usuário que está criando o cluster) o papel de Usuário da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, na conta de serviço personalizada da VM no projeto da conta de serviço.

    Para mais informações:consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.

    Exemplos da CLI gcloud:

    • O exemplo de comando a seguir concede ao usuário o papel de Usuário da conta de serviço no nível do projeto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Observações: USER_EMAIL: informe o endereço de e-mail da sua conta de usuário no formato: user:user-name@example.com.

    • O exemplo de comando a seguir concede ao usuário o papel de usuário da conta de serviço no nível da conta de serviço:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Observações: USER_EMAIL: informe o endereço de e-mail da sua conta de usuário no formato: user:user-name@example.com.

  3. Conceda à conta de serviço da VM personalizada o papel de Worker do Serviço Gerenciado para Apache Spark no projeto do cluster.

    Exemplo da CLI gcloud:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. Conceda à conta de serviço do agente de serviço do Managed Service para Apache Spark no projeto do cluster os papéis de Usuário da conta de serviço e Criador de token da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, na conta de serviço personalizada da VM no projeto da conta de serviço. Ao fazer isso, você permite que a conta de serviço do agente de serviço do Dataproc no projeto do cluster crie tokens para a conta de serviço personalizada da VM do Dataproc no projeto da conta de serviço.

    Para mais informações:consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.

    Exemplos da CLI gcloud:

    • Os comandos de exemplo a seguir concedem à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark no projeto do cluster os papéis de usuário da conta de serviço e criador do token da conta de serviço no nível do projeto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • Os comandos de exemplo a seguir concedem à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark no projeto do cluster os papéis de usuário da conta de serviço e criador do token da conta de serviço no nível da conta de serviço da VM:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. Conceda à conta de serviço do agente de serviço do Compute Engine no projeto do cluster o papel Criador de token da conta de serviço no projeto da conta de serviço ou, para um controle mais granular, na conta de serviço personalizada da VM no projeto da conta de serviço. Ao fazer isso, você concede à conta de serviço do agente de serviço do Compute Engine no projeto do cluster a capacidade de criar tokens para a conta de serviço personalizada da VM do Dataproc no projeto da conta de serviço.

    Para mais informações:consulte Gerenciar o acesso a projetos, pastas e organizações para conceder papéis no nível do projeto e Gerenciar o acesso a contas de serviço para conceder papéis no nível da conta de serviço.

    Exemplos da CLI gcloud:

    • O exemplo de comando a seguir concede à conta de serviço do agente de serviço do Compute Engine no projeto do cluster o papel de criador de token da conta de serviço no nível do projeto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • O comando de exemplo a seguir concede à conta de serviço do agente de serviço do Compute Engine no projeto do cluster o papel de criador de token da conta de serviço no nível da conta de serviço da VM:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

Crie o cluster

A seguir