对 HTTP 目标使用身份验证

如果您已设置具有适当凭据的关联服务帐号,则 Cloud Scheduler 可以调用需要身份验证的 HTTP 目标。

设置服务帐号

  1. 确定要用于从 Cloud Scheduler 到 HTTP 目标的调用的现有服务帐号,或者为此目的创建新的服务帐号,也就是客户端服务帐号。

  2. 如果您的目标是 Google Cloud 的一部分,请通过授予其必要的 IAM 角色来更新您的客户端服务帐号。Google Cloud 中的每项服务都需要不同的角色。 例如,Cloud Run 要求您添加 Cloud Run Invoker 角色,以此类推。

  3. Cloud Scheduler 本身必须拥有自己的服务帐号,且该帐号已获得 Cloud Scheduler Service Agent 角色。这样它就可以代表您的客户端服务帐号生成标头令牌,以便针对您的目标执行身份验证。在您启用 Cloud Scheduler API 时,系统会自动创建 Cloud Scheduler 服务帐号并向其授予此角色,除非您在 2019 年 3 月 19 日之前启用该 API,在这种情况下,您必须手动添加此角色

创建具有身份验证的调度器作业

要创建具有身份验证的作业,您需要向 create-job 请求添加两条信息:

  • 您选择使用的令牌类型
  • 标识客户端服务帐号的电子邮件地址

    使用 Console

    1. 照常指定频率。
    2. 指定 HTTP 作为目标类型。
    3. 照常添加网址和方法。
    4. Auth header 下拉列表中选择令牌类型。请注意,我们一般会使用 OIDC 令牌,但 *.googleapis.com 上托管的 Google API 除外,因为这些 API 需要使用 OAuth 令牌。
    5. Service account 文本框中添加客户端服务帐号电子邮件。

    图片

    使用 gcloud

    语法:

     gcloud scheduler jobs create http ${JOB_ID} --schedule="every 10 mins" --uri=${URI} --oidc-service-account-email=${CLIENT_SERVICE_ACCOUNT_EMAIL}
    

    其中:

    1. ${JOB_ID} 是作业的名称。此名称在项目中必须唯一。 请注意,即使删除一个项目的关联作业后,您也不可在该项目中重复使用相同的作业名称。
    2. 时间表(也称为频率或作业间隔)是指作业运行的频率,例如“每隔 3 小时”。 您在此处提供的字符串可以是任何与 Crontab 兼容的字符串。 熟悉旧版 App Engine cron 的开发者也可以使用 App Engine cron 语法。
    3. ${URI} 是端点的完全限定网址。
    4. --oidc-service-account-email--oauth-service-account-email 定义令牌类型。请注意,我们一般会使用 OIDC 令牌,但 *.googleapis.com 上托管的 Google API 除外,因为这些 API 需要使用 OAuth 令牌。
    5. ${CLIENT_SERVICE_ACCOUNT_EMAIL} 是客户服务帐号的电子邮件。
    6. 此外还有其他一些选项参数可供您利用,相关介绍请参见 gcloud 命令行参考

选择令牌类型

为了在 Cloud Scheduler 与 HTTP 目标之间执行身份验证,Cloud Scheduler 会根据您的客户端服务帐号(由其电子邮件地址标识)创建一个标头令牌,并通过 HTTPS 将其发送至目标。 您可以使用 OIDC 令牌或 OAuth 令牌。我们一般会使用 OIDC 令牌,但 *.googleapis.com 上托管的 Google API 除外,因为这些 API 需要使用 OAuth 令牌。

手动将 Cloud Scheduler Service Agent 角色添加到 Cloud Scheduler 服务帐号

当您在 2019 年 3 月 19 日之前启用 Cloud Scheduler API 的情况下,才需要执行此操作。

使用 Console

  1. Google Cloud 项目设置页面上找到您的项目编号。
  2. 复制该编号。
  3. 打开 IAM 管理控制台页面
  4. 点击 Add。 系统会打开 Add members 界面。
  5. 在“新成员”对话框中,添加以下格式的电子邮件地址:

    service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com
    

    [project-number] 替换为上面的项目编号。

  6. Select a role 下拉列表中选择 Service Management -> Cloud Scheduler Service Agent

  7. 点击 Save

使用 gcloud

  1. 找到您的项目编号:

    gcloud projects describe [project-id] --format='table(projectNumber)'
    

    [project-id] 替换为您的项目 ID。

  2. 复制该编号。

  3. 使用您复制的项目编号向 Cloud Scheduler 服务帐号授予 Cloud Scheduler Service Agent 角色:

    gcloud projects add-iam-policy-binding [project-id] --member serviceAccount:service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com --role roles/cloudscheduler.serviceAgent
    

    [project-id] 替换为您的项目 ID,将 [project-number] 替换为上面的项目编号。