S3バケットで静的コンテンツを配信したい

Last-modified: Sun, 31 Dec 2017 21:02:33 JST (2308d)
Top > S3バケットで静的コンテンツを配信したい

S3バケットで静的コンテンツ(HTMLやJSなど。ようはPHPなどサーバ側でプログラムを動かさないもの)を配信するWebサーバ機能があります。
ここでは、sampledomain.tkにて、S3を公開します。

  • ドメインは別途取得済みとします。

バケットの作成

  1. S3バケットを作成します。バケットを作成するボタンをクリックします。
    r53-01.jpg
  2. バケット名を入れます。ルールとして静的コンテンツを配信するWebサーバ機能を利用する場合、バケット名はそのホスト名を指定する必要があります。参考
    r53-02.jpg
  3. S3のWebサーバ機能を利用した際にアクセスログを取得することができます。
    ただし、このログはベストエフォートであり、完全ではない、リアルタイムではないことに注意です。
    ログ格納用バケットを別途作成したうえで、サーバーアクセスのログ記録をクリックします。
    r53-03.jpg
  4. ターゲットバケットにログ格納用バケットを選択。
    ターゲットプレフィックスは適当に指定します。
    r53-04.jpg
  5. アクセス権の設定です。ここは後から設定するのでそのまま触らず次へ行きます。
    r53-05.jpg
  6. サマリーが出ますので、バケットを作成します。
    r53-06.jpg

Webサーバ機能有効化

  1. 作成したバケットを選択し、プロパティタブをクリック、Static website hostingをクリックします。
    r53-07.jpg
  2. インデックスドキュメントにindex.htmlを入力し、保存します。
    エンドポイントとあるのが、アクセス元URLになります。
    r53-08.jpg
  3. Webサーバ機能を有効化しても、403 Forbiddenになります。
    これはファイルに外部から(つまりAnonimous)のアクセス権がないからです。
    r53-09.jpg
  4. アクセス権を設定します。作成したバケットを選択し、アクセス権限タブからバケットポリシーをクリックします。
    r53-10.jpg
  5. バケットポリシーエディターに以下の内容を貼り付けます。ホスト名の箇所は適宜書き換えてください。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::sampledomain.tk/*"
            }
        ]
    }
  6. このポリシーは外部から参照のみ権限を付与するため、外部公開されていると警告が出ます。
    r53-11.jpg
  7. あとは公開するファイルをアップロードします。
    アップロードボタンをクリックし、ファイルをアップロードします。
    r53-12.jpg
  8. 先ほどForbiddenだったのが見れるようになります。
    r53-13.jpg

余談:アクセス権について

  1. Webサーバ機能を有効化した後、外部の人に参照権限を与えるなら、Webサーバ機能はいらないのでは?という疑問があります。
    ここでは、試しにWebサーバ機能を無効化してみます。
    r53-14.jpg
  2. 確かにアクセスできなくなりました。では先ほどのアクセス権設定はどこに効いているのでしょうか?
    r53-15.jpg
  3. 先ほどアップロードしたindex.htmlのプロパティを見てみましょう。
    ここに、リンクと書かれたURLがあります。
    r53-16.jpg
  4. なんとアクセスできてしまいました。
    r53-17.jpg
    つまり、アクセス権設定で読み取り権限を付与した場合、s3-ap-northeast-1.amazonaws.com/<バケット名>/ファイル名でアクセスすることができます。
    Webサーバ機能を有効化すると、<バケット名>.s3-website-ap-northeast-1.amazonaws.com/<ファイル名>でアクセスできるようになり、かつ、CNAMEで呼び出すことができるようになります。
    つまり、外部に公開するための権限+CNAMEのための設定を行ったという訳ですね。Webサーバ機能は単にCNAME
    という訳で、
    r53-18.jpg
    気を付けましょう。

Counter: 499, today: 3, yesterday: 0

このページの参照回数は、499です。