【新機能】S3がVPCのプライベートサブネットからアクセス可能になりました!
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日、VPCのプライベートサブネットからS3へアクセスできるアップデートがありましたのでご紹介します。
どういう仕組み?
プライベートサブネットからアクセスするために、VPC内に特別なエンドポイントを作成します。ルートテーブルでS3へアクセスするIPアドレスをVPCエンドポイントへ向けるようにしてアクセスを可能とさせます。
設定
Management ConsoleのVPCダッシュボードに、以下のように「エンドポイント」という項目が増えています。
ではエンドポイントの作成を行います。
- VPC:エンドポイントを作成するVPCを選択します。
- サービス:現状ではS3(com.amazonaws.ap-northeast-1.s3)固定になっています。
- ポリシー:今回は「フルアクセス」を選択します。ポリシー作成ツールを使用してVPC Endpoint Policyを設定すれば、詳細なアクセス制御が可能です。
S3のエンドポイントへアクセスするルートテーブルを設定します。 ここではプライベートサブネット用のルートテーブルを選択します。
このようにエンドポイントが作成されます。
ルートテーブルへもエンドポイントのルーティングが追加されます。
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のネットワーク帯域を有効に使用できるかと思います。
この機能によって、プライベートサブネットの活用方法が変わりそうな予感がしています。