新年あけましておめでとうございます。
KIYONOのインターン生です。
今回はGoogle CloudとAmazon Web Serviceの二つのクラウドをVPN接続でつないでセキュアな通信を行う方法について説明させていただきます。
VPN接続とは
VPNは、Virtual Private Networkの略で、簡単に言うと「専用の通信経路」です。
下図はVPNのイメージ図です。
インターネット内で、「トンネリング」「カプセル化」「暗号化」といった技術を使うことで、専用のネットワークを構築しているというイメージです。
画像引用:https://it-trend.jp/vpn/article/48-0071
より分かりやすくしたイラストが下図です。
便箋に宛先・本文を書いて送りたい場合を考えます。この便箋をそのまま送ってしまうと、宛先などの個人情報や、便箋に書かれている内容がすべて丸見えの状態です。
ここで、封筒に便箋を入れて内容を隠すことを「カプセル化」と言います。そして、カプセル化して情報を送信する技術を「トンネリング」と言います。
封筒に便箋を入れるとき、通常は便せんに書かれた宛先と同じ宛先を封筒にも書くと思います。この場合を、「トランスポートモード」と言います。そして下図のように、便箋の宛先とは別の宛先を封筒に書く場合を「トンネルモード」と言います。
整理すると、中身だけ隠すことをトランスポートモード、宛先と中身の両方を隠すことをトンネルモードと言い、VPNでは一般的にこのトンネルモードが使用されます。これにより、実際の宛先や中身の情報は隠されたまま目的地に送信することができ、セキュアな通信が可能になります。
では、封筒に入れる際に宛先を書き換えて、秘匿化しているにもかかわらず、正しい目的地まで便箋を送ることができるのはどうしてでしょうか?
これは、トンネリングが2つの異なる宛先を使用するからです。一つは手紙(データパケット)をトンネルの終点(VPNサーバー)まで導くための一時的な宛先(封筒)、もう一つは手紙が最終的に到達すべき本来の宛先(便箋)です。この方法により、データは途中での傍受や覗き見から保護されつつ、最終的に正しい目的地に到達することができます。
実際のカプセル化は下図のようになっています。白い部分が便箋、水色の部分が封筒と認識していただけると、それぞれの用語が分からなくてもイメージがつくと思います。
画像引用:https://infraexpert.com/study/rp8gre.htm
AWSとGCPをVPN接続する
GCPが提供するVPNにはClassic VPN と HA VPNの2種類があります。
今回は、GCP外部とのVPN接続で動的ルーティングを行うため、HA VPNを使用します。
こちらに記載があるように、Classic VPNではGCP外部との動的ルーティングは推奨されていないので、ご注意ください。
VPN接続前の準備(AWS)
手順1)VPCの作成
[VPC > お使いのVPC > VPCを作成]
から作成します。IPv4アドレスはお使いの環境に合わせて設定してください。
手順2)仮想プライベートゲートウェイの作成・VPCへアタッチ
[VPC > 仮想プライベートゲートウェイ > 仮想プライベートゲートウェイを作成]
から作成します。自律システム番号 (ASN)はAmazonデフォルトASNを指定します。
作成した仮想プライベートゲートウェイを選択し、[アクション > VPCへアタッチ]
をクリックして、先ほど作成したVPCへアタッチします。
手順3)ルートテーブルの伝播をON
[VPC > ルートテーブル]
から、先ほど作成したVPCのルートテーブルを選択します。(VPCの名前を確認するとわかります。)
[ルート伝播 > ルート伝播の編集 > 伝播の有効化にチェック]
をすることで、上記の伝播済みがいいえからはいに変わったことを確認します。
これを行うことで、BGPを用いてルーティング情報の交換が可能になります。
VPN接続前の準備(GCP)
手順1)VPCネットワークの作成
[VPCネットワーク > VPCネットワークの作成]
から、作成します。いくつかの設定箇所がありますので、環境に合わせて設定を変更してください。
手順2)クラウドルーターの作成
[ネットワーク接続 > Cloud Router]
から、ルーターを作成します。ネットワークには1.で作成した名前のVPCネットワークを指定します。
Google ASNはデフォルトの65000のままにします。
ここまででVPN接続を行うための準備は完了です。
VPN接続(GCP①)
手順1)VPNゲートウェイの作成
[ネットワーク接続 > VPNの作成]
と進み、高可用性(HA)VPNを選択します。
Cloud HA VPN ゲートウェイの作成を行います。ネットワークには作成したVPCネットワークを選択し、使用したいリージョンを選択します。それ以外はデフォルトのままです。
手順2)VPNトンネルの作成
ピアVPNゲートウェイには、オンプレミスまたは非Google Cloudを選択します。
VPCトンネル作成画面に進むと、上記のマーカー部のように、インタフェースのところに二つのIPアドレスが記載されています。このIPアドレスをメモして一旦GCP側の作業を止めます。
VPN接続(AWS)
手順1)VPN接続の作成(2つ)
[VPC > 仮想プライベートネットワーク(VPN) > Site-to-Site VPN 接続]
より、VPN接続を二つ作成します。
仮想プライベートゲートウェイは作成したものを指定します。
カスタマーゲートウェイは新規を選択します。IPアドレスにはGCPでVPNトンネル作成時に表示されたIPアドレスの一つ目を入力します。
BGP ASNは、GCPでクラウドルーター作成時に入力したASNと同じ値(65000)を入力します。
これで一つ目のVPN接続の作成は完了です。同様にして、もう一つのVPN接続を作成します。この時指定するIPアドレスは、GCPのVPNトンネル作成時の二つ目のIPアドレスを入力することに注意して下さい。
手順2)VPN接続の設定のダウンロード
[VPN接続 > VPN接続の選択 > 設定をダウンロード]
をクリックします。
下記のように、ベンダー・プラットフォームをGenericに設定して、ダウンロードをクリックします。
するとテキストファイルがダウンロードされます。このテキストファイルは、GCP側の設定で使用します。二つ目のVPN接続の設定も同様にして、ダウンロードします。
(以下、それぞれのテキストファイルをテキストファイル1, テキストファイル2とする。)
AWS側の設定はこれで完了です。
VPN接続(GCP②)
手順1)ピアVPNゲートウェイの作成
2つのインタフェースを選択します。
インタフェース0のIPアドレス :
- テキストファイル1
- IPsec Tunnel #1
- #3: Tunnel Interface Configuration
- Outside IP Addresses : Virtual Private Gateway
- #3: Tunnel Interface Configuration
- IPsec Tunnel #1
の値を入力します。
インタフェース1のIPアドレスはテキストファイル2の同様の場所の値を入力します。
これで、ピアVPNゲートウェイの作成は完了です。
このとき、
インタフェース0 ー テキストファイル1
インタフェース1 ー テキストファイル2
という対応関係ができたので、以降で値を入力するときは参照するファイルを間違えないように注意してください。
手順2)VPNトンネルの追加
選択オプション:
・高可用性 -> VPNトンネルのペアを作成する
・ルーティングオプション -> 作成したCloud Router
をそれぞれ選択します。
①関連付けられているCloud VPNゲートウェイ インタフェース には、下記の値を選択します。
- テキストファイル1:
- IPsec Tunnel1 #1
- #3 Tunnel Interface Configuration
- Outside IP Addresses: Customer Gateway
- #3 Tunnel Interface Configuration
- IPsec Tunnel1 #1
②関連付けられているピアゲートウェイ インタフェース には、下記の値を選択します。
- テキストファイル1:
- IPsec Tunnel1 #1
- #3 Tunnel Interface Configuration
- Outside IP Addresses: Virtual Private Gateway
- #3 Tunnel Interface Configuration
- IPsec Tunnel1 #1
③IKEバージョン:IKEv1
④IKE事前共有キーには下記の値を入力します。
- テキストファイル1
- IPsec Tunnel #1
- #1: Internet Key Exchange Configuration
- Pre-shared Key
- #1: Internet Key Exchange Configuration
- IPsec Tunnel #1
もう一つのトンネルについても、上記のテキストファイル1をテキストファイル2に置き換えて、同様にして入力します。
これで、トンネルの作成は完了です。
手順3)BGPセッションを構成
BGPセッションを構成をクリックします。
①ピアASN
- テキストファイル1(トンネル1のBGPセッションの設定をしているから)
- IPSec Tunnel #1
- #4: Border Gateway Protocol (BGP) Configuration
- BGP Configuration Options: Virtual Private Gateway ASN
- #4: Border Gateway Protocol (BGP) Configuration
- IPSec Tunnel #1
②Allocate BGP IPv4 addressを手動に変更します。
③Cloud RouterのBGP IPv4 アドレス
- IPSec Tunnel #1
- #3: Tunnel Interface Configuration
- Inside IP Addresses – Customer Gateway
(CIDR表記じゃないので”/”以降は消す)
- Inside IP Addresses – Customer Gateway
- #3: Tunnel Interface Configuration
④BGP ピア IPv4アドレス
- IPSec Tunnel #1
- #3: Tunnel Interface Configuration
- Inside IP Addresses – Virtual Private Gateway
(CIDR表記じゃないので”/”以降は消す)
- Inside IP Addresses – Virtual Private Gateway
- #3: Tunnel Interface Configuration
トンネル2のBGPセッションもテキストファイル2を参照して同様に行います。
完了したら、BGPセッションを構成をクリックします。
VPN接続の確認
1.GCP側
このように、トンネル・BGPセッションのステータスがともに確率となっていればVPN接続は成功です。
2.AWS側
AWS側では二つのVPN接続を作成しました。それぞれのVPN接続のうち、トンネル1がUpとなっていれば、VPN接続に成功しています。
Tunnel2のステータスがDownとなっているのは、今回の接続では一つのVPN接続に対して、一つのトンネルしか作成していないためです。
GCP側のトンネル作成時に、それぞれのVPN接続に対して、もう一つずつトンネルを作成することで、AWS側のTunnel2をUpにし、可用性をさらに上げることができます。
最後に
いかがでしたでしょうか。
GCPとAWSの二つのクラウド間でVPN接続を確立するための設定方法について解説させていただきました。他にもオンプレミスや、他社サービスとのVPN接続を設定することも可能ですので、ご参考になれば幸いです。
実際に試して難しい場合は、弊社にご相談いただければと思います。
また、本記事は下記のサイトを参考に作成させていただきました。
・https://dev.classmethod.jp/articles/aws_gcp_vpn_ha/
・https://dev.classmethod.jp/articles/aws_gcp_vpn/
コメント