inflearn logo
강의

Course

Instructor

DevOps Now - Terraform X AWS

S3

terraform실행하면 s3 ACL 오류 발생합니다.

1671

javamania694996

7 asked

0

 Warning: Argument is deprecated

with aws_s3_bucket.s3,

on s3.tf line 13, in resource "aws_s3_bucket" "s3":

13: resource "aws_s3_bucket" "s3" {

Use the aws_s3_bucket_website_configuration resource instead

(and 2 more similar warnings elsewhere)

 

Error: creating Amazon S3 (Simple Storage) Bucket (saju-front-test): InvalidBucketAclWithObjectOwnership: Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting

status code: 400, request id: YX8V44RQW8C4RTBN, host id: YBAR+uXk/vTroI+XEYafZ7Xt72KQ9ePGvFs+TzLcefvekr7EkGbkTH0GmYOovnUOd+OtySk8y1U=

 

with aws_s3_bucket.s3,

on s3.tf line 13, in resource "aws_s3_bucket" "s3":

13: resource "aws_s3_bucket" "s3" {

s3 acl

Answer 2

0

kookh09875453

직접 확인 해 본 결과 전달 주신 에러가 발생하였습니다.

원인은 AWS 에서 4월 부터 Policy 정책에 대해서 퍼블릭 설정은 막았습니다. (보안 이슈 등의 이유로)

테라폼에서 퍼블릭 정책 설정을 직접할 수 없습니다. Policy 에 대해서는 AWS 에 콘솔에 접속해서 진행이 필요합니다.

현재 변경이 필요한 부분은 S3 테라폼 코드 수정이 필요합니다. 아래 첨부하였으며 강의에는 빠른 시일 내에 반영하겠습니다.

테라폼 코드를 실행 후 policy 정책 부분을 aws console에서 접속해서 s3 -> saju-front-test-2023 에 들어가서 권한 -> 버킷 정책에서 아래 내용을 추가해 주시면 됩니다.

{
 "Version": "2012-10-17",
 "Id": "Policy1546621853468",
 "Statement": [
  {
   "Sid": "Stmt1546621828605",
   "Effect": "Allow",
   "Principal": "*",
   "Action": "s3:GetObject",
   "Resource": "arn:aws:s3:::saju-front-test-2023/*"
  }
 ]
}

////////////////////////////// 변경된 테라폼 S3 코드 ///////////////////////////////////////////

# aws s3 rm s3://saju-front-prod --recursive
# terraform destroy 를 하기전에 S3 버킷 내용이 삭제되어야 한다.
# s3 버킷 생성시 AWS를 이용하는 모든 사용자들의 s3 버킷 이름과 중복해서 사용할 수 없습니다.

# AWS 리전
provider "aws" {
  region = "ap-northeast-2"
}

# S3 버킷
# 위치 : s3 > 버킷
# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket
resource "aws_s3_bucket" "example" {
  bucket = "saju-front-test-2023"


  tags = {
    Name = "saju-front-test"
    Service = "saju-test"
  }
}

resource "aws_s3_bucket_website_configuration" "s3" {
  bucket = "saju-front-test-2023"   //버킷 이름

  index_document {
    suffix = "index.html"
  }

  error_document {
    key = "index.html"
  }
}


resource "aws_s3_bucket_ownership_controls" "example" {
  bucket = aws_s3_bucket.example.id
  rule {
    object_ownership = "BucketOwnerPreferred"
  }
}

resource "aws_s3_bucket_public_access_block" "example" {
  bucket = aws_s3_bucket.example.id

  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}

resource "aws_s3_bucket_acl" "example" {
  depends_on = [
    aws_s3_bucket_ownership_controls.example,
    aws_s3_bucket_public_access_block.example,
  ]

  bucket = aws_s3_bucket.example.id
  acl    = "public-read"
}


# S3 정적 웹 호스팅 엔드포인트
output "s3_endpoint" {
  value = aws_s3_bucket_website_configuration.s3.website_endpoint
}

잘 안되시거나 궁금한 부분 있으시면 다시 질문 주시면 감사드립니다. 

 

2

Kibeom Lee

검색하다가 우연히 답글을 보게 되었는데 terraform으로 policy 정책을 업데이트 할 수 없다는 건 사실이 아닙니다.

 

우선 오류 메시지대로 객체 소유권을 BucketOwnerPreferred로 설정 후 aws_s3_bucket_public_access_block 리소스로 public access 제한을 해제한 뒤 policy 업데이트를 하면 잘 적용됩니다.

 


resource "aws_s3_bucket" "example" {
  bucket = "example-bucket"
}
resource "aws_s3_bucket_acl" "example" {
  depends_on = [aws_s3_bucket_ownership_controls.example]

  bucket = aws_s3_bucket.example.id
  acl    = "public-read"
}

resource "aws_s3_bucket_ownership_controls" "example" {
  bucket = aws_s3_bucket.example.id

  rule {
    object_ownership = "BucketOwnerPreferred"
  }
}

resource "aws_s3_bucket_public_access_block" "example" {
  bucket = aws_s3_bucket.example.id

  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}

resource "aws_s3_bucket_policy" "example_policy" {
  bucket = aws_s3_bucket.example.id
  policy = data.aws_iam_policy_document.allow_get_object.json
  depends_on = [ aws_s3_bucket_public_access_block.example ]
}

data "aws_iam_policy_document" "allow_get_object" {
  statement {
    actions   = ["s3:GetObject"]
    resources = ["${aws_s3_bucket.example.arn}/*"]
    principals {
      type        = "*"
      identifiers = ["*"]
    }
  }
}

0

kookh09875453

안녕하세요. S3 버킷 이름은 중복되어서는 안 됩니다.

해당 내용을 포함시키긴 했는데 설명이 부족했던 것 같습니다.

saju-front-test 대신에 saju-front-test-0422 이런식으로 고유 이름으로 변경 후 다시 한 번 테스트 해주시면 감사드립니다.

image

0

javamania694996

bucket 이름 변경해도 ACL 오류 입니다.

Error: creating Amazon S3 (Simple Storage) Bucket (saju-front-test-0422): InvalidBucketAclWithObjectOwnership: Bucket cannot have ACLs set with ObjectOwnership's BucketOwnerEnforced setting

│ status code: 400, request id: GPACQ3WRB6QG7X34, host id: pOcCGvBYLWCD8POW8sTrZMZ5U/sbzflUw9Ajc9tbW05BHnCrKv+l9BBRugyKuBAs4CeOavRRYi0=

│ with aws_s3_bucket.s3,

│ on s3.tf line 13, in resource "aws_s3_bucket" "s3":

│ 13: resource "aws_s3_bucket" "s3" {

DI시 eager과 lazy

0

37

2

사용하고 계신 WebStorm 관련 질문

0

64

1

포스트맨에서 이미지파일 업로드가 안됩니다.

0

64

2

수강기간 조금만 연장 부탁드립니다.

0

45

2

aws 인스턴스 삭제 관련 질문

0

89

2

aws에서 msyql,nginx,certbot다 설치하기

0

67

2

질문 드립니다!

0

72

1

프론트 API 작업

1

77

2

[실습] 3. S3를 활용해 Express 서버에 이미지 업로드 기능 구현하기

0

83

2

[실습] 4. RDS에 접속하기

0

90

2

49차시 [실습]3.파라미터 그룹 추가하기

0

73

2

명령어 어디에 있나요?

0

85

3

agents와 commands에 대해 궁금한 점이 있습니다!

1

101

2

.claude 폴더 규칙 생성 방법

1

144

2

강의를 어떻게 보면 좋을 까요?

1

118

2

SKILLS.md나 agents 작성 문의

1

110

1

비전공자도 이해할 수 있는 AWS 입문/실전 강의의 PDF에서 ELB 페이지가 안맞습니다.

0

75

2

CSRF 관련 궁금한게 있어요

1

74

1

안녕하세요 강사님 데이터베이스 선택 질문있습니다!!

1

99

2

안녕하세요 질문있습니다.

1

90

1

강의를 듣던 중 궁금한 점 있어요

1

85

1

클로드 대신 제미나이 사용해도

1

596

2

claude 동작 결과값이 다를 경우 어떻게 해나가야 될지 모르겠습니다.

2

152

2

hooks가 동작하기 위한 내용이 없는 것 같아서 추가가 필요하지 않을까 싶습니다.

1

111

3