VPC Service Controls 是 Google Cloud 可讓您設定安全範圍,以防範資料外洩的功能。本頁說明如何搭配使用 VPC Service Controls 和 Cloud Build 私人集區,為建構作業提供額外的安全性。
事前準備
如要使用本指南提供的指令列範例,請安裝並設定 Google Cloud CLI。
在虛擬私有雲網路與私人資源池所在的虛擬私有雲網路之間,設定私人連線。如需操作說明,請參閱「設定環境以建立私人集區」。
在服務範圍內執行的建構作業將無法將建構記錄儲存在預設 Cloud Storage 記錄值區。執行建構作業前,請使用下列任一選項設定建構設定檔:
- 將
loggingMode
設為CLOUD_LOGGING_ONLY
,選擇將建構記錄儲存在 Cloud Logging 中。 - 在私人專案中建立 Cloud Storage 記錄值區,用來儲存建構記錄。詳情請參閱「在使用者建立的值區中儲存建構記錄」。
- 將
loggingMode
設為NONE
,即可停用建構記錄。
- 將
如果您的建構作業將圖片和構件推送至不同 Google Cloud 專案中的 Artifact Registry 或 Cloud Storage,請將該專案新增至與建構作業來源專案相同的服務範圍。
如要取得設定服務範圍所需的權限,請要求管理員為您的服務帳戶授予下列 IAM 角色:
-
機構檢視者 (
roles/resourcemanager.organizationViewer
) -
Access Context Manager 編輯器 (
roles/accesscontextmanager.policyEditor
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
在 VPC Service Controls 範圍中設定私人集區
如要在 Cloud Build 中使用 VPC Service Controls,您必須先建立及設定服務範圍,這項作業是在機構層級執行。這項設定可確保在使用 Cloud Build 時強制執行 VPC Service Controls 檢查,並且開發人員只能執行符合 VPC Service Controls 的建構作業。
建立 VPC Service Controls 範圍
請按照 VPC Service Controls 快速入門的步驟操作:
- 建立服務範圍。
將您打算在範圍內建立私人集區的專案新增至範圍。
限制 Cloud Build API。
設定服務範圍後,系統會檢查所有對 Cloud Build API 的呼叫,確保這些呼叫來自相同範圍。
授予服務帳戶對 VPC Service Controls 範圍的存取權
在下列情況下,您必須將 VPC Service Controls 範圍的存取權授予舊版 Cloud Build 或 Compute Engine 服務帳戶,才能讓建構作業存取範圍內的資源:
如果您使用舊版 Cloud Build 或 Compute Engine 服務帳戶,透過建構觸發條件、Cloud Build API 或指令列啟動建構作業。
如果您使用使用者指定的服務帳戶,透過建構觸發事件啟動建構作業。
如果您使用使用者指定的服務帳戶,透過 Cloud Build API 或命令列啟動建構作業,就不需要將舊版 Cloud Build 或 Compute Engine 服務帳戶的存取權授予 VPC Service Controls 範圍。
請按照下列步驟,將 VPC Service Controls 範圍的存取權授予舊版 Cloud Build 或 Compute Engine 服務帳戶:
請記下舊版服務帳戶的電子郵件地址:
開啟 IAM 頁面:
選取已新增至服務範圍的專案。
在權限表格中,找出舊版 Cloud Build 服務帳戶對應的電子郵件地址。
更新服務範圍的入站政策,允許服務帳戶呼叫 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'
執行下列指令,並將變數替換為適當的值,以更新外圍政策:
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 連線至 VPC 網路。
授予開發人員邊界存取權。舉例來說,您可以建立存取層級,根據 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 專案,請確保專案中的所有建構都使用私人集區;如果建構嘗試使用預設共用集區,就會失敗。
如果您的 Google Cloud 機構包含 App Engine 或 Cloud Run 函式等會隱含使用 Cloud Build 的服務,強制執行這項機構政策限制可能會導致這些服務無法正常運作。
在服務範圍中建立私人集區
主控台
在 Google Cloud 控制台中開啟「Worker Pool」頁面:
選取要建立私人集區的專案。
在「Worker pool」(工作站集區) 頁面中,按一下「Create」(建立)。
在「Create private pool」(建立私人集區) 側邊面板中:
輸入私人集區的名稱。
選取要建立私人集區的區域。
選取要用於私人集區的 Compute Engine 機器類型。
輸入您建立虛擬私有雲端網路的 Google Cloud 專案編號。
輸入虛擬私有雲網路的名稱。
清除「Assign external IPs」。
按一下 [建立]。
gcloud
以 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
是儲存虛擬私有雲網路的 Google Cloud 專案 ID,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 範圍內建立私人集區。
執行下列
gcloud
指令,其中PRIVATEPOOL_ID
是私人集區的專屬 ID、PRIVATEPOOL_CONFIG_FILE
是私人集區設定檔的名稱,而REGION
則是您要建立私人集區的地區:gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
選用:在 VPC 網路中啟用公開網際網路呼叫
請確認您的虛擬私有雲網路已設定為允許網路連線至儲存庫所在位置 (例如 github.com),並採用下列設定:
請確認私人集區設定檔中的
egressOption
欄位已設為PUBLIC_EGRESS
,或是將私人集區設為使用靜態外部 IP。私人集區執行的虛擬私有雲網路會定義為PeeredNetwork。如要允許呼叫存放區主機,請確認這個 VPC 網路允許存放區主機的公開輸出。如要瞭解如何進行這項操作,請參閱「路徑和防火牆規則」。
限制
VPC Service Controls 保護功能僅適用於在私人集區中執行的建構作業;您無法在預設集區中執行的建構作業中使用 VPC Service Controls。
使用 VPC Service Controls 時,系統不支援 Cloud Build Pub/Sub 觸發條件。
後續步驟
- 瞭解如何在私人集區中執行建構作業。
- 瞭解如何設定常用的網路用途。