Usar a autenticação com destinos HTTP

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 geralmente é usada por uma carga de trabalho de aplicativo ou de computação e é identificada pelo endereço de e-mail, que é exclusivo da conta.

Os aplicativos 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 do acesso a 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, conceda os papéis do Identity and Access Management (IAM) à conta de serviço para permitir que ela acesse os recursos Google Cloud .

  1. Se você ainda não tiver uma conta de serviço para usar em trabalhos 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 do agente de serviço do Cloud Scheduler (roles/cloudscheduler.serviceAgent) do agente de serviço do Cloud Scheduler no seu projeto. Isso resulta em respostas 403 para endpoints que exigem autenticação, mesmo que a conta de serviço do job tenha a função adequada.

  2. Se o destino estiver em Google Cloud, conceda os papéis do IAM necessários à sua conta de serviço. Cada serviço em Google Cloud requer um papel específico, 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 anexar 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ão iam.serviceAccounts.actAs, que é necessária para anexar uma conta de serviço a um recurso. Se você criou a conta de serviço, ela será concedida automaticamente.

    Na etapa anterior, se você criou especificamente uma conta de serviço para invocar o serviço de destino do job do Cloud Scheduler, siga o princípio de privilégio mínimo vinculando a conta e a permissão do invocador ao serviço de destino:

    Console

    1. No Console do Google Cloud, na página do seletor de projetos, selecione um projeto do Google Cloud.

      Acessar o seletor de projetos

    2. 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.

    3. Marque a caixa de seleção à esquerda do serviço que você quer invocar. (Não clique no próprio serviço.)

    4. 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.

    5. Clique em Adicionar principal.

    6. No campo Novos participantes, insira o endereço de e-mail da conta de serviço que você criou.

    7. 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.

    8. 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 destino. Por 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 o serviço de destino requer 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 são descritos na referência da linha de comando do gcloud.

    Exemplos:

    • Conceda a função IAM Invocador do Cloud Run (roles/run.invoker) à conta de serviço my-service-account@my-project.iam.gserviceaccount.com no serviço do Cloud Run my-service:

      gcloud run add-iam-policy-binding my-service \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --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 my-service-account@my-project.iam.gserviceaccount.com na função my-gen2-function do Cloud Run:

      gcloud functions add-iam-policy-binding my-gen2-function \
          --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
          --role=roles/run.invoker \
          --gen2
      
  3. Se o destino estiver fora de Google Cloud, o serviço de recebimento precisará verificar manualmente o token.

  4. 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, você precisa 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

  1. No console do Google Cloud, acesse a página do Cloud Scheduler.

    Acessar o Cloud Scheduler

  2. Clique em Criar job.

  3. No campo Name, insira um nome exclusivo para o projeto. Não é possível reutilizar o nome de um job em um projeto, mesmo depois de excluir o job com esse nome.

  4. Na lista Região, selecione uma região para o job.

  5. Especifique uma Frequência e um Fuso horário para o job. A string que você fornece aqui pode ser qualquer string compatível com o unix-cron.

  6. Clique em Continuar.

  7. Na lista Tipo de destino, selecione HTTP.

  8. Especifique um URL e um método HTTP.

  9. 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.

  10. Na lista Conta de serviço, selecione o e-mail da conta de serviço.

  11. Opcionalmente, 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, o URL inteiro será usado como o público-alvo, incluindo os parâmetros de solicitação.

  12. Defina as configurações opcionais.

  13. 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 exclusivo do 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 ou a frequência de execução do job. Por exemplo, every 3 hours ou every 10 mins. A string que você fornece aqui pode ser qualquer string compatível com o 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 são descritos na referência da linha de comando do gcloud.

Conceder o papel de agente de serviço do Cloud Scheduler

Alguns Google Cloud serviços precisam acessar seus recursos para serem capazes de 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 conforme você ativa e usa os serviços Google Cloud.

O agente de serviço do Cloud Scheduler exige 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ê só precisa conceder o papel 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.

Para 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, confira o acesso atual do projeto. Se você usar o console do Google Cloud para conferir o acesso do seu projeto, marque a caixa de seleção Incluir concessões de função 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.