As contas de serviço no Serviço Gerenciado para Apache Spark permitem autenticar cargas de trabalho em lote e sessões interativas para acessar recursos do Google Cloud com segurança. As cargas de trabalho são executadas com credenciais de usuário final ou de conta de serviço. Quando as credenciais da conta de serviço são usadas, a conta de serviço específica atribuída para executar a carga de trabalho depende da versão do ambiente de execução do lote ou da sessão.
Contas de serviço do ambiente de execução anteriores à versão 3.0
As versões do ambiente de execução do Spark anteriores à 3.0 com credenciais da conta de serviço usam a
conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada
especificada pelo usuário para enviar uma carga de trabalho em lote ou criar uma sessão interativa.
Contas de serviço do ambiente de execução 3.0+
As versões de ambiente de execução do Spark 3.0 e posteriores com credenciais da conta de serviço usam uma conta de serviço personalizada especificada pelo usuário para enviar uma carga de trabalho em lote ou criar uma sessão interativa.
Os ambientes de execução do Serviço Gerenciado para Apache Spark 3.0 e versões mais recentes criam a conta de serviço do Agente de serviço do nó do Dataproc Resource Manager, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, com o papel de Agente de serviço do nó do Dataproc Resource Manager em um projeto de usuário Google Cloud do Serviço Gerenciado para Apache Spark. Essa conta de serviço realiza as seguintes operações do sistema nos recursos do Serviço Gerenciado para Apache Spark localizados no projeto em que uma carga de trabalho é criada:
- Cloud Logging e Cloud Monitoring
- Operações básicas do nó do Resource Manager do Serviço Gerenciado para Apache Spark, como
get,heartbeatemintOAuthToken
Ver e gerenciar papéis de conta de serviço do IAM
Para ver e gerenciar os papéis concedidos à carga de trabalho em lote ou à conta de serviço da sessão, faça o seguinte:
No console do Google Cloud , acesse a página IAM.
Clique em Incluir atribuições de papel fornecidas pelo Google.
Confira os papéis listados para a conta de serviço padrão ou personalizada da carga de trabalho em lote ou da sessão.
A imagem a seguir mostra o papel necessário de worker do Serviço Gerenciado para Apache Spark listado 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 de carga de trabalho ou sessão.
O papel de worker do Managed Service for Apache Spark atribuído à conta de serviço padrão do Compute Engine na seção do IAM do console do Google Cloud . 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.
Como usar uma conta de serviço entre projetos
É possível 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 em que o lote é enviado). Nesta seção, o projeto em que
a conta de serviço está localizada é chamado de service account project, e o
projeto em que o lote é enviado é chamado de batch project.
Por que usar uma conta de serviço entre projetos para executar uma carga de trabalho em lote? Um motivo possível é se a conta de serviço no outro projeto tiver recebido papéis do IAM que fornecem acesso detalhado aos recursos desse projeto.
Etapas da configuração
Os exemplos nesta seção se aplicam ao envio de uma carga de trabalho em lote
executada com uma versão de ambiente de execução anterior a 3.0.
No projeto da conta de serviço:
Ative a API Serviço Gerenciado para Apache Spark, se ainda não estiver ativada.
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.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 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 comando de amostra 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 comando de exemplo 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.
Conceda à conta de serviço o papel de worker do Serviço Gerenciado para Apache Spark no projeto em 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"
No projeto em lote:
Conceda à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark 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 no projeto da conta de serviço. Ao fazer isso, você permite que a conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark no projeto em lote crie tokens para a conta de serviço 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 a seguir concedem à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark no projeto em lote os papéis de Usuário da conta de serviço e 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-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 comandos de exemplo a seguir concedem à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark no projeto em lote os papéis de usuário da conta de serviço e de criador de token 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=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"
Conceda à conta de serviço do agente de serviço do Compute Engine no projeto em lote o papel de 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 no projeto da conta de serviço. Ao fazer isso, você concede à conta de serviço do agente de 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 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 comando de exemplo a seguir concede à conta de serviço do agente de serviço do Compute Engine no projeto em lote 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-BATCH_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:
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"
Enviar a carga de trabalho em lote
Depois de concluir as etapas de configuração, é possível enviar uma carga de trabalho em lote. Especifique a conta de serviço no projeto da conta de serviço como a conta de serviço a ser usada para a carga de trabalho em lote.
Resolver problemas de falhas com base em permissões
Permissões incorretas ou insuficientes para a conta de serviço usada pela carga de trabalho ou sessão em lote podem levar a falhas na criação de lotes ou sessões que relatam uma mensagem de erro "Falha ao inicializar o nó de computação do driver para o lote em 600 segundos". Esse erro indica que o driver do Spark não foi iniciado dentro do período de tempo limite alocado, geralmente devido à falta de acesso necessário aos recursos do Google Cloud .
Para resolver problemas com essa questão, verifique se a conta de serviço tem os seguintes papéis ou permissões mínimos:
- Papel de worker do Serviço Gerenciado para Apache Spark (
roles/dataproc.worker): concede as permissões necessárias para que o Serviço Gerenciado para Apache Spark gerencie e execute cargas de trabalho e sessões do Spark. - Leitor de objetos do Storage (
roles/storage.objectViewer), Criador de objetos do Storage (roles/storage.objectCreator) ou Administrador de objetos do Storage (roles/storage.admin): se o aplicativo do Spark ler ou gravar em buckets do Cloud Storage, a conta de serviço precisará das permissões adequadas para acessar os buckets. Por exemplo, se os dados de entrada estiverem em um bucket do Cloud Storage,Storage Object Viewerserá obrigatório. Se o aplicativo gravar a saída em um bucket do Cloud Storage, será necessárioStorage Object CreatorouStorage Object Admin. - Editor de dados do BigQuery (
roles/bigquery.dataEditor) ou Leitor de dados do BigQuery (roles/bigquery.dataViewer): se o aplicativo Spark interagir com o BigQuery, verifique se a conta de serviço tem os papéis apropriados do BigQuery. - Permissões do Cloud Logging:a conta de serviço precisa de permissões
para gravar registros no Logging para uma depuração eficaz. Normalmente, o papel
Logging Writer(roles/logging.logWriter) é suficiente.
Falhas comuns de permissão ou acesso
Papel
dataproc.workerausente: sem esse papel principal, a infraestrutura do Serviço Gerenciado para Apache Spark não pode provisionar e gerenciar corretamente o nó do driver.Permissões insuficientes do Cloud Storage: se o aplicativo do Spark tentar ler dados de entrada ou gravar saídas em um bucket do Cloud Storage sem as permissões necessárias da conta de serviço, o driver poderá falhar ao inicializar porque não tem acesso a recursos essenciais.
Problemas de rede ou firewall: o 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 .
Para verificar e atualizar as permissões da conta de serviço:
- Acesse a página IAM e administrador > IAM no console do Google Cloud .
- Localize a conta de serviço usada para as cargas de trabalho ou sessões em lote.
- Verifique se os papéis necessários estão atribuídos. Se não estiverem, adicione-os.
Para uma lista de papéis e permissões do Serviço Gerenciado para Apache Spark, consulte Permissões e papéis do IAM do Serviço Gerenciado para Apache Spark.