S3 静的ウェブサイトホスティングのドメインを別のAWSアカウントで管理する

こんにちは、菊池です。

今回も小ネタで。

Amazon S3の静的ウェブサイトホスティングを利用すると、EC2などのサーバなしに静的なウェブサイトを公開することが可能です。また、Route 53を使うことで、公開するサイトのドメイン名を取得・管理できます。

今回は、管理上、複数のAWSアカウントを使っているケースでの設定例を紹介します。以下のように、ドメイン管理をアカウントAで行い、他のアカウントのS3を使って公開するイメージです。

S3を公開する

まずは公開するS3バケットの準備です。なお、この手順では全てのユーザにバケットに保存するコンテンツを公開しています。意図しないファイルを保存したり、誤ったバケットを公開しないよう十分にご注意ください。

まずはバケットを作成します。

公開したいドメイン名(FQDN)をバケット名に指定します。(以下ではwww.xxxx.netを指定)

プロパティなどはそのままで、[作成]します。

続いて、静的ウェブサイトホスティングを有効化します。バケットのプロパティから[Static website hosting]を指定します。

ウェブサイトのホストを有効化し、インデックスドキュメント、エラードキュメントを指定します。リダイレクトも可能ですが、デフォルトのままにしてあります。

続いて、アクセス権の設定です。任意のユーザに公開するため、バケットポリシーでGetObject権限を付与します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/*"
            ]
        }
    ]
}

設定できたら、バケットにインデックスドキュメントであるindex.htmlを配置します。

ここまでの設定で、S3の公開はされています。[Static website hosting]の設定画面にあった、エンドポイント:(バケット名).s3-website-ap-northeast-1.amazonaws.comにブラウザでアクセスすると、Webページが表示されます。

ドメイン名を設定する

ここまでで、ウェブサイトの公開ができました。目的のドメイン名でアクセスさせるため、Route 53でドメインを管理するアカウントにて操作します。

Route 53でドメインが取得したら、対象のHostedZoneの[Create Recode Set]からレコードを追加します。名前(今回はwww)を入力し、TypeにはAレコードを選択したら、Aliasを[Yes]とします。

ここで、公開対象のS3が同じアカウントに存在する場合には、[Alias Target]に選択肢として出てきます。しかし、今回は異なるアカウントなので、[Alias Target]を直接入力する必要があります。

そして、入力すべきパラメータは以下のドキュメントに記載があります。

東京リージョンのS3を指定したい場合には、s3-website-ap-northeast-1.amazonaws.comと入力します。

登録したら、目的のドメイン名でアクセスしてみます。

先ほどと同じページが表示されればOKです!

まとめ

以上です。

改めてのS3 静的ウェブサイトホスティングの設定と、異なるアカウントでのドメインの設定でした。なお、静的ウェブサイトホスティングでS3を直接参照させる場合には、プロトコルはHTTPのみとなります。HTTPSを使う場合には、CloudFrontを使う方法がありますので、後日、紹介します。

最後に、繰り返しになりますが、くれぐれも、意図しないバケット/オブジェクトは公開しないように注意しましょう!