AWS

AWS S3 리소스

devfinger 2024. 10. 22. 17:44

Amazon S3

  • 버킷
  • Access Grants
  • 액세스 지점
  • 객체 Lambda 액세스 지점
  • 다중 리전 액세스 지점
  • 배치 작업
  • S3용 IAM Access Analyzer

 

1. S3 버킷 (Bucket)

  • 필수 항목:
    • bucket: 버킷 이름 (필수)
  • 선택 항목:
    • acl: 버킷의 접근 제어 목록 (옵션)
    • versioning: 버킷의 버전 관리 설정 (옵션)
    • server_side_encryption_configuration: 서버 측 암호화 설정 (옵션)
    • tags: 버킷에 태그를 추가 (옵션)
  • 리소스 이름: aws_s3_bucket
resource "aws_s3_bucket" "example_bucket" {
  bucket = "my-example-bucket"  # 필수: 버킷 이름

  # 옵션: 접근 제어 목록을 설정 (기본값은 private)
  acl = "private"

  # 옵션: 버전 관리 설정
  versioning {
    enabled = true
  }

  # 옵션: 서버 측 암호화 설정
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }

  # 옵션: 태그 추가
  tags = {
    Name        = "MyExampleBucket"
    Environment = "Production"
  }
}

 

 

2. Access Grants (액세스 권한 부여)

필수 항목:

  • bucket: 버킷 이름 (필수)
  • policy: JSON 형식의 정책 문서 (필수)

리소스 이름: aws_s3_bucket_policy

resource "aws_s3_bucket_policy" "example_policy" {
  bucket = aws_s3_bucket.example_bucket.bucket  # 필수: 연결된 버킷
  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "${aws_s3_bucket.example_bucket.arn}/*"
    }
  ]
}
POLICY
}

 

3. S3 액세스 지점 (Access Point)

필수 항목:

  • bucket: 연결할 S3 버킷 (필수)

선택 항목:

  • vpc_configuration: VPC에서의 액세스 설정 (옵션)

리소스 이름: aws_s3_access_point

 

resource "aws_s3_access_point" "example_access_point" {
  bucket = aws_s3_bucket.example_bucket.bucket  # 필수: 연결된 버킷

  # 옵션: VPC 내에서 접근할 수 있도록 설정
  vpc_configuration {
    vpc_id = aws_vpc.main.id
  }

  # 옵션: 태그 추가
  tags = {
    Name = "ExampleAccessPoint"
  }
}

 

4. 객체 Lambda 액세스 지점

필수 항목:

  • bucket: 연결할 S3 버킷 (필수)
  • function_arn: Lambda 함수 ARN (필수)

리소스 이름: aws_s3_bucket_lambda_function

 

resource "aws_s3_bucket_lambda_function" "example_lambda_access_point" {
  bucket       = aws_s3_bucket.example_bucket.bucket  # 필수: 연결된 버킷
  function_arn = aws_lambda_function.example.arn      # 필수: 연결된 Lambda 함수 ARN

  events = ["s3:ObjectCreated:*"]  # 트리거할 이벤트 (옵션)

  filter {
    prefix = "uploads/"  # 필터링할 객체 경로
    suffix = ".jpg"
  }
}

 

5. 다중 리전 액세스 지점 (Multi-Region Access Point)

필수 항목:

  • name: 액세스 지점 이름 (필수)
  • regions: 여러 리전에서 사용할 버킷 정의 (필수)

리소스 이름: aws_s3control_multi_region_access_point

 

resource "aws_s3control_multi_region_access_point" "example_multi_region" {
  name = "example-multi-region-access-point"  # 필수: 액세스 지점 이름

  region {
    bucket = aws_s3_bucket.example_bucket.bucket  # 첫 번째 리전의 버킷
  }

  region {
    bucket = aws_s3_bucket.secondary_bucket.bucket  # 두 번째 리전의 버킷
  }
}

 

6. S3 배치 작업

필수 항목:

  • manifest: 처리할 객체 목록 (필수)
  • operation: 수행할 작업 (필수)
  • role_arn: 작업을 수행할 IAM 역할 (필수)

리소스 이름: aws_s3control_batch_job

 

resource "aws_s3control_batch_job" "example_batch_job" {
  manifest {
    location {
      object_arn = "arn:aws:s3:::my-manifest-bucket/manifest.json"
      etag       = "123456789abcdef"
    }

    format = "S3BatchOperations_CSV_20180820"
  }

  operation {
    s3_put_object_copy {
      target_resource = aws_s3_bucket.target_bucket.arn
    }
  }

  role_arn = aws_iam_role.s3_batch_role.arn  # 필수: 역할 ARN
}

 

7. S3용 IAM Access Analyzer

필수 항목:

  • analyzer_name: Access Analyzer 이름 (필수)

리소스 이름: aws_accessanalyzer_analyzer

resource "aws_accessanalyzer_analyzer" "example_analyzer" {
  analyzer_name = "s3-access-analyzer"  # 필수: 이름
  type          = "ACCOUNT"  # 계정 기반 분석기
}