【新機能】S3がVPCのプライベートサブネットからアクセス可能になりました!

252件のシェア(すこし話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

本日、VPCのプライベートサブネットからS3へアクセスできるアップデートがありましたのでご紹介します。

どういう仕組み?

プライベートサブネットからアクセスするために、VPC内に特別なエンドポイントを作成します。ルートテーブルでS3へアクセスするIPアドレスをVPCエンドポイントへ向けるようにしてアクセスを可能とさせます。

貼り付けた画像_2015_05_12_9_01

設定

Management ConsoleのVPCダッシュボードに、以下のように「エンドポイント」という項目が増えています。

VPC_Management_Console

ではエンドポイントの作成を行います。

  • VPC:エンドポイントを作成するVPCを選択します。
  • サービス:現状ではS3(com.amazonaws.ap-northeast-1.s3)固定になっています。
  • ポリシー:今回は「フルアクセス」を選択します。ポリシー作成ツールを使用してVPC Endpoint Policyを設定すれば、詳細なアクセス制御が可能です。

VPC_Management_Console

S3のエンドポイントへアクセスするルートテーブルを設定します。
ここではプライベートサブネット用のルートテーブルを選択します。

VPC_Management_Console

このようにエンドポイントが作成されます。

VPC_Management_Console

ルートテーブルへもエンドポイントのルーティングが追加されます。

VPC_Management_Console

S3へのアクセス

プライベートサブネットのEC2からS3へアクセスしてみます。

# 通常のhttpsは外部へアクセスできない
$ curl https://www.google.co.jp/
curl: (7) Failed to connect to www.google.co.jp port 443: 接続がタイムアウトしました

# AWS-CLIのs3コマンドは実行可能
$ aws s3 ls --region ap-northeast-1 --recursive s3://maroon1st-rep-tokyo
2015-03-25 04:13:39         33 maroon1st-rep-tokyo_data3.txt

ウェブサイトへはアクセスできませんがAWS CLIでS3コマンドが実行できます。

別リージョンのS3へアクセスしてみます。

$ aws s3 ls --region us-west-2 --recursive s3://maroon1st-rep-oregon

HTTPSConnectionPool(host='maroon1st-rep-oregon.s3.amazonaws.com', port=443): Max retries exceeded with url: /?prefix= (Caused by ConnectTimeoutError(<botocore.awsrequest.AWSHTTPSConnection object at 0x7fd005e32ad0>, 'Connection to maroon1st-rep-oregon.s3.amazonaws.com timed out. (connect timeout=60)'))

こちらは別リージョンのためアクセスできません。

注意点

便利なVPCエンドポイントですが、以下の点に注意しましょう。

  • 同一リージョンのS3バケットのみVPCエンドポイントに対応しています。
  • 現在はVPCエンドポイントが対応しているサービスはS3のみです。

さいごに

NAT無しでプライベートサブネットからログをS3へ退避する等、通常のファイルアクセスで利用する以外にも、S3を利用するAWSの各種サービスがプライベートサブネットで使用可能になりそうな気がします。
また、オンプレミスと接続した完全プライベート環境でAWSを使用している場合、VPCエンドポイントによってS3へのアクセスがAWS内に閉じるためDXやVPNのネットワーク帯域を有効に使用できるかと思います。

この機能によって、プライベートサブネットの活用方法が変わりそうな予感がしています。

参考文献

AWS Official Blog New – VPC Endpoint for Amazon S3

AWS Documentation » Amazon Virtual Private Cloud » User Guide » Networking in Your VPC » VPC Endpoints