AWS VPC と GCP VPC を VPN 接続するための設定例
[履歴] [最終更新] (2021/07/31 17:09:54)
最近の投稿
注目の記事

概要

AWS VPC と GCP VPC を IPsec-VPN で接続するための設定例を記載します。

Uploaded Image

Build HA VPN connections between Google Cloud and AWS

AWS VPC の作成

VPC 10.2.0.0/16

Uploaded Image

ap-northeast-1b Subnet 10.2.2.0/24

Uploaded Image

GCP VPC の作成

asia-northeast1 Subjet 10.1.1.0/24

Uploaded Image

GCP HA VPN の作成

GCP VPN GW は、以下の二つから選択して作成します。

本ページでは HA VPN を作成します。

Uploaded Image

my-gcp-ha-gw の作成、Subnet と同じ asia-northeast1 リージョン

Uploaded Image

AWS 側の Public IP が未設定であるため、VPN トンネルは後で作成します。キャンセルをクリックします。

Uploaded Image

作成された HA VPN GW です。

Uploaded Image

HA VPN にはインタフェースが二つ存在します。それぞれの外部 IP を控えておきます。

  • インタフェース0 35.242.56.246
  • インタフェース1 35.220.56.61

BGP ルーティング

AWS VPC 内の経路情報と GCP VPC 内の経路情報は、BGP プロトコルで送受信されます。BGP において、ネットワーク機器の集合体には AS 番号が付与されます。IP と同様にグローバル AS 番号、プライベート AS 番号という概念があります。ここでは 64512 から 65534 までの範囲のプライベート AS 番号から、以下の二つを AWS VPC と GCP VPC 用に割り当てることにします。参考: VyOS の基本的なルーティング設定 / BGP ルーティング

  • AWS 65001
  • GCP 65534

GCP Cloud Router の作成

Cloud Router を Subnet と同じリージョンに作成し、プライベート AS 番号 65534 を設定します。

Uploaded Image

作成された Cloud Router

Uploaded Image

Customer GW の作成

GCP で作成した HA VPN GW のインタフェース 0 と 1 に対応する Customer GW を AWS に登録します。

GCP HA VPN GW のインタフェース0 に対応する AWS Customer GW 設定

Uploaded Image

GCP HA VPN GW のインタフェース1 に対応する AWS Customer GW 設定

Uploaded Image

作成された二つの Customer GW

Uploaded Image

VGW と TGW の料金について

GCP HA VPN GW には二つのインタフェース 0 と 1 が存在します。AWS からこれらのインタフェースに向けた VPN 接続を行うために、VGW または TGW を作成します。

  • Virtual Private Gateway (VGW)
  • Transit Gateway (TGW)

どちらも VPN 接続毎に 0.048 USD/hour (東京リージョン) が発生します。

更に TGW の場合は、追加で 0.07 USD/hour/attachment (東京リージョン) が発生します。

アタッチする VPC の個数が多い場合に TGW の方が管理が簡単になりますが、本ページの例のように VPC の個数が少ない場合は VGW で十分です。

AWS 料金の計算例

本ページのように GCP で HA VPN GW を作成しており、GCP VPC と AWS VPC を接続する場合は、以下のような AWS 料金になります。

  • TGW → (0.048 * 2) + (0.07 * 3) = 0.306 USD/hour → 月額 約 24,235 円
  • VGW → 0.048 * 2 = 0.096 USD/hour → 月額 約 7,603 円

何らかの事情で料金を抑えたい場合は、HA VPN GW のインタフェース0 のみを利用することも考えられます。

  • TGW → (0.048 * 1) + (0.07 * 2) = 0.188 USD/hour → 月額 約 14,890 円
  • VGW → 0.048 * 1 = 0.048 USD/hour → 月額 約 3,802 円

GCP Cloud VPN 料金について

Cloud VPN の料金は Classic VPN と HA VPN に違いはなく、VPN トンネル毎に発生します。

0.075 USD/hour/tunnel (東京リージョン) です。

Cloud Router は無料です。

GCP 料金の計算例

HA VPN GW インタフェース 0 と 1 それぞれから 2 本の VPN トンネルを張る場合です。

  • 0.075 * 4 = 0.3 USD/hour → 月額 約 23,760 円

何らかの事情で料金を抑えたい場合は、HA VPN GW のインタフェース 0 のみを利用することも考えられます。

  • 0.075 * 2 = 0.15 USD/hour → 月額 約 11,880 円

更にインタフェース0 から VPN トンネルを一本しか張らないことも考えられます。AWS の Site-to-Site VPN の二つの VPN トンネルのうち一本しか設定しないということになります。

  • 0.075 * 1 = 0.075 USD/hour → 月額 約 5,940 円

Transit GW の作成

前述のように、本ページの構成であれば TGW を使用する必要は実際にはありませんが、設定方法の確認のために TGW を用いてみます。VGW を用いる場合もおおよそ同じ設定方法となります。

Uploaded Image

Transit GW への VPC アタッチ

