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の中に入れることはできそうというのはイメージつくと思います。
Contents
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はその間の通信量によって課金となるため、データ量が多いと痛い目に遭う可能性があります。
グローバルIPアドレス
グローバルIPアドレスは、動的に様々変わってしまいます。
なので、静的なエフェメラルなIPアドレスを指定します。
そうすることで、毎回再起動したりしてグローバルIPアドレスが変わることはなくなります。
社内LANなど
GCPではVPCで環境の構築ができました。
で、社内のデータを例えばセキュアに連携したいということがあると思います。
社内のデータは以下のように、インナーネット上(グローバル上)にあるわけではなく、社内ネットワーク内のデータベースにあるとします。
このデータを例えばインターネット経由でGCPに連携するのではなく、GCP内のVPC内に直接連携をしたいとします。
そうすれば、データ転送の際にインターネットを通じての連携をしないので、セキュアに外部に漏れることなく転送が実現します。
これをするためにはどうしたら良いでしょうか。
それは、GCPが提供する、以下のソリューションを使うことで実現が可能です。
② 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/
この2つのプライベート環境をつなぐわけですから、プライベートIPアドレスの重複が起きるということが発生します。
これはどう対処すれば良いでしょうか。
Cloud Interconnectのヘルプページには以下の記載があります。
Cloud Interconnectを接続することでよしなに、プライベートIPアドレスによる通信を実現できるようになるみたいでした。