CloudTrail 로그 버킷의 공개 접근 점검

감사 로그 저장소의 공개 권한을 제거하고 로그 전달 권한은 유지하세요.

설명

CloudTrail 로그에는 계정 활동과 API 호출 등 민감한 감사 정보가 포함될 수 있습니다. 로그 저장 버킷의 공개 권한은 제거하고 실제 버킷·객체 접근을 함께 확인해야 합니다.

버킷의 공개 READ ACL은 객체 목록 조회를 허용하며, 그 자체로 모든 로그 객체의 내용을 읽을 권한을 주지는 않습니다. 실제 권한은 객체 ACL, 버킷 정책, Object Ownership과 공개 접근 차단 설정에도 달려 있습니다.

잠재적 영향

  • 객체 이름이나 목록이 노출되어 환경 구조를 추측하는 데 사용될 수 있습니다.
  • 로그 객체의 읽기 권한까지 공개되면 계정 활동과 운영 정보가 유출될 수 있습니다.

해결 방법

  • 공개 ACL과 불필요한 공개 버킷 정책을 제거하고 S3 공개 접근 차단 설정을 유지하세요.
  • 필요한 로그 전달·조회 권한을 정책으로 구성한 뒤 가능하면 ACL을 비활성화하세요. CloudTrail 서비스의 쓰기 권한은 해당 trail ARN의 aws:SourceArn 조건 등으로 제한하세요.
  • 변경 후 로그가 계속 전달되는지와 승인된 감사 담당자만 필요한 객체를 읽을 수 있는지 확인하세요.

예시

기존 ACL 사용 환경의 비교용 발췌입니다. 새 S3 버킷은 기본적으로 ACL이 비활성화되어 공개 ACL 요청을 수락하지 않습니다. 실제 고유 버킷 이름과 CloudTrail 전달용 버킷 정책은 별도로 필요합니다.

변경 전

hcl
resource "aws_cloudtrail" "cloudtrail" {
  name           = "tf-trail-foobar"
  s3_bucket_name = aws_s3_bucket.log_bucket.id
}

resource "aws_s3_bucket" "log_bucket" {
  bucket = "my-tf-test-bucket"
  acl    = "public-read"
}

버킷에 공개 READ ACL을 요청합니다. 적용되면 목록 조회를 허용하지만 로그 객체 내용의 공개 여부는 별도로 확인해야 합니다.

변경 후

hcl
resource "aws_cloudtrail" "cloudtrail" {
  name           = "tf-trail-foobar"
  s3_bucket_name = aws_s3_bucket.log_bucket.id
}

resource "aws_s3_bucket" "log_bucket" {
  bucket = "my-tf-test-bucket"
  acl    = "private"
}

버킷 ACL의 공개 권한을 제거합니다. 버킷·객체 정책과 공개 접근 차단을 함께 검토하고 CloudTrail 전달 권한을 유지하세요.

참조