這個範例說明如何將現有主專案 (已位於 service perimeter 內) 的虛擬私有雲網路,遷移至不同的 perimeter。
在本範例中,主專案包含兩個虛擬私有雲網路。兩個服務專案會託管 Cloud Storage 資源。
下圖顯示遷移前,範例主專案的 perimeter 設定:

架構圖顯示下列元件:
- 主專案:主專案包含兩個虛擬私有雲網路
VPC1和VPC2。 - 服務專案:服務專案
service-project-1和service-project-2包含 Cloud Storage bucket,並受到 service perimeter 保護。 - Perimeter:service perimeter
perimeter-1可保護整個主專案和服務專案。虛擬私有雲網路VPC1中的 VMVM1,以及虛擬私有雲網路VPC2中的 VMVM2,都可以存取service-project-1和service-project-2中的資源。
下圖顯示遷移後主專案的 perimeter 設定。

架構圖顯示下列元件:
- Perimeter-1:這個 perimeter 會保護虛擬私有雲網路
VPC1和服務專案service-project-1。VMVM1可以存取service-project-1中的 Cloud Storage bucket,但無法存取service-project-2中的 Cloud Storage bucket。 - Perimeter-2:這個 perimeter 會保護虛擬私有雲網路
VPC2和服務專案service-project-2。VMVM2可以存取service-project-2中的 Cloud Storage bucket,但無法存取service-project-1中的 Cloud Storage bucket。
在這個遷移範例中,設定變更是在模擬測試模式下進行,然後在強制執行模擬測試設定前經過驗證。這項程序可確保虛擬私有雲網路和資源受到保護,且從 VPC1 到 service-project-1 和從 VPC2 到 service-project-2 的正式環境流量在遷移期間不會中斷。
遷移流程包含下列步驟:
- 取得虛擬私有雲網路和 perimeter 詳細資料
- 設定 dry run perimeter 設定
- 驗證模擬測試設定
- 強制執行模擬測試設定
取得虛擬私有雲網路和 perimeter 詳細資料
在本範例中,您必須先取得虛擬私有雲網路清單和 perimeter 詳細資料,才能開始遷移。
列出主專案中的虛擬私有雲網路
下列指令會列出 network-host-project 中的虛擬私有雲網路:
gcloud compute networks list --project=network-host-project
這個範例會產生下列輸出內容:
NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4
vpc1 AUTO REGIONAL
vpc2 AUTO REGIONAL
取得 perimeter 詳細資料
下列指令會取得 perimeter 的詳細資料:
gcloud access-context-manager perimeters describe perimeter-1
這個範例會產生下列輸出內容:
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1
status:
…
resources:
- projects/<network-host-project number>
- projects/<service-project-1 number>
- projects/<service-project-2 number>
範例模擬測試模式指令會使用 <access policy number>。您也可以使用下列指令設定預設存取權政策:
gcloud alpha config set access_context_manager/policy<access policy number>
設定模擬測試設定
在本範例中,您使用模擬測試指令更新 perimeter perimeter-1,移除 network-host-project 和 service-project-2,並新增 VPC1。接著,您會執行模擬測試指令,建立新的 perimeter perimeter-2,並新增 service-project-2 和 VPC2。
如果您要將專案新增至其他存取權政策中的 perimeter,請先從現有存取權政策中的 perimeter 移除專案。如要瞭解如何從 perimeter 移除專案,請參閱「更新 service perimeter」。
更新模擬測試設定
下列指令會更新 perimeter perimeter-1,移除 network-host-project、service-project-2,並新增 VPC1:
gcloud access-context-manager perimeters dry-run update perimeter-1
--remove-resources="projects/<network-host-project number>,projects/<service-project-2 number>"
--add-resources="//compute.googleapis.com/projects/network-host-project/global/networks/vpc1"
--policy=<access policy number>
在模擬測試模式中建立新的 perimeter
下列指令會建立 perimeter perimeter-2,並新增 service-project-2 和 VPC2:
gcloud access-context-manager perimeters dry-run create perimeter-2
--title=perimeter-2 --type="regular"
--resources="projects/<service-project-2 number>,//compute.googleapis.com/projects/network-host-project/global/networks/vpc2"
--restricted-services="storage.googleapis.com"
--policy=<access policy number>
驗證模擬測試設定
在本範例中,請執行下列指令,確保 VPC1 到 service-project-1,以及 VPC2 到 service-project-2 沒有模擬測試錯誤:
如要列出 service-project-1 中的 Cloud Storage bucket,請登入 VM1 (位於 VPC1 中),然後執行下列指令:
gcloud storage ls --project=service-project-1
如要列出 service-project-2 中的 Cloud Storage bucket,請執行下列指令:
gcloud storage ls --project=service-project-2
由於模擬測試設定不會影響正式環境流量,因此指令會順利執行。不過,在稽核記錄中,從 VM1 存取 service-project-2 時,network-host-project 會出現下列模擬測試錯誤:
egressViolations: [
0: {
servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-1"
source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC1"
sourceType: "Network"
targetResource: "projects/<service-project-2 number>"
}
]
同樣地,從 VM2 到 service-project-2 的 Cloud Storage 要求沒有模擬測試錯誤,而從 VM2 到 service-project-1 的要求在 network-host-project 的稽核記錄中,有下列模擬測試錯誤:
egressViolations: [
0: {
servicePerimeter: "accessPolicies/<access policy number>/servicePerimeters/perimeter-2"
source: "//compute.googleapis.com/projects/network-host-project/global/networks/VPC2"
sourceType: "Network"
targetResource: "projects/<service-project-1 number>"
}
]
強制執行模擬測試設定
您必須在一次整體性交易中,一次強制執行所有模擬測試設定。
如要強制執行模擬測試設定,請執行下列指令:
gcloud access-context-manager perimeters dry-run enforce-all --policy=<access policy number>
強制執行模擬測試設定後,請執行下列指令來說明 perimeter-1:
gcloud access-context-manager perimeters describe perimeter-1 --policy=<access policy number>
這個範例會產生下列輸出內容,其中 network-host-project 和 service-project-2 已移除,且 VPC1 已新增至 perimeter-1。
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-1
status:
…
resources:
- projects/<service-project-1 number>
- //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC1
執行下列指令來說明 perimeter-2:
gcloud access-context-manager perimeters describe perimeter-2 --policy=<access policy number>
這個範例會產生以下輸出內容,其中 service-project-2 和 VPC2 會新增至 perimeter-2。
name: accessPolicies/<access policy number>/servicePerimeters/perimeter-2
status:
…
resources:
- projects/<service-project-2 number>
- //compute.googleapis.com/projects/<network-host-project>/global/networks/VPC2
title: perimeter-2