這個範例說明如何將現有主機專案的虛擬私有雲網路遷移至不同的服務範圍 (該專案已位於服務範圍內)。
在這個範例中,主專案包含兩個 VPC 網路。兩個服務專案會代管各自的 Cloud Storage 資源。
下圖顯示遷移前主機專案的邊界設定:
架構圖顯示下列元件:
- 主專案。主專案包含兩個 VPC 網路
VPC1
和VPC2
。 - 服務專案。服務專案
service-project-1
和service-project-2
包含 Cloud Storage 值區,並受到服務範圍的保護。 - Perimeter:服務範圍
perimeter-1
可保護整個主機專案和服務專案。虛擬私有雲網路VPC1
中的 VMVM1
和虛擬私有雲網路VPC2
中的 VMVM2
都能存取service-project-1
和service-project-2
中的資源。
下圖顯示遷移後主機專案的邊界設定。
架構圖顯示下列元件:
- Perimeter-1。這個範圍會保護
VPC1
虛擬私有雲網路和service-project-1
服務專案。VMVM1
可存取service-project-1
中的 Cloud Storage 值區,但無法存取service-project-2
中的 Cloud Storage 值區。 - Perimeter-2。這個範圍會保護
VPC2
虛擬私有雲網路和service-project-2
服務專案。VMVM2
可存取service-project-2
中的 Cloud Storage 值區,但無法存取service-project-1
中的 Cloud Storage 值區。
在這個遷移範例中,系統會在模擬測試模式中進行設定變更,然後在強制執行模擬測試設定前進行驗證。這項程序可確保虛擬私有雲網路和資源受到保護,且從 VPC1
到 service-project-1
和從 VPC2
到 service-project-2
的正式環境流量不會在遷移期間中斷。
遷移程序包含下列步驟:
- 取得虛擬私有雲網路和範圍詳細資料
- 設定模擬測試範圍
- 驗證模擬測試設定
- 強制執行模擬測試設定
取得虛擬私有雲網路和範圍詳細資料
在這個範例中,您必須先取得 VPC 網路和邊界詳細資料清單,才能開始遷移作業。
列出主專案中的虛擬私有雲網路
下列指令會列出 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
取得範圍詳細資料
下列指令可取得周界詳細資料:
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-1
,以移除 network-host-project
、service-project-2
並新增 VPC1
。接著,您可以執行模擬執行指令來建立新的周界 perimeter-2
,並新增 service-project-2
和 VPC2
。
如果您在其他存取權政策中將專案新增至範圍,必須先從現有存取權政策的範圍中移除專案。如要進一步瞭解如何從服務範圍中移除專案,請參閱「更新服務範圍」。
更新模擬測試設定
下列指令會更新範圍 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-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 值區,請登入 VPC1
中的 VM1
,然後執行下列指令:
gcloud storage ls --project=service-project-1
如要列出 service-project-2
中的 Cloud Storage 值區,請執行下列指令:
gcloud storage ls --project=service-project-2
模擬測試設定不會影響實際流量,因此指令可順利執行。不過,在 network-host-project
的稽核記錄中,會顯示下列模擬執行錯誤,表示從 VM1
存取 service-project-2
:
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