O Cloud Scheduler pode chamar destinos HTTP que requerem autenticação se configurar uma conta de serviço associada com as credenciais adequadas.
Configure uma conta de serviço
Normalmente, uma conta de serviço é usada por uma aplicação ou uma carga de trabalho de computação e é identificada pelo respetivo endereço de email, que é exclusivo da conta.
As aplicações podem usar contas de serviço para fazer chamadas de API autorizadas através da autenticação como a própria conta de serviço e aceder a todos os recursos aos quais a conta de serviço tem autorização de acesso.
A forma mais comum de permitir que uma aplicação se autentique como uma conta de serviço é anexar uma conta de serviço ao recurso que executa a aplicação. Em seguida, pode conceder à conta de serviço funções de gestão de identidade e de acesso (IAM) para permitir que a conta de serviço aceda aos Google Cloud recursos.
Se ainda não tiver uma conta de serviço que queira usar para tarefas do Cloud Scheduler com destinos HTTP, crie uma nova conta de serviço. Tenha em atenção o seguinte:
A conta de serviço tem de pertencer ao projeto no qual a tarefa do Cloud Scheduler é criada.
Não use o agente de serviço do Cloud Scheduler (
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
). Não pode ser usado para este fim.Não revogue a função de agente do serviço do Cloud Scheduler (
roles/cloudscheduler.serviceAgent
) do agente do serviço do Cloud Scheduler no seu projeto. Se o fizer, recebe403
respostas aos pontos finais que requerem autenticação, mesmo que a conta de serviço do seu trabalho tenha a função adequada.
Se o seu destino estiver dentro do Google Cloud, conceda as funções do IAM necessárias à sua conta de serviço. Cada serviço no Google Cloud requer uma função específica, e o serviço de receção valida automaticamente o token gerado. Por exemplo, para o Cloud Run e as funções do Cloud Run de segunda geração, tem de conceder a função
Cloud Run Invoker
roles/run.invokerCloud Run Invoker
.Para receber a autorização de que precisa para anexar uma conta de serviço a um recurso, peça ao seu administrador para lhe conceder a função IAM Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço. Esta função predefinida contém a autorizaçãoiam.serviceAccounts.actAs
, que é necessária para anexar uma conta de serviço a um recurso. (Se criou a conta de serviço, esta autorização é-lhe concedida automaticamente.)No passo anterior, se criou especificamente uma conta de serviço para invocar o serviço que a tarefa do Cloud Scheduler segmenta, pode seguir o princípio do menor privilégio associando a conta e a respetiva autorização de invocador ao serviço de destino:
Consola
Na Google Cloud consola, na página do seletor de projetos, selecione um Google Cloud projeto.
Navegue para a página do tipo de recurso que está a invocar. Por exemplo, se estiver a invocar um serviço do Cloud Run, navegue para a página que lista os serviços do Cloud Run.
Selecione a caixa de verificação à esquerda do serviço que quer invocar. (Não clique no próprio serviço.)
Clique no separador
Autorizações.Se o painel de informações não estiver visível, pode ter de clicar em Mostrar painel de informações > Autorizações.
Clique em
Adicionar principal.No campo Novos membros, introduza o endereço de email da conta de serviço que criou.
Na lista Selecionar uma função, selecione uma função a conceder.
Siga o princípio do menor privilégio escolhendo a função que inclui apenas as autorizações de que o seu principal precisa.
Clique em Guardar.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLE
Substitua o seguinte:
RESOURCE_TYPE
: o tipo de recurso do seu alvo. Por exemplo,run
para um alvo do Cloud Run.RESOURCE_ID
: o identificador do seu destino. Por exemplo, o nome do serviço para um destino do Cloud Run.PRINCIPAL
: o identificador da sua conta de serviço. Tem o seguinte formato:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS
. Por exemplo,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
.ROLE
: o nome da função que o seu serviço de destino requer para invocação. Por exemplo,roles/run.invoker
para um alvo de função do Cloud Run ou do Cloud Run de segunda geração.- Outros parâmetros opcionais são descritos na referência da linha de comandos gcloud.
Exemplos:
Conceda a função do IAM Cloud Run Invoker (
roles/run.invoker
) à conta de serviçomy-service-account@my-project.iam.gserviceaccount.com
no serviço do Cloud Runmy-service
:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Conceda a função do IAM Cloud Run Invoker (
roles/run.invoker
) exigida pelas funções do Cloud Run de segunda geração à conta de serviçomy-service-account@my-project.iam.gserviceaccount.com
na função do Cloud Runmy-gen2-function
:gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker \ --gen2
Se o seu destino estiver fora de Google Cloud, o serviço de receção tem de validar manualmente o token.
O agente de serviço do Cloud Scheduler predefinido é configurado automaticamente quando ativa a API Cloud Scheduler, a menos que a tenha ativado antes de 19 de março de 2019. Nesse caso, tem de conceder a função de agente de serviço do Cloud Scheduler. Isto permite gerar tokens de cabeçalho em nome da sua conta de serviço para autenticar o seu destino.
Crie uma tarefa do Cloud Scheduler que use a autenticação
Para autenticar a comunicação entre o Cloud Scheduler e um destino HTTP, o Cloud Scheduler cria um token de cabeçalho com base na sua conta de serviço de cliente, identificada pelo respetivo email, e envia-o, através de HTTPS, para o destino.
Pode usar um
token de ID (OIDC)
ou um token OAuth (de acesso). Geralmente, o OIDC é usado exceto para APIs Google alojadas em *.googleapis.com
, uma vez que estas APIs esperam um token OAuth.
Para criar uma tarefa do Cloud Scheduler que use a autenticação, tem de adicionar o tipo de token e o endereço de email que identifica a conta de serviço do cliente quando cria a tarefa:
Consola
Na Google Cloud consola, aceda à página Cloud Scheduler.
Clique em
Criar tarefa.No campo Nome, introduza um nome para a tarefa que seja exclusivo do projeto. Tenha em atenção que não pode reutilizar o nome de uma tarefa num projeto, mesmo que elimine a tarefa associada.
Na lista Região, selecione uma região para o seu trabalho.
Especifique uma Frequência e um Fuso horário para a tarefa. A string que fornece aqui pode ser qualquer string compatível com unix-cron.
Clique em Continuar.
Na lista Tipo de destino, selecione HTTP.
Especifique um URL e um método HTTP.
Na lista Cabeçalho de autorização, selecione o tipo de token. Geralmente, usa-se um token OIDC, exceto para as APIs Google alojadas no
*.googleapis.com
, uma vez que estas APIs esperam um token OAuth.Na lista Conta de serviço, selecione o email da sua conta de serviço.
Opcionalmente, especifique um público-alvo que limite os destinatários do token OIDC; normalmente, o URL de destino da tarefa sem parâmetros de URL. Se não for especificado, o URL completo é usado como o público-alvo, incluindo os parâmetros de pedido.
Configure as definições opcionais.
Clique em Criar.
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
Substitua o seguinte:
JOB_ID
: um nome para a tarefa que seja exclusivo do projeto. Tenha em atenção que não pode reutilizar o nome de uma tarefa num projeto, mesmo que elimine a tarefa associada.FREQUENCY
: o intervalo ou a frequência com que a tarefa é executada; por exemplo,every 3 hours
ouevery 10 mins
. A string que fornece aqui pode ser qualquer string compatível com unix-cron.URI
: o URL totalmente qualificado do ponto final.SERVICE_ACCOUNT_EMAIL
: o email da sua conta de serviço. Geralmente, usa-se um token OIDC exceto para APIs Google alojadas em*.googleapis.com
, uma vez que estas APIs esperam um token OAuth. (Em alternativa, use a flag--oauth-service-account-email
para definir um tipo de token OAuth.)- Outros parâmetros opcionais são descritos na referência da linha de comandos gcloud.
Conceda a função de agente do serviço do Cloud Scheduler
Alguns Google Cloud serviços precisam de aceder aos seus recursos para poderem agir em seu nome. Para satisfazer esta necessidade, o IAM Google Cloud cria e gere contas de serviço conhecidas como agentes de serviço, que são criadas e às quais são concedidas funções automaticamente à medida que ativa e usa Google Cloud serviços.
O agente de serviço do Cloud Scheduler requer a função de
agente de serviço do Cloud Scheduler
(roles/cloudscheduler.serviceAgent
). Sem esta função, as tarefas do Cloud Scheduler falham. Pode conceder manualmente a função ao agente de serviço do Cloud Scheduler que tem um endereço de email com o seguinte formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Só tem de conceder a função manualmente se uma das seguintes afirmações for verdadeira:
- Ativou a API Cloud Scheduler antes de 19 de março de 2019
- Removeu a função de agente do serviço do Cloud Scheduler do agente do serviço
Pode verificar se o agente de serviço do Cloud Scheduler está configurado no seu projeto e se tem a função de agente de serviço do Cloud Scheduler atribuída consultando o acesso atual do seu projeto. Tenha em atenção que, se usar a Google Cloud consola para ver o acesso do seu projeto, certifique-se de que seleciona a caixa de verificação Incluir concessões de funções fornecidas pela Google.
Para saber como conceder uma função ao seu agente de serviços, consulte o artigo Crie e conceda funções a agentes de serviços.
O que se segue?
Saiba como autenticar-se no Cloud Scheduler por programação.