將虛擬私有雲網路遷移至個別 perimeter 的範例

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

在本範例中,主專案包含兩個虛擬私有雲網路。兩個服務專案會託管 Cloud Storage 資源。

下圖顯示遷移前,範例主專案的 perimeter 設定:

遷移前的主專案

架構圖顯示下列元件:

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

下圖顯示遷移後主專案的 perimeter 設定。

遷移後的主專案

架構圖顯示下列元件:

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

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

如果您要將專案新增至其他存取權政策中的 perimeter,請先從現有存取權政策中的 perimeter 移除專案。如要瞭解如何從 perimeter 移除專案,請參閱「更新 service perimeter」。

更新模擬測試設定

下列指令會更新 perimeter 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

下列指令會建立 perimeter perimeter-2,並新增 service-project-2VPC2

    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 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>"
    }
    ]
  

同樣地,從 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