Este documento explica como especificar a conta de serviço de uma tarefa em lote, o que influencia os recursos e as aplicações aos quais as VMs de uma tarefa podem aceder. Se não especificar uma conta de serviço personalizada, as tarefas usam por predefinição a conta de serviço predefinida do Compute Engine, que é anexada automaticamente a todas as VMs num projeto. Por conseguinte, usar uma conta de serviço personalizada permite um maior controlo na gestão das autorizações de uma tarefa e é uma prática recomendada para limitar os privilégios.
Saiba mais sobre a conta de serviço de uma tarefa.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
-
Para receber as autorizações de que precisa para controlar o acesso a tarefas através de contas de serviço personalizadas, peça ao seu administrador que lhe conceda as seguintes funções do IAM:
-
Para criar uma tarefa:
-
Editor de tarefas de lote (
roles/batch.jobsEditor
) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine
-
Editor de tarefas de lote (
-
Para ver as contas de serviço:
Ver contas de serviço (
roles/iam.serviceAccountViewer
) no projeto
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Para criar uma tarefa:
-
Identifique a conta de serviço que quer usar para esta tarefa. Certifique-se de que esta conta de serviço tem todas as autorizações necessárias para executar a tarefa.
Saiba mais sobre como ver contas de serviço e as autorizações necessárias para a conta de serviço de uma tarefa.
Crie uma tarefa que use uma conta de serviço personalizada
Para criar uma tarefa que use uma conta de serviço personalizada, selecione um dos seguintes métodos:
- Especifique a conta de serviço personalizada na definição da tarefa, conforme mostrado nesta secção.
- Use um modelo de instância do Compute Engine e especifique a conta de serviço personalizada no modelo de instância e na definição da tarefa.
Esta secção fornece um exemplo de como criar uma tarefa que usa uma conta de serviço personalizada. Pode criar uma tarefa que use uma conta de serviço personalizada através da CLI gcloud, da API Batch, do Java, do Node.js ou do Python.
gcloud
Para criar uma tarefa que use uma conta de serviço personalizada através da CLI gcloud, use o comando gcloud batch jobs submit
e especifique a conta de serviço personalizada no ficheiro de configuração da tarefa.
Por exemplo, para criar uma tarefa de script que use uma conta de serviço personalizada:
Crie um ficheiro JSON no diretório atual com o nome
hello-world-service-account.json
e o seguinte conteúdo:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello World! This is task $BATCH_TASK_INDEX." } } ] } } ], "allocationPolicy": { "serviceAccount": { "email": "SERVICE_ACCOUNT_EMAIL" } } }
onde
SERVICE_ACCOUNT_EMAIL
é o endereço de email da sua conta de serviço. Se o camposerviceAccount
não for especificado, o valor é definido como a conta de serviço predefinida do Compute Engine.Execute o seguinte comando:
gcloud batch jobs submit example-service-account-job \ --location us-central1 \ --config hello-world-service-account.json
API
Para criar uma tarefa que use uma conta de serviço personalizada através da API Batch, use o método jobs.create
e especifique a sua conta de serviço personalizada no campo allocationPolicy
.
Por exemplo, para criar uma tarefa de script que use uma conta de serviço personalizada, faça o seguinte pedido:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-service-account-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
}
}
],
"allocationPolicy": {
"serviceAccount": {
"email": "SERVICE_ACCOUNT_EMAIL"
}
}
}
Substitua o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.SERVICE_ACCOUNT_EMAIL
: o endereço de email da sua conta de serviço. Se o camposerviceAccount
não for especificado, o valor é definido como a conta de serviço predefinida do Compute Engine.
Java
Node.js
Python
O que se segue?
- Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
- Ver empregos e tarefas.
- Saiba mais sobre as opções de criação de tarefas.