Contas de serviço sem servidor para o Apache Spark

Uma carga de trabalho em lote ou uma sessão interativa do Serverless para Apache Spark é executada como a conta de serviço predefinida do Compute Engine, a menos que especifique uma conta de serviço personalizada quando envia uma carga de trabalho em lote, cria uma sessão ou cria um modelo de tempo de execução de sessão.

Requisito de segurança: tem de ter a autorização de conta de serviço ActAs para executar cargas de trabalho em lote ou sessões interativas. A função Service Account User contém esta autorização. Para informações detalhadas sobre as autorizações da conta de serviço, consulte o artigo Funções para autenticação de contas de serviço.

Função de trabalhador do Dataproc necessária

A conta de serviço da carga de trabalho em lote ou da sessão tem de ter a função do IAM Dataproc Worker. A conta de serviço predefinida do Compute Engine, project_number-compute@developer.gserviceaccount.com, que o Serverless para Apache Spark usa tem esta função por predefinição. Se especificar uma conta de serviço diferente quando criar uma carga de trabalho em lote, uma sessão ou um modelo de sessão, tem de conceder a função de trabalhador do Dataproc à conta de serviço. Podem ser necessárias funções adicionais para outras operações, como ler e escrever dados do e para o Cloud Storage ou o BigQuery.

Em alguns projetos, a carga de trabalho em lote ou a conta de serviço da sessão podem ter recebido automaticamente a função de editor do projeto, que inclui as autorizações da função de trabalhador do Dataproc, além de autorizações adicionais que não são necessárias para o Serverless para Apache Spark. Para seguir o princípio da prática recomendada de segurança de privilégio mínimo, substitua a função de editor da conta de serviço pela função de trabalhador do Dataproc.

Resolva problemas de falhas baseadas em autorizações

As autorizações incorretas ou insuficientes para a conta de serviço usada pela sua carga de trabalho ou sessão em lote podem levar a falhas na criação de lotes ou sessões que comunicam a mensagem de erro "O nó de computação do controlador não conseguiu inicializar o lote em 600 segundos". Este erro indica que não foi possível iniciar o controlador do Spark dentro do período de limite de tempo permitido, muitas vezes devido à falta de acesso necessário aos recursos. Google Cloud

Para resolver este problema, verifique se a sua conta de serviço tem as seguintes funções ou autorizações mínimas:

  • Função Dataproc Worker (roles/dataproc.worker): esta função concede as autorizações necessárias para o Serverless for Apache Spark gerir e executar cargas de trabalho e sessões do Spark.
  • Storage Object Viewer (roles/storage.objectViewer), Storage Object Creator (roles/storage.objectCreator) ou Storage Object Admin (roles/storage.admin): se a sua aplicação Spark ler ou escrever em contentores do Cloud Storage, a conta de serviço precisa de autorizações adequadas para aceder aos contentores. Por exemplo, se os seus dados de entrada estiverem num contentor do Cloud Storage, é necessário Storage Object Viewer. Se a sua aplicação escrever a saída num contentor do Cloud Storage, é necessário Storage Object Creator ou Storage Object Admin.
  • Editor de dados do BigQuery (roles/bigquery.dataEditor) ou Visualizador de dados do BigQuery (roles/bigquery.dataViewer): se a sua aplicação Spark interagir com o BigQuery, verifique se a conta de serviço tem as funções do BigQuery adequadas.
  • Autorizações do Cloud Logging: a conta de serviço precisa de autorizações para escrever registos no Cloud Logging para uma depuração eficaz. Normalmente, a função de Logging Writer (roles/logging.logWriter) é suficiente.
  • Função dataproc.worker em falta: sem esta função essencial, a infraestrutura do Serverless para Apache Spark não pode aprovisionar nem gerir corretamente o nó do controlador.

  • Autorizações insuficientes do Cloud Storage: se a sua aplicação Spark tentar ler dados de entrada ou escrever resultados num contentor do Cloud Storage sem as autorizações necessárias da conta de serviço, o controlador pode não conseguir inicializar porque não tem acesso a recursos críticos.

  • Problemas de rede ou firewall: os VPC Service Controls ou as regras de firewall podem bloquear inadvertidamente o acesso da conta de serviço às APIs ou aos recursos do Google Cloud. Google Cloud

Para validar e atualizar as autorizações da conta de serviço:

  1. Aceda à página IAM e administrador > IAM na Google Cloud consola.
  2. Localize a conta de serviço usada para as suas cargas de trabalho ou sessões em lote.
  3. Verifique se as funções necessárias estão atribuídas. Caso contrário, adicione-os.

Para ver uma lista das funções e autorizações do Serverless para Apache Spark, consulte o artigo Autorizações do Serverless para Apache Spark e funções IAM.

Sem servidor para runtimes do Apache Spark 3.0 e posteriores

Os runtimes sem servidor para o Apache Spark 3.0 e posteriores criam a conta de serviço Agente de serviço do nó do gestor de recursos do Dataproc, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, com a função Agente de serviço do nó do gestor de recursos do Dataproc no projeto de um utilizador do Dataproc Google Cloud . Esta conta de serviço executa as seguintes operações do sistema em recursos do Serverless para Apache Spark localizados no projeto onde é criada uma carga de trabalho:

  • Cloud Logging e Cloud Monitoring
  • Operações básicas do nó do gestor de recursos do Dataproc, como get, heartbeat e mintOAuthToken

