Usar autenticação com destinos HTTP

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

  1. 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 403 respostas a endpoints que exigem autenticação, mesmo que o serviço do job tem o papel apropriado.

  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, e o serviço de recebimento verifica automaticamente o token gerado. Para exemplo, para o Cloud Run e a segunda geração do Cloud Functions, você precisa 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 que tenha precisam conceder essa permissão na 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. 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, Pode ser necessário clicar em Mostrar painel de informações e, em seguida, clicar 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 de privilégio mínimo escolhendo o papel que inclui apenas as permissões que o principal precisa.

    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 do Cloud Run ou do Cloud Functions de segunda geração.

    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 do Cloud Functions: o comando a seguir concede os Papel Invocador do Cloud Run exigido pela segunda geração funções do Cloud Functions para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com para o segundo de geração de código do Cloud Functions 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.

    É possível verificar se a conta de serviço padrão do Cloud Scheduler configurou no seu projeto e se ele tem a 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 use autenticação, você precisa adicionar o tipo de token. e o endereço de e-mail que identifica a conta de serviço do cliente para seu 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 autenticaçã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 o 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 as Configurações página.

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