S3の静的ウェブサイトホスティングをRoute53のドメインで公開する

⚠️ セキュリティ上の注意:本手順はバケットポリシーで"Principal": "*"を指定し、バケット内オブジェクトを誰でも読み取り可能にする構成です。

  • 2023年4月以降、新規作成するS3バケットはデフォルトで「パブリックアクセスをすべてブロック」が有効になっています。本手順を実施する場合は、当該設定を意図的に無効化する必要があり、対象バケットに機密情報を置かないことを必ず確認してください。
  • この構成はS3の静的ウェブサイトエンドポイントを直接使用するためHTTPS化ができません。HTTPSで公開したい場合や、より安全にオリジンを非公開のまま配信したい場合は、S3を非公開のままにしCloudFront+OAC(Origin Access Control)経由で配信する構成を推奨します。

操作

  1. S3でバケット作成
  2. Route53のAレコードへ設定

1. S3でバケット作成

S3でバケットを作成します。
独自ドメインでホストするときはホスト名と同じにします。

例)

  • example.com => バケット名もexample.com
  • s3.example.com => バケット名もs3.example.com

(1) アクセス許可 -> バケットポリシー変更

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

Resourceのバケット名(上記ではexample.com)は実際のバケット名に置き換えること。

ウェブで公開を選択

2. Route53のAレコードへ設定

AレコードでAliasを選ぶとドロップダウンメニューからバケットのエンドポイントが選択できます。
AレコードのNameとバケット名を同じにしないとドロップダウンメニューで選択できません。

S3バケットの公開(バケットポリシーの汎用テンプレート)

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

※ ``は実際のバケット名に置き換えること(arn:aws:s3::: に続けてバケット名を指定する)。

ref. https://awesome-linus.com/2020/02/04/s3-bucket-public-access/