如果您設定具備適當憑證的相關聯服務帳戶,Cloud Scheduler 即可呼叫需要驗證的 HTTP 目標。
設定服務帳戶
服務帳戶通常由應用程式或運算工作負載使用,並透過專屬的電子郵件地址識別。
應用程式可以透過服務帳戶進行驗證,並存取服務帳戶有權存取的所有資源,藉此使用服務帳戶執行已授權的 API 呼叫。
如要讓應用程式以服務帳戶身分進行驗證,最常見的做法是將服務帳戶附加至執行應用程式的資源。接著,您可以將身分與存取權管理 (IAM) 角色授予服務帳戶,讓服務帳戶存取 Google Cloud 資源。
- 如果您還沒有要用於 Cloud Scheduler 工作 (含 HTTP 目標) 的服務帳戶,請建立新的服務帳戶。請注意以下事項: - 服務帳戶必須屬於建立 Cloud Scheduler 工作的專案。 
- 請勿使用 Cloud Scheduler 服務代理程式 ( - service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com),因為該程式無法用於此用途。
- 請勿從專案中的 Cloud Scheduler 服務代理人撤銷 Cloud Scheduler 服務代理人角色 ( - roles/cloudscheduler.serviceAgent)。即使作業的服務帳戶具有適當角色,這麼做仍會導致系統對需要驗證的端點傳回- 403回應。
 
- 如果目標位於 Google Cloud,請將必要的 IAM 角色授予服務帳戶。 Google Cloud 中的每項服務都需要特定角色,而接收服務會自動驗證產生的權杖。舉例來說,如要使用 Cloud Run 和第二代 Cloud Run 函式,您必須授予 - Cloud Run Invoker角色。- 如要取得將服務帳戶附加至資源所需的權限,請要求管理員授予您服務帳戶的「服務帳戶使用者」( - roles/iam.serviceAccountUser) IAM 角色。這個預先定義的角色包含- iam.serviceAccounts.actAs權限,這是將服務帳戶附加至資源的必要權限。(如果您建立了服務帳戶,系統會自動授予這項權限)。- 在上一個步驟中,如果您專門建立服務帳戶來叫用 Cloud Scheduler 工作所指定的服務,可以將該帳戶及其叫用者權限繫結至目標服務,藉此遵循最低權限原則: - 主控台- 在 Google Cloud 控制台的專案選擇器頁面中,選取專案Google Cloud 。 
- 前往您要叫用的資源類型頁面。舉例來說,如果您要叫用 Cloud Run 服務,請前往列出 Cloud Run 服務的頁面。 
- 在要叫用的服務左側選取核取方塊。 (請勿點選服務本身)。 
- 按一下「權限」分頁標籤。 - 如果資訊窗格未顯示,您可能需要依序點選「顯示資訊面板」>「權限」。 
- 按一下 「新增主體」。 
- 在「New principals」(新增主體) 欄位中,輸入您建立的服務帳戶電子郵件地址。 
- 在「Select a role」(選取角色) 清單中,選取要授予的角色。 - 請遵循最低權限原則,選擇僅含主體所需權限的角色。 
- 按一下 [儲存]。 
 - gcloud- gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLE- 更改下列內容: - RESOURCE_TYPE:目標的資源類型。 例如,Cloud Run 目標的- run。
- RESOURCE_ID:目標的 ID。例如 Cloud Run 目標的服務名稱。
- PRINCIPAL:服務帳戶的 ID。格式如下:- serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS。例如:- serviceAccount:my-service-account@my-project.iam.gserviceaccount.com。
- ROLE:目標服務呼叫時所需的角色名稱。舉例來說,- roles/run.invoker適用於 Cloud Run 或第二代 Cloud Run 函式目標。
- 如需其他選用參數,請參閱 gcloud 指令列參考資料。
 - 範例: - 將 Cloud Run 叫用者 ( - roles/run.invoker) IAM 角色授予 Cloud Run 服務- my-service上的服務帳戶- my-service-account@my-project.iam.gserviceaccount.com:- gcloud run add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
- 將第二代 Cloud Run 函式所需的 Cloud Run Invoker ( - roles/run.invoker) IAM 角色授予 Cloud Run 函式- my-gen2-function上的服務帳戶- my-service-account@my-project.iam.gserviceaccount.com:- gcloud functions add-iam-policy-binding my-gen2-function \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker \ --gen2
 - 如要查看使用 Terraform 建立服務帳戶的範例,並取得叫用 Cloud Run 服務的權限,請參閱「為 Cloud Scheduler 建立服務帳戶」。 
