使用 VPC Service Controls

VPC Service Controls 是一項 Google Cloud 功能,可讓您設定安全範圍,防範資料竊取。本頁說明如何搭配使用 VPC Service Controls 與 Cloud Build 私人集區,為建構作業增添額外安全性。

事前準備

如要取得設定服務安全防護範圍所需的權限,請要求管理員授予您服務帳戶的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

在 VPC Service Controls 範圍中設定私人集區

如要搭配 Cloud Build 使用 VPC Service Controls,您必須先建立及設定服務範圍,這項作業是在機構層級完成。這項設定可確保使用 Cloud Build 時強制執行 VPC Service Controls 檢查,且開發人員只能執行符合 VPC Service Controls 的建構作業。

建立 VPC Service Controls 範圍

按照 VPC Service Controls 快速入門導覽課程操作,完成下列步驟:

  1. 建立服務範圍。
  2. 將您打算建立私人集區的專案新增至範圍。

  3. 限制 Cloud Build API。

設定服務安全防護範圍後,系���會檢查所有 Cloud Build API 呼叫,確保呼叫來自同一個安全防護範圍。

授予服務帳戶 VPC Service Controls 範圍的存取權

在下列情況下,您必須授予舊版 Cloud Build 或 Compute Engine 服務帳戶存取 VPC Service Controls 範圍的權限,建構作業才能存取範圍內的資源:

  • 如果您使用舊版 Cloud Build 或 Compute Engine 服務帳戶,透過建構觸發條件Cloud Build API 或指令列啟動建構作業。

  • 如果您使用使用者指定的服務帳戶,透過建構觸發程序啟動建構作業。

如果您使用使用者指定的服務帳戶,透過 Cloud Build API 或指令列啟動建構作業,就不需要授予舊版 Cloud Build 或 Compute Engine 服務帳戶存取 VPC Service Controls 範圍的權限。

請按照下列步驟,授予舊版 Cloud Build 或 Compute Engine 服務帳戶 VPC Service Controls 服務範圍的存取權:

  1. 記下舊版服務帳戶的電子郵件地址:

    1. 開啟「IAM」頁面:

      開啟 IAM 頁面

    2. 選取您新增至服務範圍的專案。

    3. 在權限表格中,找出對應舊版 Cloud Build 服務帳戶的電子郵件地址。

  2. 更新服務安全防護範圍的連入政策,允許服務帳戶呼叫 Cloud Build API。這項連入規則可讓服務帳戶發出 CreateBuild API 呼叫。如要進一步瞭解如何設定 VPC Service Controls 輸入政策,請參閱設定輸入和輸出政策輸入和輸出規則

    - ingressFrom:
        identities:
        - serviceAccount:SERVICE_ACCOUNT_EMAIL
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: 'cloudbuild.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/PROJECT_NUMBER'
    
  3. 執行下列指令,��將���������成���當的值,即可更新安全範圍政策:

    gcloud beta access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=INGRESS-FILENAME \
        --policy=POLICY_ID
    

其中:

  • SERVICE_ACCOUNT_EMAIL:服務帳戶的電子郵件地址。
  • PROJECT_NUMBER:您新增至 VPC Service Controls 服務範圍的Google Cloud 專案編號。
  • PERIMETER_NAME:VPC Service Controls 範圍的名稱。
  • INGRESS-FILENAME:連入政策檔案的名稱。
  • POLICY_ID:存取權政策的 ID。

選用:為開發機器啟用周邊存取權

由於系統會對 Cloud Build API 強制執行 VPC Service Controls 檢查,因此除非呼叫來自服務範圍內,否則對 Cloud Build API 的呼叫會失敗。因此,如要透過 Cloud Build API、 Google Cloud 控制台中的 Cloud Build UI 或 Google Cloud CLI 管理建構作業,請選擇下列其中一個選項:

  • 使用 VPC Service Controls 範圍內的機器。舉例來說,您可以使用 Compute Engine VM 或透過 VPN 連線至虛擬私有雲網路的內部部署機器。

  • 授予開發人員周邊存取權。舉例來說,您可以建立存取層級,根據 IP 位址或使用者身分啟用服務範圍存取權。詳情請參閱「允許服務範圍外的受保護資源存取要求」。

設定機構政策限制

如要確保系統正確強制執行 VPC Service Controls 檢查,並限制 Google Cloud 機構中的建構作業只能使用指定的私人集區,請設定constraints/cloudbuild.allowedWorkerPools 機構政策限制。您可以將機構政策套用至整個機構,或機構中的專案或資料夾。舉例來說,機構政策可以指定:

  • 機構中的所有建構作業都會使用指定的私人集區。
  • 資料夾中的所有建構作業都會使用指定的私人集區。
  • 專案中的所有建構作業都會使用指定的私人集區。

IAM 權限:如要管理組織政策,您需要組織政策管理員 (roles/orgpolicy.policyAdmin) 角色。如需授予角色的操作說明,請參閱設定 Cloud Build 資源的存取權

gcloud resource-manager org-policies allow 指令 會設定機構政策,要求機構中的建構作業只能使用指定的私人集區:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools \
     projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
     --organization ORGANIZATION_ID

