9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon S3のVPCエンドポイントゲートウェイ型・インターフェース型を使ってみた

Last updated at Posted at 2021-02-07

#はじめに

2021/2にVPCエンドポイントインターフェース型(PrivateLink)にAmazon S3が追加されました!
(AWS公式サイトより)
https://aws.amazon.com/jp/blogs/aws/aws-privatelink-for-amazon-s3-now-available/

これによりAmazon S3サービスのみ ゲートウェイ型・インターフェース型両方のVPCエンドポイントが使用できるようになりました。そのため今回は2つの接続の違いを実際にサービスを触りながら理解したいと思います:hugging:

#目的

■VPCエンドポイントのゲートウェイ型・インターフェース型について理解する。
■両方のVPCエンドポイントを使用して、同じS3バケットへの接続を試してみる。

#参考サイト

理解するにあたって、以下のサイトを参考にさせていただきました。
とても分かりやすくまとめられているため、まずはこちらを一読していただきたいです。

https://dev.classmethod.jp/articles/vpc-endpoint-gateway-type/
https://dev.classmethod.jp/articles/private-link-for-s3/
https://blog.serverworks.co.jp/privatelink-for-amazon-s3_

#VPCエンドポイントとは

VPC およびサポートされている AWS のサービスと、AWS PrivateLink を利用した VPC エンドポイントサービスとの間のプライベート接続を可能にします。VPC エンドポイントは、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を必要としません。VPC のインスタンスは、サービスのリソースと通信するためにパブリック IP アドレスを必要としません。VPC と他のサービス間のトラフィックは、Amazon ネットワークを離れません。(公式サイトよりhttps://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints.html)

つまりインターネット経由で接続せず、AWS内のプライベートな空間だけでサービスに接続できるよ!っていうものです。
またVPCエンドポイントがあるAWSサービスであれば、オンプレ環境からも接続が可能になるため、安全性を高めることができます。

#ゲートウェイ型について
サポートされる AWS のサービスを宛先とするトラフィックのルートテーブルで、ルートのターゲットとして指定するゲートウェイ(S3とDynamoDBのみサポート)

vpcエンドポイント(ゲートウェイ型).png

Subnet1のroute tableにはS3のVPCエンドポイントが設定されていないため、インターネット経由でのS3接続となりますが、Subnet2にはS3のVPCエンドポイントが設定されているため、エンドポイント経由での接続が可能です。
この時Subnet2はプライベートサブネットですが、エンドポイントがS3に接続するためにグローバルIPアドレスに変換してくれるため、接続時にはグローバルIPアドレスで接続をしてくれます。

#インターフェース型について
サポートされるサービスを宛先とするトラフィックのエントリポイントとして機能するサブネットの IP アドレス範囲のプライベート IP アドレスを持つ Elastic Network Interface (ENI)

vpcエンドポイント(インターフェース型).png

ENIを利用してVPC内部にサービスのエンドポイントが作成されるため、接続時にはエンドポイントがプライベートIPアドレスで接続をしてくれます。

他にもこのようにな違いがあります。

観点 ゲートウェイ型 インターフェース型
サービスのアクセスに利用するIPアドレス グローバル IPアドレス パブリック IPアドレス
接続先 サービス DNS 名(例 s3.ap-northeast-1.amazonaws.com ) エンドポイント固有の DNS ホスト名(例 vpce-xxxxxxxx-xxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com)
オンプレから利用可能 不可 可能
リージョンをまたいだ利用 不可 可能
料金 無料 有料

#実際にやってみた!

まずは検証用に以下の構成を作成します。
20210207-1.png

(※作成方法の詳細は割愛させて頂きますが、以下の手順で作成しました。)
①VPC内にパブリック・プライベートサブネットを1つずつ作成し、各サブネット毎にルートテーブルを作成
②インターネットゲートウェイを作成し、VPCにアタッチ後、パブリックサブネット側のルートテーブルにインターネットゲートウェイを設定
③各サブネットにEC2を配置
④接続用のS3バケットを作成(※今回は接続確認だけなので、「パブリックアクセスをすべてブロック」をオフで作成しています)
⑤プライベートサブネットのEC2からS3バケットに接続できるようIAMロール(IAMポリシー:AmazonS3FullAccess)を作成し、EC2にアタッチ

#ゲートウェイ型での接続

まずはゲートウェイ型のVPCエンドポイントを作成し、プライベートサブネットのEC2からS3バケットに接続できることを確認します。

20210207-2.png

①VPCサービスより「エンドポイント」を選択し、「エンドポイントの作成」を選択します。
1.PNG

②サービス名で「S3」を検索すると、「Gateway」「Interface」両方のエンドポイントがヒットします。ここでは**「Gateway」**を選択します。あとは以下の設定をし、「エンドポイントの作成」を選択します。
 VPC:作成したVPC名
 ルートテーブル:作成したプライベートサブネット
 
2.PNG
3.PNG

③エンドポイントが作成され、プライベートサブネットのルートテーブルにエンドポイントのルートが作成されていることが確認できます。
4.PNG
5.PNG

④プライベートサブネットのEC2よりS3に接続できるか確認します。接続にはサービス DNS 名を使用します。
 ※プライベートサブネットのEC2へログインする時は、パブリックサブネットのEC2を踏み台に利用してプライベートサブネットのEC2に接続しています。分からないよ!って方は前回私が書いたこちらの記事ををぜひご覧下さい。(https://qiita.com/AWS11077/items/8aaa37b7568cf07577f8)

コマンド:aws s3 ls --region ap-northeast-1
6.PNG

S3バケットに接続できました。
またnslookupによりサービスのアクセスに利用するIPアドレスがグローバルIPアドレスになっていることを確認できます。

#インターフェース型での接続

次にインターフェース型のVPCエンドポイントを作成し、S3バケットに接続できることを確認します。

20210207-3.png

①「エンドポイントの作成」よりサービス名で「S3」を検索し、**「Interface」**を選択します。あとは以下の設定をし、「エンドポイントの作成」を選択します。
 VPC:作成したVPC名
 ルートテーブル:作成したプライベートサブネット
 セキュリティグループ:インバウンドにHTTPSのポートが空いたものを選択(※要注意※)

7.PNG
8.PNG
9.PNG

②エンドポイントが作成されたことを確認できました。
10.PNG

④プライベートサブネットのEC2よりS3に接続できるか確認します。接続にはエンドポイント固有の DNS ホスト名を使用します。
コマンド:aws s3 --region ap-northeast-1 --endpoint-url https://bucket.vpce-XXXXXXXXX-XXXXXXX.s3.ap-northeast-1.vpce.amazonaws.com ls

11.PNG

S3バケットに接続できました。
またnslookupによりサービスのアクセスに利用するIPアドレスがプライベートIPアドレスになっていることを確認できます。
またこの時、nslookupで出てきたプライベートIPアドレスとAWSマネージメントコンソールのエンドポイントのIPアドレスが一致することを確認できます。

※はまったポイント※
インターフェース型のエンドポイントに接続する場合もオプションで「--region ap-northeast-1」を指定する必要があります。

#最後に

今回2種類のVPCエンドポイントを使用し、同じS3バケットに接続する方法を試してみました。
インターフェース型・ゲートウェイ型各々の特徴をつかむことができたのではないかなと思います:grin:
実際に手を動かしながらやってみることは大事ですね!!

またこの記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

動画形式でいつでも学ぶことができて、とても分かりやすくサービスを知ることができます。
興味がある方は、一緒にAWSを学んでいきましょう~~!

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?