VPC Service Controls 是一項 Google Cloud 功能,可讓您設定安全範圍,防範資料竊取。本頁說明如何搭配使用 VPC Service Controls 與 Cloud Build 私人集區,為建構作業增添額外安全性。
事前準備
如要使用本指南提供的指令列範例,請安裝及設定 Google Cloud CLI。
在虛擬私有雲網路與私人集區所在的虛擬私有雲網路之間,設定私人連線。如需操作說明,請參閱設定環境來建立私人集區。
在服務範圍內執行的建構作業,無法將建構記錄檔儲存在預設的 Cloud Storage 記錄檔值區。執行建構作業前,請使用下列其中一個選項設定建構設定檔:
- 將
loggingMode
設為CLOUD_LOGGING_ONLY
,即可選擇將建構記錄儲存在 Cloud Logging 中。 - 在私人專案中,建立 Cloud Storage 記錄檔 bucket,用來儲存建構作業記錄檔。詳情請參閱「將建構記錄儲存在使用者建立的 bucket 中」。
- 將
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 範圍的存取權
在下列情況下,您必須授予舊版 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 服務範圍的存取權:
記下舊版服務帳戶的電子郵件地址:
開啟「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 連線至虛擬私有雲網路的內部部署機器。
授予開發人員周邊存取權。舉例來說,您可以建立存取層級,根據 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
在服務範圍中建立私人集區
主控台
在 Google Cloud 控制台中開啟「Worker Pool」(工作站集區) 頁面:
選取要建立私人集區的專案。
在「Worker pool」(工作站集區) 頁面中,按一下「Create」(建立)。
在「Create private pool」(建立私人集區) 側邊面板中:
輸入私人集區的名稱。
選取要建立私人集區的區域。
選取要用於私有集區的 Compute Engine 機器類型。
輸入您建立虛擬私有雲網路的 Google Cloud 專案專案編號。
輸入虛擬私有雲網路名稱。
清除「指派外部 IP」。
點選「建立」。
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
是保存虛擬私有雲網路的專案 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 範圍內建立私人集區。
執行下列
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),並採用下列設定:
請確認私人集區設定檔中的
egressOption
欄位已設為PUBLIC_EGRESS
,或將私人集區設為使用靜態外部 IP。私人集區執行的虛擬私有雲網路定義為 PeeredNetwork。如要允許呼叫存放區主機,請確保這個 VPC 網路允許公開輸出至存放區主機。如要瞭解如何執行這項操作,請參閱路徑和防火牆規則。
限制
VPC Service Controls 保護機制僅適用於在私人集區中執行的建構作業,無法與在預設集區中執行的建構作業搭配使用。
使用 VPC Service Controls 時,系統不支援 Cloud Build Pub/Sub 觸發條件。
後續步驟
- 瞭解如何在私人集區中執行建構作業。
- 瞭解如何設定常見的網路用途。