如果您設定具備適當憑證的相關聯服務帳戶,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
如果目標不在 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 控制台查看專案的存取權,請務必選取「包含 Google 提供的角色授予項目」核取方塊。
如要瞭解如何將角色授予服務代理程式,請參閱建立服務代理程式並授予角色。