Terraform S3 생성

임종혁·2024년 10월 28일

1. s3 버킷 생성

resource "aws_s3_bucket" "public_access" {
  bucket = "learn-terraform-mybucket"

  tags = {
    environment = "devel" 
  }
}
  • enviroment = "devel" - 버킷은 개발환경

2. 퍼블릭 엑세스 차단

모든 사용자(인터넷 상의 누구든지)가 접근할 수 있도록 허용
즉 인증 되지 않은 사용자

resource "aws_s3_bucket_public_access_block" "public_access_block" {
  bucket = aws_s3_bucket.public_access.id

  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false 
}
  • block_public_acls acl 허용
  • block_public_policy 버킷 정책 허용
  • ignore_public_acls CL을 무시하지 않음
  • restrict_public_buckets 퍼블릭 버킷을 허용합니다.

3. 버킷 정책

인증된 사용자

resource "aws_s3_bucket_policy" "bucket_policy" {
  bucket = aws_s3_bucket.public_access.id

  # 정책 정의
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Sid = "PublicRead"
        Effect = "Allow"
        Principal = "*"
        Action = "s3:GetObject"
        Resource = "${aws_s3_bucket.public_access.arn}/*"  # 버킷 내 모든 객체에 대한 권한
      },
    ]
  })
}
  • Sid = "PublicRead"

    • 이 정책의 식별자입니다. 정책 내에서 참조하는 데 사용되며, 고유할 필요는 없습니다.
  • Effect = "Allow"

    • 정책이 허용(Allow)인지 거부(Deny)인지를 지정합니다. 여기서는 Allow로 설정하여 액세스를 허용합니다.
  • Principal = "*"

    • 이 정책이 적용되는 사용자 또는 엔티티를 지정합니다. "*"는 모든 사용자(퍼블릭)를 의미합니다.
  • Action = "s3:GetObject"

    • 허용할 작업을 지정합니다. s3:GetObject는 버킷 내 객체에 대한 읽기 권한을 의미합니다.
  • Resource = "${aws_s3_bucket.public_access.arn}/*"

    • 정책이 적용되는 리소스를 지정합니다. ${aws_s3_bucket.public_access.arn}/*는 지정된 버킷 내 모든 객체에 적용됩니다.

0개의 댓글