작성
·
1.5K
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" {
답변 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
}
잘 안되시거나 궁금한 부분 있으시면 다시 질문 주시면 감사드립니다.
0
안녕하세요. S3 버킷 이름은 중복되어서는 안 됩니다.
해당 내용을 포함시키긴 했는데 설명이 부족했던 것 같습니다.
saju-front-test 대신에 saju-front-test-0422 이런식으로 고유 이름으로 변경 후 다시 한 번 테스트 해주시면 감사드립니다.
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" {
검색하다가 우연히 답글을 보게 되었는데 terraform으로 policy 정책을 업데이트 할 수 없다는 건 사실이 아닙니다.
우선 오류 메시지대로 객체 소유권을 BucketOwnerPreferred로 설정 후 aws_s3_bucket_public_access_block 리소스로 public access 제한을 해제한 뒤 policy 업데이트를 하면 잘 적용됩니다.