VPC ネットワークを別の境界に移行する例

この例では、サービス境界にすでに存在する既存のホスト プロジェクトの VPC ネットワークを別の境界に移行する方法を示します。

この例では、ホスト プロジェクトに 2 つの VPC ネットワークが構成されています。Cloud Storage リソースをホストしているサービス プロジェクトが 2 つあります。

次の図は、移行前のサンプル ホスト プロジェクトの境界構成を示しています。

移行前のホスト プロジェクト

このアーキテクチャ図には、次のコンポーネントが示されています。

  • ホスト プロジェクト。ホスト プロジェクトには、VPC1VPC2 の 2 つの VPC ネットワークが構成されています。
  • サービス プロジェクト。サービス プロジェクト service-project-1service-project-2 には Cloud Storage バケットがあり、サービス境界によって保護されています。
  • 境界。サービス境界 perimeter-1 は、ホスト プロジェクトとサービス プロジェクト全体を保護しています。VPC ネットワーク VPC1 の VM VM1 と VPC ネットワーク VPC2 の VM VM2 は、service-project-1service-project-2 の両方のリソースにアクセスできます。

次の図は、移行後のホスト プロジェクトの境界構成を示しています。

移行後のホスト プロジェクト

このアーキテクチャ図には、次のコンポーネントが示されています。

  • 境界 1。この境界は、VPC ネットワーク VPC1 とサービス プロジェクト service-project-1 を保護しています。VM VM1service-project-1 の Cloud Storage バケットにアクセスできますが、service-project-2 の Cloud Storage バケットにはアクセスできません。
  • 境界 2。この境界は、VPC ネットワーク VPC2 とサービス プロジェクト service-project-2 を保護しています。VM VM2service-project-2 の Cloud Storage バケットにアクセスできますが、service-project-1 の Cloud Storage バケットにはアクセスできません。

この移行の例では、ドライラン モードで構成を変更し、ドライラン構成を適用する前に検証しています。このプロセスにより、VPC ネットワークとリソースが保護され、移行中に VPC1 から service-project-1VPC2 から service-project-2 への本番環境トラフィックが中断されていないことを確認します。

この移行プロセスは以下の手順で構成されます。

  • VPC ネットワークと境界の詳細を取得する
  • ドライランの境界構成を設定する
  • ドライランの設定を検証する
  • ドライラン構成を適用する

VPC ネットワークと境界の詳細を取得する

この例では、移行を開始する前に、VPC ネットワークと境界の詳細を取得する必要があります。

ホスト プロジェクト内の VPC ネットワークを一覧表示する

次のコマンドは、network-host-project の VPC ネットワークを一覧表示します。

    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>
  

ドライラン構成を設定する

この例では、dry-run コマンドを使用して境界 perimeter-1 を更新し、network-host-projectservice-project-2 を削除して VPC1 を追加します。次に、dry-run コマンドを実行して新しい境界 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-2VPC1 を追加します。

    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-1VPC2 から service-project-2 までにドライラン エラーがないことを確認するため、次のコマンドを実行します。

service-project-1 の Cloud Storage バケットを一覧表示するには、VPC1 にある VM1 にログインして、次のコマンドを実行します。

    gsutil ls -p service-project-1
  

service-project-2 の Cloud Storage バケットを一覧表示するには、次のコマンドを実行します。

    gsutil ls -p 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>"
    }
    ]
  

ドライラン構成を適用する

1 つのアトミック トランザクションで、すべてのドライラン構成を一度に適用する必要があります。

ドライラン構成を適用するには、次のコマンドを実行します。

    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 が削除され、VPC1perimeter-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-2VPC2perimeter-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