S3で静的サイトホスティング

手動でGUI操作

アクセス権限で以下のチェックボックスを外す

  • [ ] 新規のパブリックバケットポリシーをブロックする (推奨)
  • [ ] バケットにパブリックポリシーがある場合、パブリックアクセスとクロスアカウントアクセスをブロックする (推奨)
{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}

参考: https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteAccessPermissionsReqd.html

TerraFormで自動

覚えておくと便利なコマンド:

$ terraform init   # initialize
$ terraform apply  # attach
$ terraform show   # check result

example-s3.tf

provider "aws" {
  access_key = "XXXXXXXXXXXX"
  secret_key = "YYYYYYYYYYYY"
  region     = "us-east-1"
}

resource "aws_s3_bucket" "b" {
  bucket = "s3-website-test.example.com"
  acl    = "public-read"
  policy = <<POLICY
{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::s3-website-test.example.com/*"
      ]
    }
  ]
}
POLICY

  website {
    index_document = "index.html"
    error_document = "error.html"

    routing_rules = <<EOF
[{
    "Condition": {
        "KeyPrefixEquals": "docs/"
    },
    "Redirect": {
        "ReplaceKeyPrefixWith": "documents/"
    }
}]
EOF
  }
}