使用 VPC Service Controls 保護 Cron 工作

VPC Service Controls 可讓您在 Google Cloud 資源周圍設定安全 perimeter,防範資料竊取。您可以將 Cloud Scheduler 工作納入 VPC Service Controls perimeter,保護排定的工作負載並限制工作目標。

限制

VPC Service Controls 對 Cloud Scheduler 的支援有下列限制。

強制執行的動作

VPC Service Controls 會對下列動作強制執行:

  • Cloud Scheduler 工作建立
  • Cloud Scheduler 工作更新

為什麼這一點很重要?

由於 VPC Service Controls 只會在建立及更新工作時強制執行,因此在您將 Cloud Scheduler 新增至 VPC Service Controls perimeter 之前建立的工作,不會自動強制執行 VPC Service Controls。即使工作目標不在 VPC Service Controls 範圍內,或不是支援的目標,工作仍會繼續執行。如要對所有 Cloud Scheduler 工作強制執行 VPC Service Controls,請按照下列步驟操作:

支援的目標

Cloud Scheduler 與 VPC Service Controls 整合後,支援下列目標。如果列出 HTTP 端點,則支援這些端點;不過,不支援任意 HTTP 端點。

  • Cloud Run 服務:必須使用標準預設 run.app 網域。不支援自訂網域和自訂 DNS,否則會導致工作建立失敗。
  • Cloud Run functions:必須使用標準預設 cloudfunctions.net 或 run.app 網域。不支援自訂網域和自訂 DNS,否則會導致工作建立失敗。
  • Google Cloud 符合 VPC Service Controls 規範的 API (預先發布版或正式發布版) 可位於與 Cloud Scheduler 工作不同的 Google Cloud 專案。

    • 您必須使用全域端點格式 (https://SERVICE.googleapis.com)。區域端點 (例如 *.rep.googleapis.com、LOCATION.SERVICE.googleapis.com 和 REGION-SERVICE.googleapis.com) 和 mTLS 端點 (*.mtls.googleapis.com) 會遭到拒絕。

      這項規定僅適用於工作目標 URI。如要透過區域端點將自己的要求傳送至 Cloud Scheduler API,請參閱「使用區域端點」。

    • Cloud Run 工作支援的 URI 格式如下: https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs/JOB_NAME:run

      如要瞭解 Cloud Run 服務和工作資源之間的差異,請參閱「服務、工作、worker 集區和執行個體:四種執行程式碼的方式」。

  • Pub/Sub

不支援的目標

如果 Cloud Scheduler 是 VPC Service Controls perimeter 中的受限服務,嘗試建立或更新目標不受支援的工作時,就會失敗並傳回 TARGET_TYPE_NOT_PERMITTED_FOR_VPC 錯誤代碼。使用模擬測試模式時,這項動作不會產生違規記錄。

無伺服器端點的自訂網域 (例如外部應用程式負載平衡器或自訂 DNS) 不是支援的目標。由於缺少 perimeter 內憑證,目的地服務會封鎖對自訂網域的執行階段叫用,即使是 perimeter 註冊前建立的現有工作也一樣。

為避免意外封鎖工作負載,請先刪除含有不支援目標的工作,或目標位於您要使用的 VPC Service Controls perimeter 外部的工作,再將 perimeter 移至強制執行模式。

刪除不符規定的工作

(建議使用) 刪除 Cloud Scheduler 工作,其目標為:

  • 不支援 (請參閱「支援的目標」)
  • 位於您要使用的 VPC Service Controls 範圍外

如需刪除工作的操作說明,請參閱「刪除工作」。

如果未先刪除這些工作,就將 Cloud Scheduler 新增至 VPC Service Controls perimeter,工作會繼續執行,但 VPC Service Controls 不會對這些工作強制執行。請參閱本文「強制執行的動作」一節。

舉例來說,如果 Cloud Scheduler 工作的目標是不支援的目標 (例如任意 HTTP 端點),則在您將 Cloud Scheduler 新增至 VPC Service Controls perimeter 後,該工作會繼續執行,但不受 VPC Service Controls 保護。如果現有工作的目標位於 VPC Service Controls 範圍之外,也適用同樣的規則。不過,如果預先存在的工作指定 perimeter 內的無伺服器自訂網域,目的地服務會封鎖執行階段叫用。

新增必要的 IAM 角色

這是必要旗標,如要使用 VPC Service Controls,Cloud Scheduler 服務帳戶必須具備 Cloud Scheduler 服務代理 IAM 角色。系統會自動為專案建立 Cloud Scheduler 服務帳戶。如要確認該帳戶是否具備 Cloud Scheduler 服務代理 IAM 角色,或要授予這個角色,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「IAM」。

    前往「IAM」(身分與存取權管理) 頁面

  2. 勾選「包含 Google 提供的角色授予項目」核取方塊。

  3. 在篩選器中輸入 Cloud Scheduler Service Account,然後選取這個主體。

  4. 查看 Cloud Scheduler 服務帳戶主體的「角色」欄。如果清單中列出下列角色,即可繼續操作:

    • Cloud Scheduler 服務代理

    如果未列出 Cloud Scheduler 服務代理角色,請按一下「Edit」(編輯) 圖示,並將「Cloud Scheduler Service Agent」(Cloud Scheduler 服務代理) 角色授予 Cloud Scheduler 服務帳戶主體。

指定 VPC Service Controls 範圍

這是必要旗標,您可以使用現有 perimeter,也可以建立新的 perimeter,保護具有支援目標的 Cloud Scheduler 工作。無論採用哪種方法,您都可以指定要限制的服務。指定 Cloud Scheduler API。

  • 現有 perimeter:如要更新現有的 VPC Service Controls perimeter,納入 Cloud Scheduler,請按照更新 service perimeter 的步驟操作。

  • 新 perimeter:如要為 Cloud Scheduler 建立新的 perimeter,請按照建立 service perimeter 的步驟操作。

對現有工作強制執行 VPC Service Controls

(建議使用) 如要對將 Cloud Scheduler 新增至 VPC Service Controls perimeter 之前建立的 Cloud Scheduler 工作強制執行 VPC Service Controls,請對工作執行 update。您不必變更工作,但必須執行更新,VPC Service Controls 才能套用至工作和日後的執行作業。

您可以使用 Google Cloud 控制台 (選取工作並按一下「Edit」(編輯))、API 或 gcloud CLI 執行工作更新。

如要使用 gcloud CLI 對現有工作強制執行 VPC Service Controls,請執行下列指令:

HTTP 目標

gcloud scheduler jobs update http JOB_ID

將 JOB_ID 替換為工作 ID。

Pub/Sub 目標

gcloud scheduler jobs update pubsub JOB_ID

將 JOB_ID 替換為工作 ID。