將 VPC 網路遷移至不同範圍的範例

這個範例說明如何將現有主機專案的虛擬私有雲網路遷移至不同的服務範圍 (該專案已位於服務範圍內)。

在這個範例中,主專案包含兩個 VPC 網路。兩個服務專案會代管各自的 Cloud Storage 資源。

下圖顯示遷移前主機專案的邊界設定:

遷移前主控專案

架構圖顯示下列元件:

  • 主專案。主專案包含兩個 VPC 網路 VPC1VPC2
  • 服務專案。服務專案 service-project-1service-project-2 包含 Cloud Storage 值區,並受到服務範圍的保護。
  • Perimeter:服務範圍 perimeter-1 可保護整個主機專案和服務專案。虛擬私有雲網路 VPC1 中的 VM VM1 和虛擬私有雲網路 VPC2 中的 VM VM2 都能存取 service-project-1service-project-2 中的資源。

下圖顯示遷移後主機專案的邊界設定。

遷移後的主機專案

架構圖顯示下列元件:

  • Perimeter-1。這個範圍會保護 VPC1 虛擬私有雲網路和 service-project-1 服務專案。VM VM1 可存取 service-project-1 中的 Cloud Storage 值區,但無法存取 service-project-2 中的 Cloud Storage 值區。
  • Perimeter-2。這個範圍會保護 VPC2 虛擬私有雲網路和 service-project-2 服務專案。VM VM2 可存取 service-project-2 中的 Cloud Storage 值區,但無法存取 service-project-1 中的 Cloud Storage 值區。

在這個遷移範例中,系統會在模擬測試模式中進行設定變更,然後在強制執行模擬測試設定前進行驗證。這項程序可確保虛擬私有雲網路和資源受到保護,且從 VPC1service-project-1 和從 VPC2service-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-projectservice-project-2 並新增 VPC1。接著,您可以執行模擬執行指令來建立新的周界 perimeter-2,並新增 service-project-2VPC2

如果您在其他存取權政策中將專案新增至範圍,必須先從現有存取權政策的範圍中移除專案。如要進一步瞭解如何從服務範圍中移除專案,請參閱「更新服務範圍」。

更新模擬測試設定

下列指令會更新範圍 perimeter-1,移除 network-host-projectservice-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>
  

驗證模擬測試設定

在本例中,請執行下列指令,確保從 VPC1service-project-1 和從 VPC2service-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>"
    }
    ]
  

同樣地,從 VM2service-project-2 的 Cloud Storage 要求不會有模擬執行錯誤,而從 VM2service-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-projectservice-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-2VPC2 會新增至 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