O Cloud Scheduler poderá chamar destinos HTTP que exigem autenticação se você configurar uma conta de serviço associada que tenha as credenciais apropriadas.
Configurar uma conta de serviço
Uma conta de serviço é usada normalmente por um aplicativo ou carga de trabalho de computação e é identificada pelo endereço de e-mail dela, que é exclusivo.
Os aplicativos podem usar contas de serviço para fazer chamadas de API autorizadas autenticando como a própria conta de serviço e acessando todos os recursos que ela tem permissão para acessar.
A maneira mais comum de permitir que um aplicativo seja autenticado como uma conta de serviço é anexar uma conta de serviço ao recurso que está executando o aplicativo. Em seguida, você pode conceder à conta de serviço papéis do Identity and Access Management (IAM) para permitir que ela acesse recursos do Google Cloud .
Se você ainda não tiver uma conta de serviço que queira usar para jobs do Cloud Scheduler com destinos HTTP, crie uma nova conta de serviço. Observe o seguinte:
A conta de serviço precisa pertencer ao projeto em que o job do Cloud Scheduler foi criado.
Não use o agente de serviço do Cloud Scheduler (
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
). Ele não pode ser usado para essa finalidade.Não revogue o papel de agente de serviço do Cloud Scheduler (
roles/cloudscheduler.serviceAgent
) do agente de serviço do Cloud Scheduler no seu projeto. Isso resulta em respostas403
para endpoints que exigem autenticação, mesmo que a conta de serviço do job tenha o papel apropriado.
Se o destino estiver em Google Cloud, conceda os papéis do IAM necessários à sua conta de serviço. Cada serviço no Google Cloud requer uma função específica, e o serviço de recebimento verifica automaticamente o token gerado. Por exemplo, para o Cloud Run e as funções do Cloud Run de segunda geração, é necessário conceder o papel
Cloud Run Invoker
.Para receber a permissão necessária para vincular uma conta de serviço a um recurso, peça ao administrador para conceder a você o papel do IAM de usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço. Esse papel predefinido contém a permissãoiam.serviceAccounts.actAs
, que é necessária para anexar uma conta de serviço a um recurso. Se você criou a conta de serviço, recebe automaticamente essa permissão.Na etapa anterior, se você criou uma conta de serviço especificamente para invocar o serviço que o job do Cloud Scheduler tem como destino, siga o princípio de privilégio mínimo vinculando a conta e a permissão de invocador ao serviço de destino:
Console
No console Google Cloud , na página do seletor de projetos, selecione um projetoGoogle Cloud .
Navegue até a página do tipo de recurso que você está invocando. Por exemplo, se você estiver invocando um serviço do Cloud Run, acesse a página que lista os serviços do Cloud Run.
Marque a caixa de seleção à esquerda do serviço que você quer invocar. (Não clique no próprio serviço.)
Clique na guia
Permissões.Se o painel de informações não estiver visível, clique em Mostrar painel de informações > Permissões.
Clique em
Adicionar principal.No campo Novos membros, insira o endereço de e-mail da conta de serviço que você criou.
Na lista Selecionar um papel, escolha um papel para conceder.
Siga o princípio de privilégio mínimo escolhendo o papel que inclui apenas as permissões necessárias ao principal.
Clique em Salvar.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLE
Substitua:
RESOURCE_TYPE
: o tipo de recurso do destino. Por exemplo,run
para um destino 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. Ele tem o seguinte formato:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS
. Por exemplo,serviceAccount:[email protected]
.ROLE
: o nome do papel que seu serviço de destino exige para invocação. Por exemplo,roles/run.invoker
para um destino de função do Cloud Run ou do Cloud Run de segunda geração.- Outros parâmetros opcionais estão descritos na referência da linha de comando gcloud.
Exemplos:
Conceda o papel do IAM Invocador do Cloud Run (
roles/run.invoker
) à conta de serviço[email protected]
no serviço do Cloud Runmy-service
:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:[email protected] \ --role=roles/run.invoker
Conceda o papel do IAM Invocador do Cloud Run (
roles/run.invoker
) exigido pelas funções do Cloud Run de segunda geração à conta de serviço[email protected]
na função do Cloud Runmy-gen2-function
:gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount:[email protected] \ --role=roles/run.invoker \ --gen2
Se o destino estiver fora do Google Cloud, o serviço de recebimento precisará verificar manualmente o token.
O agente de serviço padrão do Cloud Scheduler é configurado automaticamente quando você ativa a API Cloud Scheduler, a menos que você a tenha habilitado antes de 19 de março de 2019. Nesse caso, é necessário conceder o papel de agente de serviço do Cloud Scheduler. Isso é necessário para que ele possa gerar tokens de cabeçalho em nome da conta de serviço e criar uma autenticação no destino.
Criar um job do Cloud Scheduler que usa autenticação
Para realizar a autenticação entre o Cloud Scheduler e um destino HTTP, o Cloud Scheduler cria um token de cabeçalho com base na conta de serviço do cliente identificada pelo e-mail e o envia até o destino por meio do HTTPS.
É possível usar um
token de ID (OIDC)
ou um token OAuth (de acesso). O OIDC geralmente é usado , exceto para APIs do Google hospedadas em *.googleapis.com
, porque essas APIs esperam um token OAuth.
Para criar um job do Cloud Scheduler que use autenticação, adicione o tipo de token e o endereço de e-mail que identifica a conta de serviço do cliente ao criar o job:
Console
No console Google Cloud , acesse a página do Cloud Scheduler.
Clique em
Criar job.No campo Nome, insira um nome exclusivo para o job no projeto. Não é possível reutilizar o nome de um job em um projeto mesmo depois de excluir o job associado.
Na lista Região, selecione uma região para o job.
Especifique uma Frequência e um Fuso horário para o job. A cadeia que você fornece aqui pode ser qualquer cadeia compatível com o formato unix-cron.
Clique em Continuar.
Na lista Tipo de destino, selecione HTTP.
Especifique um URL e um método HTTP.
Na lista Auth header, selecione o tipo de token. Um token OIDC geralmente é usado , exceto para APIs do Google hospedadas em
*.googleapis.com
, porque essas APIs esperam um token OAuth.Na lista Conta de serviço, selecione o e-mail da sua conta de serviço.
Se quiser, especifique um público-alvo que limite os destinatários do token OIDC. Normalmente, o URL de destino do job sem parâmetros de URL. Se não for especificado, todo o URL será usado como público-alvo, incluindo parâmetros de solicitação.
Configure as configuraçõ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:
JOB_ID
: um nome para o job que seja exclusivo do projeto. Não é possível reutilizar o nome de um job em um projeto mesmo depois de excluir o job associado.FREQUENCY
: o intervalo ou a frequência de execução do job. Por exemplo,every 3 hours
ouevery 10 mins
. A cadeia que você fornece aqui pode ser qualquer cadeia compatível com o formato unix-cron.URI
: o URL totalmente qualificado do endpoint.SERVICE_ACCOUNT_EMAIL
: o e-mail da sua conta de serviço. Um token OIDC geralmente é usado , exceto para APIs do Google hospedadas em*.googleapis.com
, porque essas APIs esperam um token OAuth. Use a flag--oauth-service-account-email
para definir um tipo de token OAuth.- Outros parâmetros opcionais estão descritos na referência da linha de comando gcloud.
Conceder o papel de agente de serviço do Cloud Scheduler
Alguns Google Cloud serviços precisam acessar seus recursos para atuar em seu nome. Para atender a essa necessidade, o Google Cloud cria e gerencia contas de serviço conhecidas como agentes de serviço, que são criadas e recebem papéis automaticamente à medida que você ativa e usa os serviços do Google Cloud.
O agente de serviço do Cloud Scheduler requer o papel
Agente de serviço do Cloud Scheduler
(roles/cloudscheduler.serviceAgent
). Sem essa função, os jobs do Cloud Scheduler falham. É possível conceder manualmente o papel ao
agente de serviço do Cloud Scheduler, que tem um endereço de e-mail no
seguinte formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Você precisa conceder a função manualmente se uma das seguintes condições for verdadeira:
- Você ativou a API Cloud Scheduler antes de 19 de março de 2019
- Você removeu o papel de agente de serviço do Cloud Scheduler do agente de serviço.
É possível verificar se o agente de serviço do Cloud Scheduler está configurado no projeto e se ele tem o papel de agente de serviço do Cloud Scheduler concedido a ele visualizando o acesso atual do projeto. Se você usar o console Google Cloud para ver o acesso do projeto, marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
Para saber como conceder um papel ao agente de serviço, consulte Criar e conceder papéis a agentes de serviço.
A seguir
Saiba como se autenticar no Cloud Scheduler de maneira programática.