Amazon S3のStatic Web Hostingにアクセス制限をかけて使ってみる このエントリをはてなブックマークに登録

2013年09月17日

ishizimaishizima

残暑が長引いていますが、朝晩だいぶ涼しくなってきましたね。秋になり、6月から育ててきたヒマワリが枯れました。水をやらなかったからですが。

S3を利用したWebホスティング

ということでAmazon S3のStatic Web Hostingです。Webサーバ不要で静的サイトを設置できます。便利です。ベースがS3であるが故、安価、安定、そしてどんなにアクセストラフィックが増えても重くなりにくい(従量課金ですが、Webサーバでスケールアウトするより遙かに低コストです)、などの特長を持ちます。連携できるCMSも増えてきました。
ここでは簡単に初回設定、並びにstaging環境などで必要となる、アクセス制限の方法について書いてみたいと思います。

利用開始までの手順

登場から日が経っていることもありご存じの方も多いと思いますが、Static Web Hostingを使うまでの流れをおさらいしておきます。

  1. URLと同じ名前でバケットを作る
    http://www.example.jp なら、www.example.jp という名前
  2. Static Web Hostingを有効にする
  3. DNSのCNAMEレコードにバケットのエンドポイントを登録する
    CNAMEのvalueに、S3がエンドポイントとして発行する www.example.jp.s3-website-ap-northeast-1.amazonaws.com のようなURLを設定する
  4. Policyの設定をする
    詳細後述
  5. ファイルをアップロードする

Static Web Hostingを有効にする

Management Consoleでバケットを選択し、Properties > Static Web Hosting > Enable Web Hosting を選択します。バケットをStatic Web Hostingに対応させるために必要な作業です。
バケット設定

Policyの設定

Static Web HostingをEnabledにしただけだと、アップロードしたファイルにアクセスしても403 Forbiddenとなります。Properties > Permissions > Add(Edit) bucket policy で、以下のように外部から読み出しの許可を与える必要があります。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*"
        }
    ]
}

以上で準備が整いました。S3の該当バケットへファイルをアップロードすれば、通常のWebサイトとして公開することができます。

アクセス制限について

AmazonS3はBasic認証に対応していません。表示確認用といった用途では困ります。実際困りました。クエリストリングにtokenを付ける方法がありますが、手で作る静的サイトではリンク修正が多すぎて現実的ではないでしょう。
唯一使えそうなのが、IPアドレスによるアクセス許可です。先ほどのPolicyにConditionを追記することで設定できます、

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "xxx.xxx.xxx.xxx/xx"
                }
            }
        }
    ]
}

これで、aws:SourceIp外からのアクセスは403となります。Basic認証のような柔軟さはありませんが、これでなんとなかるケースもあるでしょう。

より詳しく知りたい方は、Amazonの以下のドキュメントが参考になると思います。
Example Cases for Amazon S3 Bucket Policies

おわりに

以上、ざっとStatic Web Hostingを使い方について書いてみました。
既存のCMSと組み合わせてサイトを構築する場合は、以下の記事に目を通してみてください。

クレイについてもっと知りたい方は…

  1. クレイの3つの強みを見てみる。
  2. WEBシステムのことなら何でもご相談ください。

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック
  1. [aws]s3バケットにIP制限をかける | hello-world.jp.net2014/06/19, 12:13 AM

    […] Amazon S3のStatic Web Hostingにアクセス制限をかけて使ってみる […]

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