【AWS】VPCエンドポイントを使ってプライベートサブネットEC2からS3にアクセスする

業務でパブリックなインターネットを通しての通信が厳しく、S3へのアクセスもパブリックなインターネットを通すことがNGになりました

そういうときはVPCエンドポイントを使ってS3へのアクセスをしましょう。

ここではVPCエンドポイント使って、プライベートサブネット上のEC2からS3へ直接アクセスできるようにしたいと思います。

VPCエンドポイントを作成し、S3にアクセスする

まずは、VPCエンドポイントを作成してS3にアクセスするところまで手順を追って確認していきます

今回作成したい構成イメージは以下のような形です。プライベートサブネット上にあるEC2がVPCエンドポイントを経由してS3にアクセスするという構成をつくっていきたいと思います。

VPCエンドポイントの作成

エンドポイントの画面から『エンドポイントの作成』をクリック

エンドポイントの作成画面から必要事項を設定していきます。画面が少し大きいので、以下で項目を分割してそれぞれ手順を追っていきます。

エンドポイントを設定するAWSサービスを選択します。

検索エリアに『S3』と入力し、表示されたサービス名『com.amazonaws-ap-northeast-1.s3』を選択します。後ほど説明を加えますがタイプは『Gateway』になっているかと思います。

エンドポイントを設定するVPCとルートテーブルを選択します

『VPC』欄では、VPCエンドポイントを設定したVPCを選択します。選択すると選んだVPCに適用されているルートテーブルの一覧が表示されるので、今回はプライベートサブネットに適用しているルートテーブルを選択します。これで、プライベートサブネットの通信が今回作成されるVPCエンドポイントに対して通信を行うようになります。

ポリシーとタグの設定

今回はポリシーはカスタマイズしませんので、デフォルトの『フルアクセス』を選択し、下部のタグを追加し、『エンドポイントの作成』をクリックします。

上記の画面が表示されれば、エンドポイントの作成とプライベートサブネットえの割り当てが完了した状態になります。

IAMロールの作成

エンドポイントを作成しましたが、これだけでは、EC2からVPCエンドポイントを通して、S3を参照することはできません。そのためEC2にS3を操作する権限(IAMロール)を割り当てる必要があります。まず、次の手順ではS3へのフルアクセスを持つロールを作成します。

IAMのロールの画面から『ロールの作成』をクリックします。

ロールの作成画面①で『信頼されたエンティティの種類を選択』欄から『AWSサービス』を選択し、『ユースケースの選択』からは、今回S3の操作権限を割り当てるEC2を選択します。最後に『次のステップ:アクセス権限』をクリックします

ロールの作成画面②でポリシーを選択します。今回は『AmazonS3FullAccess』を選択し、『次のステップ:タグ』をクリックします

作成するロールのタグを設定し、『次のステップ:確認』をクリックします

ロール名を入力し、他の内容に齟齬がなければ『ロールの作成』をクリックしてロールを作成します。

IAMロールをEC2に割り当てる

S3フルアクセスのロールを作成したら、次はプライベートサブネットのEC2にこのロールを割り当てます。

EC2の一覧画面からプライベートサブネット上のEC2を選択し、『アクション』をクリックし、『インスタンスの設定』>『IAMロールの割り当て/置換』を選択します。

IAMロールの割り当て/置換画面で『IAMロール』欄で作成したS3 へのフルアクセス権限を持つロールを選択し、『適用』をクリックします。

以上で、IAMロールの割り当ては完了です。最後に確認をしたいと思います。

EC2からS3バケットの一覧を表示する

上記はプライベートサブネット上のEC2にSSHでログインし、まず、Googleにcurlコマンドでアクセスを行っています。結果はFailedになっており、接続ができなかったことを確認できると思います。

次に以下のコマンドでawsのs3にアクセして、東京リージョンのバケットの一覧を表示いています。

結果はバケットが表示されており、S3 に対してアクセスができていることが確認できました。