VPC を TGW にアタッチします。0.048 USD/hour が発生します。

Uploaded Image

Transit GW への VPN アタッチ

Customer GW 二つを TGW にアタッチします。0.048 * 2 USD/hour が発生します。

Uploaded Image

VPN トンネルのオプションを既定値にすると、以下の二つが AWS によって自動生成されます。後に AWS からダウンロードして GCP 設定時に参照します。

  • GCP と接続するための事前共有鍵
  • VPN トンネル内における AWS と GCP それぞれのリンクローカル IP アドレス

Uploaded Image

ここまでの設定で、TGW には以下の 3 つがアタッチされた状態になります。

Uploaded Image

Site-to-Site VPN 接続の設定確認

Transit GW に Customer GW を VPN 設定でアタッチすると、Site-to-Site VPN 接続が生成されます。各 VPN 接続には、冗長化のために二つの VPN トンネルが存在します。VPN トンネルの AWS 側の外部 IP を控えておきます。

GCP 35.242.56.246 → AWS 35.74.205.39, 54.92.38.224

Uploaded Image

GCP 35.220.56.61 → AWS 35.74.57.202, 54.168.230.22

Uploaded Image

AWS Site-to-Site VPN 接続一つあたりの VPN トンネル数は2 となるため、全体としての VPN トンネル数は 4 となります。参考: HA VPN to AWS peer gateways

VPN トンネル接続設定のダウンロード

Site-to-Site VPN 設定をダウンロードします。自動生成された、VPN トンネルの事前共有鍵や、リンクローカル IP アドレスが記載されています。

Uploaded Image

GCP VPN トンネル設定の追加

HA VPN GW に VPN トンネルを設定します。

Uploaded Image

Peer GW の作成

VPN トンネルを作成するに先立ち、peer GW を作成する必要があります。AWS における Customer GW に相当する概念です。

Uploaded Image

VPN トンネルを作成

GCP 側の Cloud Router を選択します。

Uploaded Image

AWS からダウンロードした設定ファイルに記載されている事前共有鍵を、VPN トンネルの設定に記載します。

$ grep Pre-Shared Key vpn-0b6c529ce44fb05a4.txt
/usr/bin/grep: Key: No such file or directory
vpn-0b6c529ce44fb05a4.txt:  - Authentication Method    : Pre-Shared Key 
vpn-0b6c529ce44fb05a4.txt:  - Pre-Shared Key           : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
vpn-0b6c529ce44fb05a4.txt:  - Authentication Method    : Pre-Shared Key 
vpn-0b6c529ce44fb05a4.txt:  - Pre-Shared Key           : yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

Uploaded Image

BGP セッションの設定

各 VPN トンネルに対して、BGP セッションの設定を作成します。

Uploaded Image

AWS からダウンロードした設定ファイルに記載のリンクローカル IP アドレスを記載します。

Inside IP Addresses
  - Customer Gateway                : 169.254.92.246/30
  - Virtual Private Gateway             : 169.254.92.245/30

BGP セッションが確立されたことの確認

GCP における確認

Uploaded Image

AWS における確認

Uploaded Image

GCP の動的ルーティングにおいて、AWS VPC ネットワークへの経路情報が確認できます。

Uploaded Image

AWS ルートテーブルの更新

GCP VPC 内に起動した VM と AWS VPC 内に起動した EC2 インスタンスが相互に通信するためには、更に以下の設定も適切に行う必要があります。

  • GCP VPC ファイアウォール → EC2 インスタンスから GCP VM への通信が許可されるように設定。
  • AWS VPC ルートテーブル → EC2 インスタンスから GCP VM への通信が TGW にルーティンされるように設定。
  • AWS EC2 セキュリティグループ → GCP VM から EC2 インスタンスへの通信が許可されるように設定。

Uploaded Image

以下は GCP VM から EC2 インスタンスの内部 IP と外部 IP に対して ping 確認を行った際の出力例です。

username@my-vm-1:~$ ping 10.2.2.117
PING 10.2.2.117 (10.2.2.117) 56(84) bytes of data.
64 bytes from 10.2.2.117: icmp_seq=1 ttl=252 time=7.20 ms
64 bytes from 10.2.2.117: icmp_seq=2 ttl=252 time=5.16 ms

username@my-vm-1:~$ ping 54.250.83.111
PING 54.250.83.111 (54.250.83.111) 56(84) bytes of data.
64 bytes from 54.250.83.111: icmp_seq=39 ttl=235 time=4.16 ms
64 bytes from 54.250.83.111: icmp_seq=40 ttl=235 time=5.36 ms
64 bytes from 54.250.83.111: icmp_seq=41 ttl=235 time=4.41 ms

関連事項: IAP 利用による SSH 接続を許可するための Firewall 設定

35.235.240.0/20 からの TCP 22 番ポートへの接続が許可されるように設定する必要があります。

allows ingress traffic from the IP range 35.235.240.0/20. This range contains all IP addresses that IAP uses for TCP forwarding.

Using IAP for TCP forwarding

関連ページ