O Cloud Scheduler pode chamar destinos HTTP que exigem autenticação se você configuraram uma conta de serviço associada que tem as credenciais apropriadas.
Configurar a conta de serviço
Se você ainda não tiver uma conta de serviço que queira usar para jobs do Cloud Scheduler com destinos HTTP criar 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 é criado.
Não use o agente de serviço do Cloud Scheduler (
service-YOUR_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 Cloud Scheduler agente de serviço em seu projeto. Isso resulta em respostas403
para endpoints que exigem autenticação, mesmo que a conta de serviço do job tenha a função adequada.
Se o destino estiver no 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 recebimento verifica automaticamente o token gerado. Por exemplo, para o Cloud Run e as funções do Cloud Run de 2ª geração, é necessário adicionar o papel
Cloud Run Invoker
.Observe que, para implantar um recurso com uma conta de serviço gerenciado pelo usuário, o implantador precisa ter a permissão
iam.serviceAccounts.actAs
conta de serviço. Se você criou a conta de serviço, concedeu essa permissão automaticamente. Caso contrário, alguém com as permissões corretas precisa conceder essa permissão à conta de serviço.Prática recomendada:na etapa anterior, se você criou uma conta de serviço especificamente para invocar o serviço que o job do Cloud Scheduler alvos de segurança, considere seguir o princípio de privilégio mínimo (melhores prática) vinculando a conta e a permissão do invocador ao destino. serviço. Você pode fazer isso usando o console do Google Cloud ou a CLI gcloud:
Console
1. Abra o Console do Google Cloud.
2. Selecione o projeto.
3. Navegue até a página do tipo de recurso que você está chamando. Para exemplo, se você estiver invocando um serviço do Cloud Run, acesse a página que lista os serviços do Cloud Run.
4. Marque a caixa de seleção à esquerda do serviço que você quer invocar. (Não clique no próprio serviço.)
5. Clique na guia Permissões. Se o painel de informações não estiver visível, clique em Mostrar painel de informações e em Permissões.
6. Clique em
Adicionar principal.7. Em Adicionar participantes, insira o endereço de e-mail da conta de serviço que você criou.
8. Em Atribuir papéis, selecione um papel para conceder na lista suspensa. Siga o princípio do menor privilégio escolhendo o papel que inclui apenas as permissões necessárias ao principal.
9. Clique em Salvar.
gcloud
Execute o comando
add-iam-policy-binding
: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 destino. Para exemplo, o nome do serviço de 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:my-service-account@my-project.iam.gserviceaccount.com
.ROLE
: o nome do papel que seu destino necessário para a invocação. Por exemplo,roles/run.invoker
para um destino de funções do Cloud Run ou de segunda geração do Cloud Run.
Exemplos:
Destino do Cloud Run: o comando a seguir concede os Invocador do Cloud Run para a conta de serviço
my-service-account@my-project.iam.gserviceaccount.com
para o Serviçomy-service
do Cloud Run:gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Destino das funções do Cloud Run: o comando a seguir concede o papel Invocador do Cloud Run necessário para as funções de segunda geração do Cloud Run à conta de serviço
my-service-account@my-project.iam.gserviceaccount.com
para a funçãomy-gen2-function
das funções do Cloud Run de segunda geração: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 destino estiver fora do Google Cloud, o serviço de recebimento precisará verificar manualmente o token.
A conta de serviço padrão do Cloud Scheduler é configurada 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, você precisa adicionar o papel
Cloud Scheduler Service Agent
manualmente. Isso é necessário para que ele possa gerar tokens de cabeçalho em nome da conta de serviço do cliente e criar uma autenticação no destino.É possível verificar se a conta de serviço padrão do Cloud Scheduler configurado no seu projeto e que tenha a permissão
Cloud Scheduler Service Agent
um papel concedido a ele visualização do acesso atual do projeto. Se você usa o console do Google Cloud para conferir o acesso do projeto, marque a caixa de seleção Incluir concessões de papéis fornecidas pelo Google.
Criar um job do programador com autenticação
Para criar um job que usa autenticação, é preciso adicionar o tipo de token
e o endereço de e-mail que identifica a conta de serviço do cliente à sua
solicitação create-job
:
Console
- Especifique a frequência como sempre.
- Especifique HTTP como o tipo de destino.
- Adicione o URL e o método HTTP como sempre.
- Na lista Auth header, selecione o tipo de token. O OIDC (token de ID) geralmente é usado exceto para APIs do Google hospedadas em
*.googleapis.com
, porque essas APIs esperam um token de acesso OAuth. - Em Conta de serviço, especifique o e-mail da conta de serviço do cliente.
- Audience é opcional e limita os destinatários do token OIDC. Normalmente, o URL de destino do job (sem parâmetros de URL). Se não for especificado, por padrão, o URL inteiro será usado como o público-alvo (incluindo os parâmetros de solicitação).
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" --uri=URI \ --oidc-service-account-email=CLIENT_SERVICE_ACCOUNT_EMAIL
Substitua:
JOB_ID
: um nome para o job. Ele precisa ser exclusivo no projeto. Não é possível reutilizar o nome de um job em um projeto, mesmo depois de excluir o job com esse nome.FREQUENCY
: o intervalo do job é a frequência com que ele é executado, por exemplo,every 3 hours
ouevery 10 mins
. É possível usar aqui qualquer string compatível com o formato crontab. Embora não recomendemos mais o uso, a sintaxe cron legada do App Engine ainda é compatível com jobs existentes.URI
: o URL totalmente qualificado do endpoint.--oidc-service-account-email
ou--oauth-service-account-email
: define o tipo de token. O OIDC geralmente é usado , exceto para APIs do Google hospedadas em*.googleapis.com
, porque essas APIs esperam um token OAuth.CLIENT_SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço do cliente.- Outros parâmetros opcionais estão disponíveis e são descritos nas Referência da linha de comando do gcloud.
Escolher tipos de token
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
hospedados em *.googleapis.com
, já que essas APIs esperam um token OAuth.
Adicionar manualmente o papel de agente de serviço do Cloud Scheduler à sua conta de serviço
Isso será necessário somente 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 seu serviço conta
A conta de serviço do Cloud Scheduler requer o Papel de agente de serviço do Cloud Scheduler. Sem essa função, os jobs do Cloud Scheduler falham. Você pode adicionar o método Papel de agente de serviço do Cloud Scheduler para seu Cloud Scheduler conta de serviço no console do Google Cloud ou com o CLI gcloud:
Console
No console do Google Cloud, acesse a página da API Cloud Scheduler.
Se houver um campo Status e o status estiver listado como Ativado, continuar. Caso contrário, clique em Ativar.
No console do Google Cloud, acesse as Configurações página.
Encontre e copie o número do projeto.
No console do Google Cloud, acesse a página IAM.
Clique em Conceder acesso. O painel Conceder acesso é aberto.
No campo Novos principais, adicione um endereço de e-mail com o formato:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Substitua
PROJECT_NUMBER
pelo número do projeto do Google Cloud.Na lista Selecionar um papel, pesquise e selecione Cloud Scheduler Agente de serviço.
Clique em Salvar.
gcloud
Confirme se a API Cloud Scheduler está ativada para seu projeto:
gcloud services list --enabled \ --filter=cloudscheduler.googleapis.com
Se a seguinte saída for exibida, isso significa que a API está ativada:
NAME: cloudscheduler.googleapis.com TITLE: Cloud Scheduler API
Caso contrário (por exemplo, se você encontrar
Listed 0 items.
), ative a API:gcloud services enable cloudscheduler.googleapis.com
Encontre seu número do projeto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Substitua
PROJECT_ID
pela ID do seu projeto.Copie o número.
Conceda o papel
Cloud Scheduler Service Agent
à conta de serviço do Cloud Scheduler:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \ --role roles/cloudscheduler.serviceAgent
Substitua:
PROJECT_ID
: ID do projetoPROJECT_NUMBER
: o número do projeto que você copiou anteriormente.