terraform실행하면 s3 ACL 오류 발생합니다.
1671
7 asked
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" {
Answer 2
0
직접 확인 해 본 결과 전달 주신 에러가 발생하였습니다.
원인은 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
검색하다가 우연히 답글을 보게 되었는데 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
안녕하세요. S3 버킷 이름은 중복되어서는 안 됩니다.
해당 내용을 포함시키긴 했는데 설명이 부족했던 것 같습니다.
saju-front-test 대신에 saju-front-test-0422 이런식으로 고유 이름으로 변경 후 다시 한 번 테스트 해주시면 감사드립니다.

0
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

