Google Cloud Platform

GCPのVPCについて

2022年10月9日

gcp

gcp
BigQueryやGCSはグローバルリソースでみんなで使用するものです。
VMは自分でサーバ立ててってできるのでグローバルリソースではないです。
なので独自VPCの中にいれることができますが、BQやGCSは入れることはできません。入れることはできないですが、VPC Service Controlという機能を使ってアクセスの制限をかけることが可能です。
今自分たちはVPCの中で操作をしていて、そこからグローバルIPアドレスであるBQにアクセスするために、VPC Service Controlsを抜けないといけません。

まずGCPのVPCを理解する上で大事なこととしては、
GCPの全てのソリューションが、VPC内に置くことができるというわけではないです。
よくVPCの中にサーバなどを入れてプライベートな環境を作るのでその中にBigQueryやCloud Storageなど、GCPのサービスはプライベートな環境に入れることはできません。
BigQueryはスロットという機能があり、みんなでメモリを共有しあって高速処理を実現します。オンデマンドではスロットは2000までという制限もあり、グローバルでみんなで共有して使うので、処理が遅い時もあります。なのでこのようなグローバルリソース、グローバルサービスのものは独自のVPCの中に置くということはできないのです。これは直感的にわかりそうですね。
でもCompute Engineはそれこそ自分でサーバを立てるので自分専用のサーバ、メモリ、HDDなどがあるわけです。これは直感的にVPCの中に入れることはできそうというのはイメージつくと思います。

BigQueryやCloud Storageなどのグローバルリソース

なので、このようにGCPのサービス全てがそもそもVPCの中に入ると思うのは間違いです。
そして、でもVPCを使うことでBigQueryやCloud Storageに何もできないのか?というとそういうわけではなく、グローバルリソースに対してVPCの効果としては、「VPC Service Controls」というアクセス制限を立てることが可能になります。
BigQueryへアクセスする場合は、VPCのServce Controlsという壁を乗り越えないとアクセスできないような処理をかますことが可能になります。

Compute Engineなどのサーバ

そして、Compute Engineはサーバなので、VPCの中に入った場合はグローバルではなくプライベートな環境になるので、
グローバルIPアドレスが割り振られるのではなく、プライベートIPアドレスが割り振られるようになります。
立てたサーバが東京リージョンなら、クラスAの範囲で振られたりという感じになります。

Cloud NATやCloud Router

そして、Compute Engineには、
プライベートIPアドレスが割り振られます。
これを自宅のネット環境と一緒に考えてみると、
以下の左の画像はネット環境のイメージで、右は今のGCPのVPC内の環境のイメージです。
つまり、インターネットを繋ぐ箇所が今度は必要になるのがわかります。
要はルーティングやグローバルIPアドレスやプライベートIPアドレスを変換する処理が必要ということになります。

これを行うのが、Cloud NATやCloud Routerという機能になります。
これを間に入れることで、これでプライベートIPアドレス内からグローバルIPアドレスへアクセスできるようになりました。

※ もちろんセキュリティの担保のため、インターネットと接続をする必要がなければ、Cloud NATやCloud Routerの設置などはいらないです。
※ データを外部のサードパーティ製のツールに渡すとかであれば、インターネットに繋がないと、ネットワーク上そのツールと繋がりが遮断されてしまうので、データ転送ができないので、そう言った場合にCloud NATやCloud Routerの設置は必要になります。
※ Cloud NATやCloud Routerはその間の通信量によって課金となるため、データ量が多いと痛い目に遭う可能性があります。

グローバルIPアドレス

グローバルIPアドレスは、動的に様々変わってしまいます。
なので、静的なエフェメラルなIPアドレスを指定します。
そうすることで、毎回再起動したりしてグローバルIPアドレスが変わることはなくなります。

社内LANなど

GCPではVPCで環境の構築ができました。
で、社内のデータを例えばセキュアに連携したいということがあると思います。
社内のデータは以下のように、インナーネット上(グローバル上)にあるわけではなく、社内ネットワーク内のデータベースにあるとします。
このデータを例えばインターネット経由でGCPに連携するのではなく、GCP内のVPC内に直接連携をしたいとします。
そうすれば、データ転送の際にインターネットを通じての連携をしないので、セキュアに外部に漏れることなく転送が実現します。
これをするためにはどうしたら良いでしょうか。

それは、GCPが提供する、以下のソリューションを使うことで実現が可能です。

① Cloud VPN
② Cloud Interconnect
③ Dedicated Interconnect
④ Partner Interconnect

これを用いることで、以下のような構図が出来上がります。

③ Dedicated Interconnect

これは、Dedicated(直接的な)なので、専用線を社内環境とVPCに引きます。
これは実際にGoogle担当者が引きに行くのでお金がかかります。

④ Partner Interconnect

これは、Partnerなので、Googleのパートナー会社がそういったサービスを提供していて、そこに連絡することで引いてくれます。
パートナーが専用線を引くので、みんなで使うので転送量としてはちょっと少なめなイメージ。
日本だと、Colt、Agateなどが該当しますね。

①、②

これらは、閉塞網でつなげてくれる機能です。
つまり、ネットワークを外部に出してではなく、完全にプライベート環境内にて接続をするセキュアなものになります。
Cloud VPNでは3Gbpsの通信で、パーセカンドなので1秒間に3GBの通信を行うことができます。

さらにここで1つ問題点が起こります。
それは、プライベートIPアドレスの重複です。

まずGCPのVPC内でプライベートIPアドレスを振っています。
そして社内LAN内のデータベースもプライベートIPアドレスです。
プライベートIPアドレスは、各プライベート環境内で同じ範囲で振られます。
なので、VPC内で192.168.0.1というプライベートIPアドレスを持ったサーバやPCが、そして社内LAN内も192.168.0.1というプライベートIPアドレスを持ったサーバやPCが存在する可能性があります。
そういった中で2つの環境を結ぶと、プライベート環境が繋がるので1つのプライベート環境が出来上がり、つまり重複が許されなくなります。
なので、ここが問題になるわけです。
https://dev.classmethod.jp/articles/vpn-cidr/

3. VPCとサブネットを作成し、AWSに自前ネットワークを構築する

この2つのプライベート環境をつなぐわけですから、プライベートIPアドレスの重複が起きるということが発生します。
これはどう対処すれば良いでしょうか。

Cloud Interconnectのヘルプページには以下の記載があります。

Cloud Interconnect は、低レイテンシで高可用性の接続を実現することにより、オンプレミス ネットワークと Google Cloud Virtual Private Cloud(VPC)ネットワーク間での安定したデータ転送を可能にします。また、Cloud Interconnect 接続から提供される内部 IP アドレス通信により、双方のネットワークから内部 IP アドレスへの直接アクセスが実現されます。

Cloud Interconnectを接続することでよしなに、プライベートIPアドレスによる通信を実現できるようになるみたいでした。

-Google Cloud Platform

© 2024 Yosshi Labo. Powered by AFFINGER5