2つのVPCエンドポイントの違いを知る
ゲストブロガーの佐々木拓郎(@dkfj)です。小ネタシリーズの第三弾として、VPCエンドポイントをテーマにします。VPC内からS3などのVPC外にあるAWSサービスをアクセスする場合、インターネットゲートウェイを経由する方法と、VPCエンドポイントを経由する方法の2通りの手段があります。このVPCエンドポイント、実は2種類あるのご存知でしょうか?今日はその辺の解説です。
目次
2種類のVPCエンドポイント
まず始めにVPCエンドポイントの種類です。ゲートウェイ型とインターフェイス型の2種類があります。ゲートウェイ型は最初に出たVPCエンドポイントで、S3とDynamoDBが対応しています。インターフェイス型は、それ以降に出てきたサービスで50種類以上のサービスが対応されています。なぜ、ゲートウェイ型は最初の2つのみで、それ以外のサービスはインターフェイス型なのでしょうか?ゲートウェイ型の動作を検証することで、推測してみましょう。
検証のために、パブリックサブネットとプライベートサブネットが1つづつあるVPCを作成して、サブネット毎にEC2をたてて検証してみます。
ゲートウェイ型のVPCエンドポイントを試してみる
それでは、ゲートウェイ型のVPCエンドポイントの構成の解説です。ゲートウェイ型は、その名の通りゲートウェイとして動作します。インターネットゲートウェイやVPNゲートウェイと同じように、ルーティングによりその条件にあった場合、ゲートウェイを通るという形になります。ゲートウェイ型のVPCエンドポイントを設定した場合、ルーティングにも変更が加えられます。
ルーティングにS3のエンドポイントであるcom.amazonaws.ap-northeast-1.s3と幾つかのグローバルIPへのルーティングが追加されている事がわかります。それでは、プライベートサブネットからS3のファイルをみてみましょう。
[ec2-user@ip-10-0-30-149 ~]$ aws s3 ls --region ap-northeast-1
2020-06-18 18:01:52 XXXXXXXXXXXXX1
2020-06-18 18:01:52 XXXXXXXXXXXXX2
2020-06-18 18:01:52 XXXXXXXXXXXXX3
2020-06-18 18:44:08 XXXXXXXXXXXXX4
バケット名にマスクをしていますが、NATゲートウェイをつけていないにも関わらず、プライベートサブネットからS3にアクセスできることが解ります。なお、VPCエンドポイントはリージョン毎の設定となるため、awsコマンドの設定でデフォルトのリージョンを指定していない場合は、エンドポイントとして設定したリージョンを指定する必用があります。
インターネットゲートウェイを経由せずS3にアクセスできることが解ったので、ネットワークACLでプライベートサブネットのアクセス可能範囲をローカルアドレスのみに限定してみましょう。プライベートのサブネットに間違えて、パブリックサブネット用のセキュリティグループを付与した場合の予防策になります。インバウンドとアウトバウンドともに、VPCの内部のIPである10.0.0.0/16のみ通信可能とします。
ネットワークACLの追加をしたところで、再びS3にアクセスしてみましょう。
[ec2-user@ip-10-0-30-149 ~]$ aws s3 ls --region ap-northeast-1
Connect timeout on endpoint URL: "https://s3.ap-northeast-1.amazonaws.com/"
どういうことでしょうか?タイムアウトで、S3のバケット一覧を取得することができません。ここで、S3のエンドポイントの名前解決をしてみましょう。
[ec2-user@ip-10-0-30-149 ~]$ nslookup s3.ap-northeast-3.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
Name: s3.ap-northeast-3.amazonaws.com
Address: 52.95.158.0
S3の名前がグローバルIPで解決されました。この辺りにヒントがありそうです。
ゲートウェイ型のVPCエンドポイントの意外な構造
S3のエンドポイントがグローバルIPのままであるということは、ゲートウェイ型のVPCエンドポイントの1つの特徴です。接続元のEC2インスタンスはプライベートIPのみにも関わらず、ゲートウェイ型のVPCエンドポイントが何らか上手いことやってくれて、そのままS3にアクセスできるようにしてくれます。ただし、エンドポイントのIPはグローバルIPとなるので、ネットワークACLでローカルのIPのみという制限を加えると、エンドポイントを利用しても通信が出来なくなります。
それでは、インターフェイス型のVPCエンドポイントの場合は、どういう動作になるのでしょうか?インターフェイス型の場合は、ENIを利用してVPC内部にサービスのエンドポイントが立ち上がります。そのため、ネットワークACLでローカルの通信のみに制限しても影響を受けることがありません。
管理上、こちらの方が何かと都合がよいので、最近のサービスではインターフェイス型のVPCエンドポイントのみが増えてきているのではないでしょうか?
まとめ
ゲートウェイ型のVPCエンドポイントの挙動から見る2種類のVPCエンドポイントの違いでした。VPCエンドポイントの利用という点では、S3の利用目的で使う人が多いので、ゲートウェイ型の方がまだまだ利用頻度は多いのではないかと思うのですが、グローバルIPでアクセスするという課題があります。初めて使う人はハマることも多いのではと思います。構造的にはインターフェイス型の方がよく見えるので、S3にも対応して欲しいところですね。一方で、ゲートウェイ型はエンドポイント経由の通信料は無料ですが、インターフェイス型は時間あたりのエンドポイントの利用料とGBあたりの通信料が掛かります。内部の通信と思っていると、思った以上に費用が掛かるのでご注意ください。 以上、ゲストブロガーの佐々木拓郎(@dkfj)でした。