| 1 | resource "aws_s3_bucket" "frontend" { |
| 2 | bucket = var.s3_bucket |
| 3 | |
| 4 | tags = { |
| 5 | Name = "ReadFasterLabs" |
| 6 | } |
| 7 | } |
| 8 | |
| 9 | resource "aws_s3_bucket_website_configuration" "frontend" { |
| 10 | bucket = aws_s3_bucket.frontend.id |
| 11 | |
| 12 | index_document { |
| 13 | suffix = "index.html" |
| 14 | } |
| 15 | } |
| 16 | |
| 17 | data "aws_iam_policy_document" "origin_bucket_policy" { |
| 18 | statement { |
| 19 | sid = "PublicRead" |
| 20 | effect = "Allow" |
| 21 | |
| 22 | principals { |
| 23 | type = "*" |
| 24 | identifiers = ["*"] |
| 25 | } |
| 26 | |
| 27 | actions = ["s3:GetObject"] |
| 28 | resources = ["${aws_s3_bucket.frontend.arn}/*"] |
| 29 | } |
| 30 | |
| 31 | statement { |
| 32 | sid = "AllowCloudFrontServicePrincipal" |
| 33 | effect = "Allow" |
| 34 | |
| 35 | principals { |
| 36 | type = "Service" |
| 37 | identifiers = ["cloudfront.amazonaws.com"] |
| 38 | } |
| 39 | |
| 40 | actions = ["s3:GetObject"] |
| 41 | resources = ["${aws_s3_bucket.frontend.arn}/*"] |
| 42 | |
| 43 | condition { |
| 44 | test = "ArnLike" |
| 45 | variable = "AWS:SourceArn" |
| 46 | values = [aws_cloudfront_distribution.cdn.arn] |
| 47 | } |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | resource "aws_s3_bucket_policy" "frontend" { |
| 52 | bucket = aws_s3_bucket.frontend.bucket |
| 53 | policy = data.aws_iam_policy_document.origin_bucket_policy.json |
| 54 | } |
| 55 | |
| 56 | locals { |
| 57 | s3_origin_id = "myS3Origin" |
| 58 | } |