VPCエンドポイントとは

VPCエンドポイントを設置してプライベートサブネットのEC2からS3へのアクセスはできましたが、そもそもVPCエンドポイントってなんですか?

うんうん、ではもう少しVPCエンドポイントについて詳しく見ていきましょう

AWSの各サービスにはAPIが用意されていて、CLIやSDKなどのプログラムを通して用意に操作ができるようになっています。APIはインターネットを通してアクセスできるような仕組みになっています。しかし、今回のようにセキュリティ要件によってはインターネットから遮断されたプライベートサブネットでの運用を要求されるケースも当然ありえます。

AWSサービスが用意しているAPIにプライベートネットワークから直接アクセスすることはできませんが、VPCエンドポイントを利用することでこの問題を解決できます。

VPCエンドポイントを作成時に、サブネットのルートテーブルにルーティングが追加され、VPCエンドポイントを経由してAWSへのAPIへアクセスができるようになります。AZ内の通信で完結するため、同一リージョンであれば、インターネットを介せずAWSサービスにアクセスできるようになります。

VPCエンドポイントにはGateway型とPrivateLink型があります。次はこの2つの違いを説明したいと思います。

Gateway型のVPCエンドポイント

Gateway型のVPCエンドポイントは以下の2つのAWSサービスをサポートしています。

  • Amazon S3
  • Dynamo DB

接続したい上記2つのいずれかのAWS のサービスを宛先とした通信のルートテーブルで、接続先を指定するゲートウェイです。今回の記事で作成したVPCエンドポイントもGateway型のエンドポイントを作成しています。

Gateway型のVPCエンドポイントの料金

Gateway型のVPCエンドポイント自体には追加料金は発生しません。

Gateway型のVPCエンドポイントの制限

リージョンをまたがってVPCエンドポイントを設置することはできません。そのため、同一リージョン内のAWSサービスを利用するにあたってVPCエンドポイントを利用するようにしましょう。

PrivateLink型(Interface型)のVPCエンドポイント

PrivateLink型のVPCエンドポイントは主に以下のAWSサービスをサポートしています。

  • Amazon API Gateway
  • Amazon CloudWatch
  • Amazon SNS
  • Amazon SQA

上記で紹介したものは一部は他にもたくさんのAWSサービスをサポートしています。詳細は以下の公式サイトを参照してください。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints.html

PrivateLink型はサポートされるAWSサービスの通信に対するエンドポイントとして機能します。つまり、このエンドポイントを作成することで独自に作成したアプリケーションをこのエンドポイントを使って相互にプライベート通信させることが可能になります。

PrivateLink型のVPCエンドポイントの料金

PrivateLink型のVPCエンドポイントの作成と使用には料金がかかります。時間単位の使用料金とデータ処理料金が適用されるので、利用する際には費用を考慮してください。費用の詳細は以下の公式サイトを参照してください

https://aws.amazon.com/jp/privatelink/pricing/

PrivateLink型のVPCエンドポイントのアーキテクチャ

PrivateLinkで指定するエンドポイントはNLB(Network Loadbalancer)になります。そのため、公開するサービスがあるサブネット上にNLBを配置して、このNLBを通して相互に通信が可能になります。

まとめ

今回はVPCエンドポイントを使ってインターネットを介さずS3へのアクセスができるようにしました。VPCエンドポイントの特にPrivateLink型は今回は簡単な説明に留めました。これだけでも十分記事にできるので、また別の機会に紹介をしたいと思います。

日本では閉域な環境での利用を望まれるユーザーさんも多いかと思います。特に業務システムなどは、オンプレミスで残すような企業も多いようです。

https://xtech.nikkei.com/atcl/nxt/column/18/01363/071200001/

VPCエンドポイントの他にもTransit GatewayといったVPC間を上手くつないでくれるサービスもあるようで、こういたサービスを上手く組み合わせて簡単にシステムの管理・構築ができるようになれればと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です