【画像付き手順解説】:
S3エンドポイント(Gateway型)を使用してVPN経由でS3にアクセスする

S3で公開しているサイトへのアクセスをVPNサーバー経由のアクセスのみに限定したいということはないでしょうか。

VPCのS3エンドポイントを使用することで、そのようなアーキテクチャを実現することができます。

今回は「S3エンドポイントの構築方法」とあわせてカスタムドメイン名を使用するために「リバースプロキシを構築して」プロキシ経由でS3エンドポイントにアクセスする構成を紹介します。

また、S3エンドポイントにはGateway型とInterface型がありますので、それぞれの違いについても軽く触れていきます。

今回紹介する構築手順はGateway型のS3エンドポイントになりますので、Interface型の構築手順が知りたい方は以下の記事を参照してください。

Recommended You
S3エンドポイント(Interface型)を使用してVPN経由でS3にアクセスする

Gateway型のS3エンドポイントを使用してVPN経由でS3にアクセスする方法を紹介しています。構築手順を参考にしてください。

今回紹介するアーキテクチャ

今回紹介するアーキテクチャのキモは「S3エンドポイント」と「リバースプロキシ」です。
VPNサーバーにApacheを入れてリバースプロキシとしても動作させます。

このようにすることで、通常はS3へのアクセスURLが「https://s3.【リージョン名】.amazonaws.com/【バケット名】/【オブジェクト名】」となるところを任意のカスタムドメインで名前解決できるようにします。

また、バケットポリシーでS3エンドポイントからのパブリックアクセスのみ許可しますので、VPN経由でのみアクセス可能なS3とすることができます。

今回紹介するアーキテクチャ
(クリックすると画像が拡大されます。)

Gateway型とInterface型の違い

前述のとおり、S3エンドポイントにはGateway型とInterface型があります。
今回紹介するアーキテクチャは実はどちらの型でも構築は可能です。
ただ使用するうえで制約や料金に違いがあります。

それぞれの違いについてポイントとなるのは以下2点です。

Gateway型とInterface型の違い
  • Gateway型はS3へのアクセスURLが変わらない。一方、Interface型はアクセスURLが「https://bucket.vpce-XXXX.s3.【リージョン名】.vpce.amazonaws.com/【バケット名】/【オブジェクト名】」という形式に変わる
  • Interface型は追加料金が発生する

それぞれ解説していきます。

アクセスURLの違い

Gateway型のS3エンドポイントではS3へのアクセスURLは変わりません。

つまり通常のS3へのアクセスURLである「https://s3.【リージョン名】.amazonaws.com/【バケット名】/【オブジェクト名】」となります。(以下のようにAWS公式ドキュメントにも記載があります。)

AWS公式ドキュメントの記載
(クリックすると画像が拡大されます。)

対してInterface型のS3エンドポイントではS3へのアクセスURLは「 https://bucket.vpce-XXXX.s3.【リージョン名】.vpce.amazonaws.com/【バケット名】/【オブジェクト名】 」となります。

いずれもドメインにサブディレクトリとして「バケット名」と「オブジェクト名」が付いてきます。

バケット名を除いて、例えば「http://aaa.bbb.com/index.html」などでアクセスさせたい場合はリバースプロキシを置く必要があります。

料金の違い

以下のようにAWS公式ドキュメントにもある通り、Gateway型のS3エンドポイントは料金がかかりません

AWS公式ドキュメントの記載
(クリックすると画像が拡大されます。)

対してインターフェース型のS3エンドポイントは料金がかかります
料金の詳細はこちらから確認できます。

以下のような計算をすると月額1000円ちょっとは掛かる計算になります。

0.014 [USD/時間] * 24[時間] * 30[日] * 110[JPY/USD] = およそ1110円/月

料金の違いを踏まえると、今回の構成ではGateway型のS3エンドポイントを使用する方が得策です

構築手順

VPCの作成

VPCの作成方法は以下の記事にまとめてありますので、手順がわからない方は参照してください。

Recommended You
【画像付手順】:
VPCを使用してプライベートサブネットを構築する

VPCの実装方法を紹介しています。構築手順を参考にしてください。

VPNサーバーの構築

VPNサーバーの構築方法は以下の記事にまとめてありますので、手順がわからない方は参照してください。

Recommended You
AWS EC2(CentOS)でSoftEtherを用いたVPNを設定する

EC2(CentOS)を使ったVPNサーバー構築方法を紹介しています。手順を参考にしてください。

Recommended You
AWS EC2(Windows)でSoftEtherを用いたVPNを設定する

EC2(Windows)を使ったVPNサーバー構築方法を紹介しています。手順を参考にしてください。

S3エンドポイントの構築

Gateway型のS3エンドポイントを構築していきます。

VPCコンソール画面の「エンドポイント」から「エンドポイントの作成」をクリックします。
エンドポイントを作成画面では「エンドポイント名」を入力し、サービスカテゴリを「AWSのサービス」を選択します。