其中:

  • PRIVATEPOOL_ID:用於執行建構作業的私人集區 ID。

  • PRIVATEPOOL_PROJECT_ID:包含私有集區的 Google Cloud 專案 ID。

  • LOCATION:包含私人集區的區域。

  • ORGANIZATION_ID:您執行建構作業的機構 ID。

這項指令支援 under:is 前置字串。

如要設定機構政策,規定機構中的所有建構作業都必須使用該機構下的任何私人集區,請執行下列步驟:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
     --organization ORGANIZATION_ID

其中 ORGANIZATION_ID 是包含私人集區的機構 ID。

如要設定機構政策,規定資料夾下專案中的所有建構作業都必須使用指定專案中的任何私有集區,請按照下列步驟操作:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
     --folder FOLDER_ID

其中 PROJECT_ID 是含有私人集區的專案 ID,FOLDER_ID 則是您執行建構作業的專案。

如要設定機構政策,規定專案中的所有建構作業都必須使用指定專案中的任何私人集區,請按照下列步驟操作:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
     --project BUILD_PROJECT_ID

其中 PRIVATEPOOL_PROJECT_ID 是含有私人集區的專案 ID,BUILD_PROJECT_ID 則是您執行建構作業的專案 ID。

強制執行 constraints/cloudbuild.allowedWorkerPools 機構政策限制時,請注意下列事項:

  • 如果將這項組織政策限制套用至 Google Cloud 專案,請確保專案中的所有建構作業都使用私人集區;嘗試使用預設共用集區的建構作業會失敗。

  • 如果貴機構包含 App Engine 或 Cloud Run 函式等服務,這些服務會隱含使用 Cloud Build,強制執行這項機構政策限制可能會導致這些服務無法正常運作。 Google Cloud

在服務範圍中建立私人集區

主控台

  1. 在 Google Cloud 控制台中開啟「Worker Pool」(工作站集區) 頁面:

    開啟 Cloud Build 工作站集區頁面

  2. 選取要建立私人集區的專案。

  3. 在「Worker pool」(工作站集區) 頁面中,按一下「Create」(建立)

  4. 在「Create private pool」(建立私人集區) 側邊面板中:

    1. 輸入私人集區的名稱。

    2. 選取要建立私人集區的區域。

    3. 選取要用於私有集區的 Compute Engine 機器類型。

    4. 輸入您建立虛擬私有雲網路的 Google Cloud 專案專案編號。

    5. 輸入虛擬私有雲網路名稱。

    6. 清除「指派外部 IP」

    7. 點選「建立」

gcloud

  1. 以 YAML 或 JSON 格式建立私人集區設定檔,並將 egressOption 標記設為 NO_PUBLIC_EGRESS

    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
        peeredNetwork: PEERED_NETWORK
      workerConfig:
        diskSizeGb: 'PRIVATE_POOL_DISK_SIZE'
        machineType: PRIVATE_POOL_MACHINE_TYPE
    

    其中:

    • PEERED_NETWORK 是與服務供應商網路對等互連的網路資源網址。PEERED_NETWORK 必須採用 projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME 格式,其中 NETWORK_PROJECT_ID 是保存虛擬私有雲網路的專案 ID, Google Cloud 是虛擬私有雲網路的名稱。NETWORK_NAME
    • PRIVATE_POOL_MACHINE_TYPE 是私人集區執行個體的 Compute Engine 機器類型。如要瞭解支援的機器類型,請參閱私人集區設定檔結構定義
    • PRIVATE_POOL_DISK_SIZE 是私有集區執行個體的磁碟大小,單位為 GB。請指定大於或等於 100 且小於或等於 1000 的值。如果您指定 0,Cloud Build 會使用預設值 100。
    • egressOption 是啟用私人集區 VPC Service Controls 範圍的旗標。將此值設為 NO_PUBLIC_EGRESS,即可在 VPC Service Controls 範圍內建立私人集區。
  2. 執行下列 gcloud 指令,其中 PRIVATEPOOL_ID 是私人集區的不重複 ID,PRIVATEPOOL_CONFIG_FILE 是私人集區設定檔的名稱,REGION 是要建立私人集區的區域

    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
    

選用:在虛擬私有雲網路上啟用公開網際網路呼叫

請確認虛擬私有雲網路已設定為允許網路連線至存放區的代管位置 (例如 github.com),並採用下列設定:

  1. 請確認私人集區設定檔中的 egressOption 欄位已設為 PUBLIC_EGRESS,或將私人集區設為使用靜態外部 IP

  2. 私人集區執行的虛擬私有雲網路定義為 PeeredNetwork。如要允許呼叫存放區主機,請確保這個 VPC 網路允許公開輸出至存放區主機。如要瞭解如何執行這項操作,請參閱路徑和防火牆規則

限制

  • VPC Service Controls 保護機制僅適用於在私人集區中執行的建構作業,無法與在預設集區中執行的建構作業搭配使用。

  • 使用 VPC Service Controls 時,系統不支援 Cloud Build Pub/Sub 觸發條件。

後續步驟