Veja e faça a gestão das funções da conta do serviço IAM

Para ver e gerir as funções concedidas à carga de trabalho em lote ou à conta do serviço de sessão, faça o seguinte:

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Clique em Incluir concessões de funções fornecidas pela Google.

  3. Veja as funções listadas para a carga de trabalho em lote ou a conta de serviço da sessão. A imagem seguinte mostra a função Dataproc Worker obrigatória indicada para a conta de serviço predefinida do Compute Engine, project_number-compute@developer.gserviceaccount.com, que o Serverless para Apache Spark usa por predefinição como a conta de serviço da carga de trabalho ou da sessão.

    Função de trabalhador do Dataproc para a conta de serviço predefinida do Compute Engine na consola do IAM
    A função de trabalhador do Dataproc atribuída à conta de serviço predefinida do Compute Engine na secção IAM da Google Cloud consola.
  4. Pode clicar no ícone de lápis apresentado na linha da conta de serviço para conceder ou remover funções da conta de serviço.

Conta de serviço entre projetos

Pode enviar uma carga de trabalho em lote que use uma conta de serviço de um projeto diferente do projeto da carga de trabalho em lote (o projeto onde o lote é enviado). Nesta secção, o projeto onde a conta de serviço está localizada é denominado service account project e o projeto onde o lote é enviado é denominado batch project.

Por que motivo deve usar uma conta de serviço entre projetos para executar uma carga de trabalho em lote? Um dos motivos possíveis é se à conta de serviço no outro projeto tiverem sido atribuídas funções de IAM que fornecem acesso detalhado aos recursos nesse projeto.

Passos de configuração

  1. No projeto da conta de serviço:

    1. Permitir que as contas de serviço sejam anexadas em vários projetos.

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    3. Conceda à sua conta de email (o utilizador que está a criar o cluster) a função de utilizador da conta de serviço no projeto da conta de serviço ou, para um controlo mais detalhado, na conta de serviço no projeto da conta de serviço.

      Para mais informações, consulte os artigos Faça a gestão do acesso a projetos, pastas e organizações para conceder funções ao nível do projeto e Faça a gestão do acesso a contas de serviço para conceder funções ao nível da conta de serviço.

      Exemplos da CLI gcloud:

      O seguinte comando de exemplo concede ao utilizador a função de utilizador da conta de serviço ao nível do projeto:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      Notas:

      • USER_EMAIL: indique o endereço de email da sua conta de utilizador, no formato: user:user-name@example.com.

      O seguinte comando de exemplo concede ao utilizador a função de utilizador da conta de serviço ao 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"
      

      Notas:

      • USER_EMAIL: indique o endereço de email da sua conta de utilizador no formato: user:user-name@example.com.
    4. Conceda à conta de serviço a função de trabalhador do Dataproc no projeto de lote.

      Exemplo da CLI gcloud:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. No projeto de lote:

    1. Conceda à conta de serviço do agente de serviço do Dataproc as funções de utilizador da conta de serviço e criador de tokens da conta de serviço no projeto da conta de serviço ou, para um controlo mais detalhado, na conta de serviço no projeto da conta de serviço. Ao fazê-lo, permite que a conta de serviço do agente do serviço Dataproc no projeto de lote crie tokens para a conta de serviço no projeto de conta de serviço.

      Para mais informações, consulte os artigos Faça a gestão do acesso a projetos, pastas e organizações para conceder funções ao nível do projeto e Faça a gestão do acesso a contas de serviço para conceder funções ao nível da conta de serviço.

      Exemplos da CLI gcloud:

      Os seguintes comandos concedem à conta de serviço do agente de serviço do Dataproc no projeto em lote as funções de utilizador da conta de serviço e criador de tokens da conta de serviço ao nível do projeto:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Os seguintes comandos de exemplo concedem à conta de serviço do agente de serviço do Dataproc as funções de utilizador da conta de serviço e criador do token da conta de serviço ao nível da conta de serviço:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_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-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. Conceda à conta de serviço do agente de serviço do Compute Engine no projeto em lote a função de criador de tokens da conta de serviço no projeto da conta de serviço ou, para um controlo mais detalhado, na conta de serviço no projeto da conta de serviço. Ao fazê-lo, concede à conta de serviço do agente do serviço do Compute Agent no projeto em lote a capacidade de criar tokens para a conta de serviço no projeto da conta de serviço.

      Para mais informações, consulte os artigos Faça a gestão do acesso a projetos, pastas e organizações para conceder funções ao nível do projeto e Faça a gestão do acesso a contas de serviço para conceder funções ao nível da conta de serviço.

      Exemplos da CLI gcloud:

      O comando de exemplo seguinte concede à conta de serviço do agente de serviço do Compute Engine no projeto em lote a função de criador de tokens de conta de serviço ao nível do projeto:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      O comando de exemplo seguinte concede à conta de serviço do agente de serviço do Compute Engine a função de criador de tokens de conta de serviço ao nível da conta de serviço:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

Envie a carga de trabalho em lote

Depois de concluir os passos de configuração, pode enviar uma carga de trabalho em lote. Certifique-se de que especifica a conta de serviço no projeto da conta de serviço como a conta de serviço a usar para a carga de trabalho em lote.