Amazon Web Services ブログ
AWS Site-to-Site VPN プライベートIP VPN のご紹介
この記事は Introducing AWS Site-to-Site VPN Private IP VPNs を翻訳したものです。
お客様がオンプレミスからAWSに安全に接続する最も一般的な方法の1つは、AWS Site-to-Site VPN マネージドIPSec VPNソリューションを使用することです。このサービスを利用する際にお客様が求める重要なメリットの1つは、EC2インスタンスを用いて構築されたサードパーティやカスタムのVPNソリューションを管理する必要がないことです。このネイティブサービスは、2つの異なる アベイラビリティゾーン に2つのトンネルを高可用性をもつように構築しております。AWS Transit Gateway(VPNアタッチメント経由)とのネイティブ統合があるため、お客様は単一の Transit Gateway ベースのVPN接続で複数のVPCに接続を拡張できます。
IPSec VPNのネイティブ接続は、インターネットをトランスポートとして使用するのが一般的ですが、AWS Direct Connect をトランスポートとして用いて IPSec VPN を作成するお客様もいます。なぜかというと、Direct Connect はオンプレミス環境からAWSへのプライベートな専用接続(インターネットとは異なります)で、暗号化されていないことを留意しておいてください。
お客様によっては、セキュリティやコンプライアンス規制により、この専用回線を使用した通信をレイヤー2または3で暗号化する必要があります。2021年4月以降、Direct Connectは10Gbps と100Gbpsの専用接続でIEEE 802.1AE MAC Security Standard(MACsec)暗号化 をサポートします。これにより、Site-to-Site VPNは、1Gbpsおよび1Gbps以下のDirect Connect 接続の暗号化を実現する最適な方法となります。前には、Direct Connect 上でSite-to-Site VPN接続を作成するには、Public VIF を用いて、サービスのパブリックエンドポイントに接続する方法しかありませんでした。しかし、多くのお客様にとって、パブリックIPを使用することは、いくつかの課題があります。
- アタックされる対象が増える。
- AWSとの間でアドバタイズされるルートをフィルタリングする必要がある(BGPコミュニティより)。
- お客様網内にパブリックIPを利用できないケースに対応できない。
これらの課題に対応するために、お客様にプライベートIPアドレス( RFC1918 )を使用したDirect Connect での AWS Site-to-Site VPN接続を提供する新機能「プライベートIP VPN」を発表いたします。この機能により、お客様はパブリックIPアドレスを使用せずにDirect Connect接続でオンプレミスネットワークとAWS間のトラフィックを暗号化し、セキュリティ強化とネットワークプライバシーを同時に実現できます。プライベートIP VPNはTransit VIF の上に展開されるため、AWS Transit Gatewayを利用してお客様のVirtual Private Cloud(VPC) やオンプレミスネットワークとの接続をよりセキュアに、プライベートかつスケーラブルに一元管理できます。
ユースケース
この機能の代表的なユースケースは以下になります。
- セキュリティとコンプライアンス要件。一部のお客様(金融サービス、ヘルスケア、自治体政府など)は、ネットワークトラフィックの強固な暗号化を要求しており、これにはDirect Connect接続によるオンプレミスとAWS間のトラフィックも含みます。さらに、通信にはプライベートIPアドレスのみを使用することが要求されています。プライベートIP VPNは、AWSとオンプレミスネットワーク間のトラフィックを、プライベートIPアドレスのみを用いてDirect Connect上で暗号化し、お客様が規制とセキュリティの要件に準拠することを可能にします。
- AWS Direct Connectでのトラフィックセグメンテーション。オンプレミスネットワークとTransit Gatewayを接続したいお客様は、Direct Connect でTransit VIFを用いて接続できます。ただし、1つの接続につき1つのTransit VIFしか使えないという制限があります(Transit VIFは1Gbps以上の接続にのみ使用可能)。VRF(Virtual Routing Forwarding)をAWSに拡張したいお客様は、Transit VIFに、複数のTransit Gatewayのアタッチメントに複数のAWS Site-to-Site VPN 接続を作成できるようになりました。この方法では、各セグメントはプライベートIPのみを用いて暗号化されます。エンドツーエンドのセグメント化は、各VRFをそれぞれのSite-to-Site VPNアタッチメントにマッピングし、それに合わせてTransit Gatewayの複数のルートテーブルでトラフィックをセグメント化することで実現されます。
- プライベートIPのみを使用したAWS Direct Connectでより高いルートスケール。Direct Connectを利用する際によくある制限として、経路のアナウンス数の制限があります。現状でこの制限はアウトバウンド20経路、インバウンド100経路となっています。プライベートIP VPNでは、アウトバウンド5,000ルート、インバウンド1,000ルートの広告が可能になり、同時にトラフィックの暗号化も実現します。
この機能の仕組みは?
プライベートIP VPN接続には、Direct Connect Gateway と、ベースのトランスポートとしてTransit VIFが必要です。プライベートIP VPNアタッチメントは、Transit Gateway上の適切なDirect Connect Gateway アタッチメントに関連付けられます(図1参照)。各プライベートIP VPN接続は、2つのIPSecトンネルで構成されており、これらトンネル上のすべてのネットワークトラフィックを暗号化します。IPSecトンネルの終端(Transit Gatewayとオンプレミス・ルーター)には、プライベートIPアドレスを割り当てることができます。
図 1 は、Direct Connect リンク上のすべてのトラフィックを暗号化したい場合の使用例を示しています。この例では、Site-to-Site VPNアタッチメントのみが関連付けられ、Transit Gateway ルートテーブルに伝播されます。オンプレミスのルーターからのトラフィックは、VPNトンネルを経由してAWSに転送されることを確認する必要があります。この構成で、VPC間に、そしてSite-to-Site VPN接続を介してオンプレミスネットワークと通信することができるようになります。
前に言及したように、トラフィックのセグメント化にプライベート IP VPN を使用するというシナリオも考えられます。この場合、VRF ごとに1つの Site-to-Site プライベートIP VPN 接続を作成することで、異なるオンプレミス VRF を Transit Gateway に拡張できます。Transit Gateway で環境ごとに 1 つのルートテーブルを用いてセグメント化し、各 VPN 接続を異なるルート テーブルに関連付けます。図 2 では、本番用と非本番用のルートテーブルを確認できます。本番用VPCと本番用VPNアタッチメントは、本番用ルートテーブルに関連付けられ、伝播されます(非本番用アタッチメントも同じ)。オンプレミスルーターは、各 VRF を対応する Site-to-Site VPN 接続に転送するように設定するだけで済みます。
今まで、AWSとオンプレミス環境間のすべてのトラフィックがVPNトンネルを介して交換されるユースケースを見てきました。他にも、トラフィックを暗号化したVPNトンネルと、暗号化されていないDirect Connect接続の間にも使用できます。図 3 に例を示します。Transit Gateway の暗号化ルートテーブルでは、Site-to-Site プライベートIP VPN 接続を用いてオンプレミスネットワークから VPC A へのアクセスが可能です(暗号化されたトラフィック)。一方、Transit Gateway Non-Encrypted Route TableはDirect Connect Gatewayアタッチメントに関連しており、オンプレミスルーターからVPC Bへのトラフィックは直接Transit VIF BGPピアを用いてTransit Gatewayに転送されます(VPN接続で作成したオーバーレイを利用しない)。
チュートリアル
AWS Site-to-Site プライベートIP VPNは、AWSマネジメントコンソール またはコマンドラインインターフェース (CLI)を用いて作成することができます。このブログ記事では、CLIを用いて作成します。まず、Direct Connect接続とTransit VIFを作成した状態から始めます。以下の手順では、AWS CLI v2 と jq を用いて、関連するAWSコンポーネントを作成する予定です。
ステップ1:Direct Connect Gatewayの作成
まず、AWS Direct Connect Gatewayを作成します。
aws directconnect create-direct-connect-gateway --direct-connect-gateway-name "DxGatewayPrivateIP"
新しく作成されたDirect Connect GatewayのIDを取得するために、Direct Connect Gateway名で結果をフィルタリングします。
DXGWID=$(aws directconnect describe-direct-connect-gateways | jq -r '.directConnectGateways[] | select(.directConnectGatewayName == "DxGatewayPrivateIP") | .directConnectGatewayId')
ステップ2:Transit Gatewayの作成
次に、AWS Transit Gatewayを作成します。プライベートIP VPNの作成をサポートするために、Transit GatewayのVPC CIDRブロックも設定する必要があります。この例では、CIDRブロックとして10.0.0.0/24、Amazon Side BGP ASNとして64516を使用します。
aws ec2 --region us-west-1 create-transit-gateway --options TransitGatewayCidrBlocks="10.0.0.0/24",AmazonSideAsn=64516
新しく作成されたTransit GatewayのIDを取得するために、設定されているTransit GatewayのCIDR Blockが10.0.0.0/24、Amazon side BGP ASNが64516で結果をフィルタリングしてみます。
TGWID=$(aws ec2 describe-transit-gateways --region us-west-1 | jq -r '.TransitGateways[] | select(.Options.TransitGatewayCidrBlocks | index("10.0.0.0/24")) | select(.Options.AmazonSideAsn == 64516).TransitGatewayId')
ステップ3:Direct Connect GatewayにTransit Gatewayをアソシエーション
aws directconnect create-direct-connect-gateway-association --direct-connect-gateway-id $DXGWID --gateway-id $TGWID --add-allowed-prefixes-to-direct-connect-gateway cidr="10.151.0.0/16" --region us-west-1
この例では、$DXGWIDがステップ1で作成したDirect Connect GatewayのIDで、$TGWIDがステップ2で作成したTransit GatewayのIDです。また、許可するプレフィックスを定義することもできます。この例では、Direct Connect Gatewayを経由してオンプレミスにアナウンスするAWS CIDR範囲として、10.151.0.0/16を定義しています。これらの変数は、実行することで確認できます。
echo "AWS Transit Gateway: $TGWID\nAWS Direct Connect gateway: $DXGWID"
ステップ4:Customer Gateway(CGW)の作成
Transit Gateway を作成し、それを Direct Connect Gateway に関連付けると、Direct Connect Gateway と Transit VIF をベースのトランスポートとして Site-to-Site プライベートIP VPN 接続を作成できるようになります。その前に、Customer Gateway (https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html)(CGW)を作成する必要があります。
aws ec2 create-customer-gateway --ip-address 10.0.0.1 --bgp-asn 65051 --type ipsec.1 --region us-west-1
Customer Gatewayに設定するIPアドレスは、ステップ2で定義したTransit GatewayのCIDRブロックから、BGP ASNはオンプレミス環境のものにしてください。
新しいCustomer GatewayのIDを取得するために、設定されているIPアドレス10.0.0.1とASN 65051でフィルタリングします。
CGWID=$(aws ec2 describe-customer-gateways --region us-west-1 | jq -r '.CustomerGateways[] | select((.IpAddress == "10.0.0.1") and .BgpAsn == "65051") | .CustomerGatewayId')
ステップ5:AWS Site-to-Site プライベートIP VPN接続の作成
そして最後に、プライベートIP VPN接続です。CLIコマンドの変数として、ステップ4で作成したCustomer Gateway ID、ステップ2で作成したTransit Gateway ID、ベースのトランスポートのTransit Gatewayアタッチメント(ステップ3で作成したDirect Connect Gatewayアソシエーション)を渡す必要があります。
Direct Connect アタッチメントIDを取得するために、関連付けされたステータスと利用可能なステータスの両方にあるアタッチメントをフィルタリングします。
ATTACHID=$(aws ec2 describe-transit-gateway-attachments --region us-west-1 | jq -r '.TransitGatewayAttachments[] | select((.ResourceType == "direct-connect-gateway") and (.Association.State == "associated") and (.State == "available")) | .TransitGatewayAttachmentId')
そして、CLIコマンドを用いてVPN接続を作成できます。
aws ec2 create-vpn-connection --customer-gateway-id $CGWID --transit-gateway-id $TGWID --options "{\"OutsideIpAddressType\":\"PrivateIpv4\", \"TransportTransitGatewayAttachmentId\":\""$ATTACHID"\"}" --type ipsec.1 --region us-west-1
これで、プライベートIP VPN接続とVPN Transit Gatewayのアタッチメントが作成されました。オンプレミスからのトンネル設定 、VPNアタッチメントの伝播と関連付けは、通常のAWS Site-to-Site VPN接続と同様に機能します。
新しいIPSec VPN接続の詳細を取得するために、特定のDirect ConnectのアタッチメントIDを用いてフィルタリングします。
aws ec2 describe-vpn-connections --region us-west-1 | jq -r --arg ATTACHID "$ATTACHID" '.VpnConnections[] | select(.Options.TransportTransitGatewayAttachmentId == $ATTACHID)'
クリーンアップ
上記の手順でプライベートIP VPNの作成を検証した場合、余分なコストを避けるために、以下のようにリソースをクリーニングするのを忘れないでください。
- Site-to-Site VPN接続(およびアタッチメント)
VPNID=$(aws ec2 describe-vpn-connections --region us-west-1 | jq -r --arg ATTACHID "$ATTACHID" '.VpnConnections[] | select(.Options.TransportTransitGatewayAttachmentId == $ATTACHID).VpnConnectionId')
aws ec2 delete-vpn-connection --vpn-connection-id $VPNID --region us-west-1
- Customer Gateway(CGW)
aws ec2 delete-customer-gateway --customer-gateway-id $CGWID --region us-west-1
- Transit Gatewayを削除するには、まず、Transit GatewayとDirect Connect Gatewayの関連付けを解除する必要があります。
DXGWASSOCIATEID=$(aws directconnect describe-direct-connect-gateway-associations --direct-connect-gateway-id $DXGWID | jq -r --arg TGWID "$TGWID" '.directConnectGatewayAssociations[] | select(.associatedGateway.id == $TGWID) | .associationId')
aws directconnect delete-direct-connect-gateway-association --association-id $DXGWASSOCIATEID --region us-west-1
- この解除は数分かかるので、以下の方法でステータスを確認します。
aws directconnect describe-direct-connect-gateway-associations --direct-connect-gateway-id $DXGWID
- 関連付けの解除が完了したら、Transit Gatewayの削除ができます。
aws ec2 delete-transit-gateway --transit-gateway-id $TGWID --region us-west-1
- 最後に、Direct Connect Gatewayを削除します。
aws directconnect delete-direct-connect-gateway --direct-connect-gateway-id $DXGWID
知っておきたいこと
- Site-to-Site プライベートIP VPN接続のスループットは、通常のSite-to-Site VPN接続と同じです。1.25 Gbps です。複数の VPN 接続間で ECMP (Equal Cost Multi-path) を使用することにより、帯域幅を増加させる ことができます – ECMP を使用するためには、VPN 接続でダイナミックルーティングを使用する必要があることを覚えておいてください。また、ECMPを使用できるのは、同じDirect Connect GatewayアタッチメントのプライベートIP VPN接続のみであることを考慮してください。
- Site-to-Site プライベートIP VPN接続は、スタティック・ルーティングとBGPを使用したダイナミック・ルーティングをサポートしています。BGPプロトコルは、1つ目のVPNトンネルがダウンした場合に、2つ目のVPNトンネルへのフェイルオーバーを支援する堅牢なライブ検出チェックを提供するため、顧客のGatewayとしてBGP対応デバイスの使用をお勧めします。
- プライベートIP VPNで利用できるベースのトランスポートは、Direct Connect接続のみです。そのため、VPN接続の設定にDirect ConnectのアタッチメントIDを指定する必要があります。複数のVPNが同じDirect Connectのアタッチメントをトランスポートとして使用できます。
- Transit GatewayのCIDRブロックは、Transit Gatewayに接続されているVPCのCIDRと重ならないようにする必要があります。AWS側のVPNトンネルのIPアドレスは、このTransit GatewayのCIDRブロックから割り振られます。そのため、このブロックが重なると、望ましいルーティング動作が得られない場合があります。
- VPN Outside Tunnel IPは、IPv4アドレスとトランスポートのみをサポートしています。VPN内部IPアドレス(BGPセッション用)は、IPv6をサポートしています。
- VPN接続の監視については、他のVPNアタッチメントと同様 に、このアタッチメントの可視性メトリックとイベントを表示することができます。
- Transit GatewayとSite-to-Site プライベートIP VPN接続の両方が同じAWSアカウントで所有される必要があります。
- 利用料金について
- Site-to-Site VPN接続 には、1時間ごとのVPN接続料と、Direct Connect接続を介して出力されるデータはGBあたりのData Transfer Out料金がかかります。
- プライベートIP VPN Transit Gatewayアタッチメントは、通常のVPNアタッチメントと同じ時間課金制です。
- AWS Transit Gatewayのデータ処理料金は、Direct Connect トランスポートアタッチメントが負担するため、発生しません。
まとめ
この新機能により、プライベートIPを使用したDirect Connect接続の上に、AWS Site-to-Site VPN接続を作成することができるようになりました。これまでは、トラフィックを暗号化するためにパブリックVIFを使用する必要があり、そのためVPNエンドポイントにパブリックIPアドレスは必要でした。パブリックIPを使用すると、外部からのアタックを受ける可能性が高く、お客様はネットワーク保護のために追加のセキュリティアプライアンスを導入せざるを得なくなります。プライベートIP VPNは、トラフィックの暗号化に加えて、エンド・ツー・エンドのプライベート接続を提供し、全体的なセキュリティ向上につながります。
プライベートIP VPNのサポートは、AWS Site-to-site VPNが利用可能なすべてのAWSリージョンで利用可能です。詳細については、AWS Site-to-site VPN の製品ページ 、ドキュメント 、価格ページ をご覧ください。
執筆者について
翻訳はソリューションアーキテクトの丁 亜峰(Yafeng Ding)が担当しました。原文はこちらです。