G-gen の助田です。当記事では、Network Connectivity Center を使い、異なるプロジェクトの VPC ネットワーク同士を接続する手順を解説します。

はじめに
Network Connectivity Center とは
Network Connectivity Center(以下、NCC)は、Google Cloud 上の VPC ネットワークやオンプレミスネットワーク等を、ハブアンドスポークモデルで一元管理するためのネットワーク接続管理サービスです。複数の VPC ネットワークを統合管理し、推移的ルーティングや拠点間接続を実現できます。
NCC の基本的な仕様や詳細な説明については、以下の記事をご参照ください。
検証シナリオ
当記事では、ハブを管理するプロジェクト A と、そこへ接続するスポークを持つプロジェクト B の構成を検証します。
具体的には、プロジェクト A に作成する NCC ハブ(ncc-hub-central)に対して、自プロジェクトの VPC ネットワーク(vpc-a)と、別プロジェクトであるプロジェクト B の VPC ネットワーク(vpc-b)を、それぞれスポークとして接続します。これにより、異なるプロジェクトに存在する VPC ネットワーク間で経路情報を交換し、相互通信が可能な状態を実現します。
構成図は、以下の通りです。

リソース定義は以下の通りです。
| 項目 | プロジェクト A(ハブ管理) | プロジェクト B(スポーク接続) |
|---|---|---|
| プロジェクト ID | project-a-hub | project-b-spoke |
| VPC ネットワーク名 | vpc-a | vpc-b |
| サブネット | subnet-a(10.0.0.0/24) |
subnet-b(172.16.0.0/24) |
| リージョン | asia-northeast1 | asia-northeast1 |
| NCC ハブ名 | ncc-hub-central | - |
| スポーク名 | spoke-a | spoke-b |
ハイブリッドスポーク使用時の注意点
当記事ではプロジェクトを跨いだ VPC スポークの接続手順を紹介しますが、プロジェクト間接続において、ハイブリッドスポーク(Cloud VPN、Cloud Interconnect、ルーター アプライアンス)は、ハブと同じプロジェクト内に存在する必要があります。
例えば、外部ネットワーク(オンプレミスや他クラウド等)との接続用リソースをスポーク側のプロジェクト(今回の例ではプロジェクト B)に配置し、プロジェクト A のハブへ接続することはできません。ハイブリッド接続を行う場合は、ハブ側のプロジェクトへリソースを集約しなければならないという設計上の制約に留意が必要です。
- 参考 : ハイブリッドスポーク
設定手順
事前準備
プロジェクトを跨いだネットワーク構成とする場合、各プロジェクトでの作業内容に応じて適切な IAM 権限の付与が必要です。今回は以下の作業を実施するため、それぞれのプロジェクトで権限を設定します。
当記事の作業では、プロジェクト A において、ハブの作成や別プロジェクトからの接続承認、および自プロジェクトの VPC ネットワークのスポーク化を行います。この作業のためにハブの作成者が必要な権限は以下のとおりです。
| リソース | ロール |
|---|---|
| プロジェクト A | ・ハブ アンド スポーク管理者(roles/networkconnectivity.hubAdmin)・スポーク管理者( roles/networkconnectivity.spokeAdmin)・Compute ネットワーク管理者( roles/compute.networkAdmin) |
一方のプロジェクト B では、スポークを作成し、プロジェクト A のハブに対して接続リクエストを送信します。この作業のためにスポークの作成者が必要な権限は以下のとおりです。
| リソース | ロール |
|---|---|
| プロジェクト A | ・グループ ユーザー(roles/networkconnectivity.groupUser) |
| プロジェクト B | ・スポーク管理者(roles/networkconnectivity.spokeAdmin)・Compute ネットワーク管理者( roles/compute.networkAdmin) |
上記では、プロジェクト A と B にそれぞれ別の管理者がいる前提で必要な権限を分けて記載しましたが、両方のプロジェクトに対して同じ管理者が操作をしても構いません。
- 参考 : ハブとスポークを操作する
- 参考 : 別のプロジェクトでスポークを提案する
プロジェクト A: NCC ハブの作成とスポークの接続
まずはネットワークの中心となるハブを作成し、プロジェクト A 自身の VPC ネットワークを接続します。
- NCC ハブのトポロジを選択します。今回は相互通信を行うため、メッシュ トポロジを選択します。

ハブ -トポロジ選択- ハブ名を入力し、作成ボタンを押下します。(スポークの追加は後ほど行います)

ハブ -構成- 続いて、スポークを作成します。先ほど作成したハブに、
vpc-aをスポークspoke-aとして接続します。
スポークA -接続先のハブ設定- 
スポークA -編集-
同一プロジェクト内のスポーク接続では特別な承認ステップは発生せず、作成直後にスポークのステータスが Active となります。

プロジェクト B: スポークの作成と接続リクエストの送信
次に、プロジェクト B でスポークを作成し、別プロジェクトにある NCC ハブへ接続します。
- 接続するハブのロケーションを指定します。別のプロジェクトにあるハブへ接続するため、「別のプロジェクト内」を選択し、ハブが存在するプロジェクト ID とハブ名を指定して、次のステップを押下します。

スポークB -接続先のハブ設定- vpc-bをスポークspoke-bとして作成します。
スポークB -編集-
作成完了後、スポークのステータスが 「確認待ち(Pending)」 となることを確認します。

この時点では経路情報の交換は行われておらず、VPC ネットワーク間での通信はできません。
プロジェクト A: 接続リクエストの承認
プロジェクト間のスポーク接続においては、ハブ管理者がリクエストを承認することでハブへの接続が有効化されます。
- プロジェクト A のハブ詳細画面から、ステータスが[確認待ち] のスポークを選択します。
- リクエスト内容を確認後、[スポークを承認] を押下し、接続を承認します。

スポークB -承認実行-
承認後、ステータスが Active となります。

疎通確認
ルートテーブルの確認
接続完了後、NCC ハブおよび各 VPC ネットワークのルートテーブルを参照し、以下の通りルートが追加されていることを確認します。
NCC ハブのルートテーブル
スポーク A(10.0.0.0/24)およびスポーク B(172.16.0.0/24)のサブネットルートが学習されていることを確認します。

VPC ネットワーク A のルートテーブル
ネクストホップを NCC ハブとする172.16.0.0/24 へのルートが自動追加されていることを確認します。

VPC ネットワーク B のルートテーブル
同様に10.0.0.0/24 へのルートが追加されていることを確認します。

PING による疎通テスト
検証用に作成した各 VPC ネットワーク内の VM 間で、プライベート IP アドレスによる疎通を確認しました。
# VPC ネットワーク B の VM から、VPC ネットワーク A のVM(10.0.0.2)へ ping 実行 ping 10.0.0.2 -c 4 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.23 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.456 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.421 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.443 ms --- 10.0.0.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 0.421/0.637/1.230/0.342 ms
NCC ハブを介して、プロジェクトを跨いだ通信が正常に行われていることが確認できました。
助田 真輝(記事一覧)
クラウドソリューション部所属。2024年11月、G-genにジョイン。クラウドインフラ設計、特にネットワークとセキュリティ分野に強い関心を持ち、関連技術の探求に日々取り組む。
