Usar autenticação com destinos HTTP

O Cloud Scheduler pode chamar destinos HTTP que exigem autenticação se você tiver configurado uma conta de serviço associada que tenha as credenciais apropriadas.

Configurar a conta de serviço

  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 é 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 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 no Google Cloud, conceda as permissões necessárias papéis do IAM ao serviço do Compute Engine. Cada serviço do Google Cloud exige um papel específico, e o serviço de recebimento verifica automaticamente o token gerado. Para exemplo, para o Cloud Run e a segunda geração funções do Cloud Run, é preciso 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. É possível fazer isso usando o console do Google Cloud ou a CLI gcloud:

    Console

    1. Abra o Console do Google Cloud.

    Ir para o console

    2. Selecione o projeto.

    3. Navegue até a página do tipo de recurso que você está chamando. Por 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 do serviço. conta 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 conta de serviço. Ela 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ço my-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 os Papel Invocador do Cloud Run exigido pela segunda geração Funções do Cloud Run para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com para o segundo de geração do Cloud Run, função my-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
      
  3. Se o destino estiver fora do Google Cloud, o serviço de recebimento precisará verificar manualmente o token.

  4. A conta de serviço padrão do Cloud Scheduler é definida automaticamente quando você ativar a API Cloud Scheduler, a menos que você a tenha ativado antes 19 de março de 2019. Nesse caso, você deve adicionar o papel Cloud Scheduler Service Agent manualmente. Isso é tão que ele pode gerar tokens de cabeçalho em nome da sua conta de serviço ao cliente para autenticar o destino.

    Para verificar se a conta de serviço padrão do Cloud Scheduler está configurada no projeto e se ela tem o papel Cloud Scheduler Service Agent concedido, confira o 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

  1. Especifique a frequência como sempre.
  2. Especifique HTTP como o tipo de destino.
  3. Adicione o URL e o método HTTP como sempre.
  4. 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.
  5. Em Conta de serviço, especifique o e-mail da conta de serviço do cliente.
  6. Audience é opcional e limita os destinatários do token OIDC. Normalmente, o URL de destino do job (sem parâmetros de URL). Caso contrário especificado, por padrão, todo o URL é usado como o público-alvo (incluindo 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. Deve ser exclusivos no projeto. Não é possível reutilizar o nome de um job em um projeto mesmo que você exclua o job associado a ele.
  • FREQUENCY: o intervalo do job é a frequência com que é executar, por exemplo, every 3 hours ou every 10 mins. É possível usar aqui qualquer string compatível com o formato crontab. (Embora não recomendemos mais seu uso, a versão Sintaxe do cron do App Engine ainda é compatível com jobs atuais).
  • 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, já que essas APIs esperam uma solicitação OAuth com base no token correto anterior.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: o e-mail de a 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 autenticar entre o Cloud Scheduler e um destino HTTP, O Cloud Scheduler cria um token de cabeçalho com base no seu serviço de cliente identificada por seu e-mail e a envia, usando HTTPS, para o destino. É 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 à conta de serviço do Cloud Scheduler

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 esse papel, 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

  1. No console do Google Cloud, acesse Página da API Cloud Scheduler.

    Acessar a API Cloud Scheduler

    Se houver um campo Status e o status estiver listado como Ativado, continuar. Caso contrário, clique em Ativar.

  2. No console do Google Cloud, acesse a página Configurações.

    Acesse configurações

  3. Encontre e copie o número do projeto.

  4. No console do Google Cloud, acesse a página do IAM página.

    Acessar IAM

  5. Clique em Conceder acesso. O painel Conceder acesso é aberto.

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

  7. Na lista Selecionar um papel, pesquise e selecione Cloud Scheduler Agente de serviço.

  8. Clique em Salvar.

gcloud

  1. 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ê vir Listed 0 items.), ative a API:

      gcloud services enable cloudscheduler.googleapis.com
  2. Encontre seu número do projeto:

    gcloud projects describe PROJECT_ID --format='table(projectNumber)'
    

    Substitua PROJECT_ID pela ID do seu projeto.

  3. Copie o número.

  4. 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 projeto
    • PROJECT_NUMBER: o número do projeto que você copiado anteriormente