この例では、サービス境界にすでに存在する既存のホスト プロジェクトの VPC ネットワークを別の境界に移行する方法を示します。
この例では、ホスト プロジェクトに 2 つの VPC ネットワークが構成されています。Cloud Storage リソースをホストしているサービス プロジェクトが 2 つあります。
次の図は、移行前のサンプル ホスト プロジェクトの境界構成を示しています。
アーキテクチャ図には、次のコンポーネントが示されています。
- ホスト プロジェクトホスト プロジェクトには、
VPC1
とVPC2
の 2 つの VPC ネットワークが構成されています。 - サービス プロジェクトサービス プロジェクト
service-project-1
とservice-project-2
には Cloud Storage バケットがあり、サービス境界によって保護されています。 - 境界サービス境界
perimeter-1
は、ホスト プロジェクトとサービス プロジェクト全体を保護しています。VPC ネットワークVPC1
の VMVM1
と VPC ネットワークVPC2
の VMVM2
は、service-project-1
とservice-project-2
の両方のリソースにアクセスできます。
次の図は、移行後のホスト プロジェクトの境界構成を示しています。
アーキテクチャ図には、次のコンポーネントが示されています。
- Perimeter-1この境界は、VPC ネットワーク
VPC1
とサービス プロジェクトservice-project-1
を保護しています。VMVM1
はservice-project-1
の Cloud Storage バケットにアクセスできますが、service-project-2
の Cloud Storage バケットにはアクセスできません。 - Perimeter-2この境界は、VPC ネットワーク
VPC2
とサービス プロジェクトservice-project-2
を保護しています。VMVM2
はservice-project-2
の Cloud Storage バケットにアクセスできますが、service-project-1
の Cloud Storage バケットにはアクセスできません。
この移行の例では、ドライラン モードで構成を変更し、ドライラン構成を適用する前に検証しています。このプロセスにより、VPC ネットワークとリソースが保護され、移行中に VPC1
から service-project-1
、VPC2
から 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>
<アクセス ポリシー番号> は、ドライラン モードのコマンド例で使用されています。次のコマンドを使用して、デフォルトのアクセス ポリシーを設定することもできます。
gcloud alpha config set access_context_manager/policy<access policy number>
ドライラン構成を設定する
この例では、dry-run コマンドを使用して境界 perimeter-1
を更新し、network-host-project
と service-project-2
を削除して VPC1
を追加します。次に、dry-run コマンドを実行して新しい境界 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
と VPC1
を追加します。
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
ドライラン構成が本番環境のトラフィックに影響しないため、コマンドは正常に実行されます。ただし、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-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