S3エンドポイントの構築(1/4)
(クリックすると画像が拡大されます。)

サービスの検索窓に「s3」と入力し「Gatewayタイプのcom.amazonaws.ap-northeast-1.s3」を選択し、「作成したVPC」を選択します。

S3エンドポイントの構築(2/4)
(クリックすると画像が拡大されます。)

ルートテーブルはVPCで使用しているものを選択すればよいですが、わからなければすべて選択してもよいです。

S3エンドポイントの構築(3/4)
(クリックすると画像が拡大されます。)

あとは「エンドポイントを作成」をクリックすればS3エンドポイントの作成完了です。

S3エンドポイントの構築(4/4)
(クリックすると画像が拡大されます。)

エンドポイントのポリシーでアクセスを絞ることもできますが、今回はS3のバケットポリシーでアクセス制限を設けます。

エンドポイントのポリシーについてはこちらのAWS公式ドキュメントに記述があります。

S3エンドポイントの構築は以上で完了です。

S3バケットの作成

S3エンドポイントからアクセスするS3を作成します。
以下のようにパブリックアクセスをすべてブロックの状態で作成します。

S3の作成(1/5)
(クリックすると画像が拡大されます。)

バケットが作成出来たらバケットポリシーを設定していきます。

作成したバケット画面の「アクセス許可」からバケットポリシーの「編集」をクリックします。

S3の作成(2/5)
(クリックすると画像が拡大されます。)

バケットポリシーの入力欄には以下のオレンジ部分を変更してコピペしてください。

S3の作成(3/5)
(クリックすると画像が拡大されます。)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowVPCe",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                 "s3:Get*",
                 "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKET-NAME",
                "arn:aws:s3::: BUCKET-NAME /*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "vpce-9999999"
                }
            }
        }
    ]
}

次に静的ウェブサイトホスティングができるように設定します。

作成したバケット画面の「プロパティ」から静的ウェブサイトホスティングの「編集」をクリックします。

S3の作成(4/5)
(クリックすると画像が拡大されます。)

静的ウェブサイトを編集画面では静的ウェブサイトホスティングを「有効」にし、ホスティングタイプを「静的ウェブサイトをホストする」にします。
あとは、インデックスドキュメントを「index.html」などにして「変更の保存」をクリックします。

S3の作成(5/5)
(クリックすると画像が拡大されます。)

S3の作成は以上で完了です。

DNSを設定

カスタムドメインでS3にアクセスする場合はDNS設定を忘れずに設定しておきます。

今回はVPNサーバーをリバースプロキシとして使用するため、以下のようなDNSレコードを登録します。

DNSレコード
(クリックすると画像が拡大されます。)

VPNサーバーにリバースプロキシを設定

今回はVPNサーバーをリバースプロキシとして使用するため、VPNサーバーにApacheをインストールしてカスタムドメインに来たアクセスをS3エンドポイントに流します。

Apacheのインストールと設定は以下のようになります。

  • Apacheのインストール
$ sudo yum install httpd
  • Apacheを自動起動するように設定
$ sudo systemctl enable httpd
  • 以下4点が有効か確認
    • proxy_module (shared)
    • lbmethod_byrequests_module (shared)
    • proxy_balancer_module (shared)
    • proxy_http_module (shared)
$ httpd -M
  • プロキシ設定用のディレクトリを作成
変更箇所(オレンジ部)
(クリックすると画像が拡大されます。)
$ sudo mkdir /var/www/html/XXXX
  • リバースプロキシ設定を作成
変更箇所(オレンジ部)
(クリックすると画像が拡大されます。)
$ sudo vi /etc/httpd/conf.d/reverse-proxy-s3-endpoint.conf

作成したconfファイルの中身は以下のようになります。オレンジ部を変更したうえで使用してください。

変更箇所(オレンジ部)
(クリックすると画像が拡大されます。)

    AllowOverride All
    Require all granted


NameVirtualHost *:80

  ServerName aaaa.bbbb.com
  DocumentRoot /var/www/html/XXXX

  ProxyRequests off

  ProxyPass / http://s3.ap-northeast-1.amazonaws.com/【バケット名】/
  ProxyPassReverse / http://s3.ap-northeast-1.amazonaws.com/【バケット名】/
  • 設定の確認
$ httpd -t
  • Apacheを起動
$ sudo systemctl start httpd

以上で構築はすべて完了となります。

S3に適当なHTMLを置いてみて、VPNを接続してカスタムドメインで表示されるか確認してみてください。
また、VPNを接続していない場合は表示されないことも併せて確認するとよいでしょう。

本記事が参考になったという方、似たようなAWSの使い方ハンズオンを以下のサイトにまとめています。他のAWSサービスの使い方の参考に覗いてみてください。

Check Out! Recommended You
ハンズオンで学べるAWS

AWSをもっと知りたいという方に向けて「ハンズオンで学べるAWS」を提供しています。

興味のあるAWSサービスをハンズオンでぜひ試して触ってみてください。

Spread the love