AWSのグローバルIPの空間はインターネットなのか?

 こんにちは佐々木です。 先日、VPCのFAQに追加された項目が話題となっていました。2 つのインスタンスがパブリック IP アドレスを使用して通信する場合、トラフィックがインターネットを経由するかどうかという問いに対して、AWSがノーと言っています。これは、どういうことなのでしょうか?

 このことを起点に、インターネットとは何か、AWSのネットワークの現状について考察してみます。難しい事を言っていますが、みんな疑問に思っている下の図の「?」の部分の謎解きです。

f:id:takurosasaki:20210426000420p:plain

AWSのVPCのFAQ

 まずVPCのFAQは、なんと言っているのでしょうか?改めて確認してみます。

よくある質問 - Amazon VPC | AWS

Q: 2つのインスタンスがパブリック IP アドレスを使用して通信する場合、またはインスタンスが AWS のサービスのパブリックエンドポイントと通信する場合、トラフィックはインターネットを経由しますか?

いいえ。パブリックアドレススペースを使用する場合、AWS でホストされているインスタンスとサービス間のすべての通信は AWS のプライベートネットワークを使用します。AWS ネットワークから発信され、AWS ネットワーク上の送信先を持つパケットは、AWS 中国リージョンとの間のトラフィックを除いて、AWS グローバルネットワークにとどまります。

さらに、データセンターとリージョンを相互接続する AWS グローバルネットワークを流れるすべてのデータは、安全性が保証された施設を離れる前に、物理レイヤーで自動的に暗号化されます。すべての VPC クロスリージョンピアリングトラフィックや、カスタマーまたはサービス間のトランスポート層セキュリティ (TLS) 接続などといった追加の暗号化レイヤーもあります。

 確かに、パブリックIP同士の通信でも、トラフィックはインターネットを経由しないでAWSのプライベートネットワークを使用していると言っていますね。どういうことでしょう?考察する前に、よく訓練されたAWS利用者の嗜みとして、原文である英語の方でも確認してみましょう。

Amazon VPC FAQs

  1. Does traffic go over the internet when two instances communicate using public IP addresses, or when instances communicate with a public AWS service endpoint?

No. When using public address space, all communication between instances and services hosted in AWS use AWS's private network. Packets that originate from the AWS network with a destination on the AWS network stay on the AWS global network, except traffic to or from AWS China Regions.

In addition, all data flowing across the AWS global network that interconnects our data centers and Regions is automatically encrypted at the physical layer before it leaves our secured facilities. Additional encryption layers exist as well; for example, all VPC cross-region peering traffic, and customer or service-to-service Transport Layer Security (TLS) connections.

 英語版でも同じことを言っていますね。誤訳ではなさそうです。では、どういうことなのでしょうか?それを考える上で、まずインターネットとは何かというのを改めて整理してみましょう。

インターネットと自律システム(ネットワーク)

 インターネットは、語源としても実態としても『複数のネットワークを相互接続したネットワーク』です。そして、ここで指すネットワークとは、自律システム (autonomous system:AS)の事であり、一つのネットワーク管理者の元で単一の明確に定義されたルーティングポリシーによって制御されているネットワークのことです。図式化すると、次の図のようになります。

f:id:takurosasaki:20210505194222p:plain

 次にポイントになるのが、ネットワーク間の接続形態です。接続の制御については、BGPというプロトコルで制御しています。そして、接続形態としては、トランジットとピアという2つの形態があります。そしてピア接続には、プライベートとパブリックの2種類があります。トランジットは上流のASに使用料を払ってトラフィックを流す方式です。ピア接続は、横同士のASに相互にトラフィックを流す方式です。相互に流すため、使用料は無料です。そしてピア接続のうちで、専用線を専有して接続しているのがプライベートピアです。IX(Internet eXchange:インターネット相互接続)のサービスを利用して、回線を共用して接続するのがパブリックピアです。一般的にピアによる接続の方が、経路がシンプルで通信品質が高くなります。

f:id:takurosasaki:20210505201102p:plain

 インターネットと接続についての概要は、なんとなく理解できたでしょうか?それを下敷きに、AWSのFAQが言わんとしていたAWS のプライベートネットワークとは何かを、読み解いていきましょう。

AWSのグローバルインフラストラクチャ

 接続の話を踏まえた上で、AWSのグローバルインフラストラクチャの説明を読んでみましょう。

すべてのデータセンター、AZ、および AWS リージョンは、可用性の高い低レイテンシーの専用プライベートグローバルネットワークインフラストラクチャを介して相互接続されています。このネットワークは、大西洋、太平洋、インド洋をはじめ、地中海、紅海、南シナ海にわたって大洋横断ケーブルで接続された、完全に冗長性を持つパラレル 100 GbE メトロファイバーネットワーク上に構築されています。