- 如果目標不在 Google Cloud內,接收服務必須手動驗證權杖。 
- 啟用 Cloud Scheduler API 時,系統會自動設定預設的 Cloud Scheduler 服務代理人,但如果您是在 2019 年 3 月 19 日之前啟用,則必須授予 Cloud Scheduler 服務代理人角色。這樣才能代表您的服務帳戶產生標頭憑證,藉此對目標進行驗證。 
建立使用驗證的 Cloud Scheduler 工作
Cloud Scheduler 會依據用戶端服務帳戶建立標頭憑證 (由電子郵件識別),並且透過 HTTPS 傳送至目標,以在 Cloud Scheduler 和 HTTP 目標之間進行驗證。您可以使用 ID (OIDC) 權杖 或 OAuth (存取) 權杖。一般狀況會使用 OIDC,但託管於 *.googleapis.com 的 Google API 除外,這些 API 預期會使用 OAuth 憑證。
如要建立使用驗證的 Cloud Scheduler 工作,您必須在建立工作時新增權杖類型和電子郵件地址,以識別用戶端服務帳戶:
主控台
- 前往 Google Cloud 控制台的 Cloud Scheduler 頁面。 
- 按一下 「建立工作」。 
- 在「Name」(名稱) 欄位中,輸入專案專屬的工作名稱。請注意,即使您刪除了關聯的工作,仍然不得在專案中再次使用此名稱。 
- 在「Region」(區域) 清單中,選取工作所在的區域。 
- 為工作指定「頻率」和「時區」。 您在這裡提供的字串可以是任何與 Unix-Cron 相容的字串。 
- 按一下「繼續」。 
- 在「Target type」(目標類型) 清單中,選取「HTTP」。 
- 指定 URL 和 HTTP 方法。 
- 在「Auth header」(驗證標頭) 清單中,選取憑證類型。一般狀況會使用 OIDC 權杖,但 - *.googleapis.com上託管的 Google API 除外,這些 API 預期會使用 OAuth 權杖。
- 在「Service account」(服務帳戶) 清單中,選取服務帳戶電子郵件地址。 
- 您可以選擇指定「目標對象」,限制 OIDC 權杖的收件者。一般來說,這是工作的目標網址,不含任何網址參數。如未指定,系統會將整個網址 (包括要求參數) 當做目標對象。 
- 視需要調整其他設定。 
- 點選「建立」。 
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
更改下列內容:
- JOB_ID:專案專屬的工作名稱。請注意,即使您刪除了關聯的工作,仍然不得在專案中再次使用此名稱。
- FREQUENCY:工作執行的間隔或頻率,例如- every 3 hours或- every 10 mins。您在這裡提供的字串可以是任何與 Unix-Cron 相容的字串。
- URI:端點的完整網址。
- SERVICE_ACCOUNT_EMAIL:服務帳戶的電子郵件地址。一般狀況會使用 OIDC 權杖,但- *.googleapis.com上託管的 Google API「除外」,這些 API 預期會使用 OAuth 權杖。(請改用- --oauth-service-account-email旗標定義 OAuth 權杖類型)。
- 如需其他選用參數,請參閱 gcloud 指令列參考資料。
授予 Cloud Scheduler 服務代理程式角色
部分 Google Cloud 服務需要存取您的資源,才能代表您執行動作。為滿足這項需求, Google Cloud 會建立及管理服務帳戶 (又稱服務代理),並在您啟用及使用 Google Cloud服務時,自動建立及授予角色。
Cloud Scheduler 服務代理人需要 Cloud Scheduler 服務代理人 (roles/cloudscheduler.serviceAgent) 角色。如果沒有這個角色,Cloud Scheduler 工作就會失敗。您可以手動將角色授予 Cloud Scheduler 服務代理人,該代理人的電子郵件地址格式如下:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
如果符合下列任一條件,您只能手動授予角色:
- 您在 2019 年 3 月 19 日之前啟用 Cloud Scheduler API
- 您已從服務代理程式中移除 Cloud Scheduler 服務代理程式角色
您可以查看專案目前的存取權,確認 Cloud Scheduler 服務代理程式已在專案中設定,且已獲授予 Cloud Scheduler Service Agent 角色。請注意,如果您使用 Google Cloud 控制台查看專案的存取權,請務必選取「Include Google-provided role grants」核取方塊。
如要瞭解如何將角色授予服務代理,請參閱建立及授予服務代理角色。