f:id:takurosasaki:20210505215719p:plain

 AWSのネットワーク全体がどのような構成になっているのか、私は把握はしておりません。ただ、個々のAWSのデータセンターは、Tier III+ ガイドラインに則って運用されていると明記されています。また、上記の文章で、AZ及びAWSリージョンは、(中国を除き)AWSが保有する専用線でプライベート接続されていると書いています。つまり、AZ(および内部のデータセンター)は、相互にプライベートピア接続されているということでしょう。

AWSのパブリックIP間の通信がプライベート接続ということは?

 ここまで辛抱強く読んでいただいた方は、AWSのパブリックIP間の通信がプライベート接続ということの意味が理解できるようになったでしょう。つまり、(中国を除く)すべてのリージョンが他社が管理するネットワーク(AS)や専用線を経由することなく、全てAWS管理下のネットワーク内で通信が完結するということです。最初の図もこのような感じになります

f:id:takurosasaki:20210505221307p:plain

PrivateLinkやVPC Endpointの意味は?

 AWS内では、たとえグローバルIPを使った通信でも、インターネット(他社管理のネットワーク)を経由しないということが解りました。そこで、一つの疑問が出てくると思います。PrivateLinkやVPC Endpointを使う意味はあるのかと。ここは非常に重要な論点だと思います。通信料の観点でいうと、同一リージョンのEC2とS3の通信料はインターネットゲートウェイを介した場合は無料となります。一方で、PrivateLinkやVPC Endpointを介した場合、データ量に応じた通信料が発生します。大量のデータを扱う場合、PrivateLinkの通信料が無視できないケースは多々あります。
 AWS内で完結する処理であれば、インターネットゲートウェイを介してもインターネットに出ないことが確約されているのであれば、敢えてPrivateLinkを使わないという選択肢も充分ありうると思います。
 ただし、インターネットゲートウェイを作った場合、AWS外の通信も当然できてしまいます。そこの制御はどうするかは、個々の判断で考える必要があります。AWSのIPアドレスあるいは、エンドポイントのドメインもしくはFQDNで絞るという方法がありますが、これが中々難しいのです。IPアドレスでの制限は、膨大過ぎてほぼ管理不能です。またドメインもサービスごとに幾つかパターンがあり、サービス増加とともに増えてきます。管理には微妙に手間がかかります。

今まで、なぜ明記されていなかったのか?

 最初のつぶやきで、「明示された意味は大きい」と書きました。今まで、なぜプライベートネットワークと明示しなかったのでしょう?それは、プライベートネットワークではなく、インターネットを介す通信があったからです。例えば、リージョン間の接続がAWSの専用線になったのはごく最近です。北米大陸は、わりと早い段階でリージョン間が専用線でつないだとアナウンスありましたが、その他については将来的な対応ということでした。今回の、このつぶやきをきっかけに調べ直して、全て対応したということを私も知りました。
 また、それ以前にリージョン内の通信も、初期はIXやトランジットを経由したインターネットを経由する通信だったようです。これが段階的に整理されていったということなのでしょう。つまり、今回VPCのFAQで明示したことで、リージョン内もリージョン間もすべてAWSのプライベートネットワークで完結するような対応が完了したよという宣言でもあるわけです。これが意味することは大きいです。

AWSのEdgeサービスとAWSのグローバルネットワーク

 ちなみに、Amazon CloudFrontのようなAWSのEdgeサービス上で展開されるサービスについては、上記のようなAWSのグローバルネットワーク内に閉じた通信ではないようです。その点は、ご注意ください。Edgeネットワークという特性を考えると当然といえば当然ですが、そのうち、全部網羅するという野望を持っていそうで怖いです。

まとめ

 インターネットの構造と、それぞれのネットワークの接続形態(トランジットとピア接続)を踏まえて、今回のAWSのプライベートネットワークの意味を読み解いてみました。ただ、FAQの後半の方には、AWS グローバルネットワークを流れるすべてのデータの暗号化の話も書いてあります。ここは具体的に何をやっているのか全然知りません。また機会を見つけて、調べていこうと思います。

f:id:takurosasaki:20210326005216p:plain

執筆者佐々木拓郎

Japan APN Ambassador 2019
ワイン飲みながら技術書を書くのが趣味なおじさんです

Twitter:https://twitter.com/dkfj

Facebook:https://www.facebook.com/takuro.sasaki

個人ブログ:https://blog.takuros.net/

Amazon著者ページ:Amazon.co.jp: 佐々木 拓郎:作品一覧、著者略歴

Booth:https://takuros.booth.pm/