[cloud ‐ TroubleShooting] s3에 이상한 파일 생성 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

문제 요약 (Issue Summary)

  • 문제 발생 일시: 2025-05-19
  • 문제 발생 위치: S3 버킷 s3-prod-ongi
  • 문제 증상: CloudTrail에 AccessDenied 로그 발생, eventSource: s3.amazonaws.com, eventName: PutObject, s3에 다수의 파일 생성

현상 (Observed Symptoms)

  • 서버가 이미 종료된 상태였음에도 불구하고, S3 버킷에 PutObject 요청이 발생함.
  • CloudTrail에는 userIdentity.type: AWSServiceinvokedBy: s3.amazonaws.com으로 기록됨.
  • 요청의 IP 및 UserAgent 또한 s3.amazonaws.com으로 나타남.
  • 해당 요청은 AccessDenied 에러와 함께 실패함.

image

기대 결과 (Expected Behavior)

  • 서버가 종료된 이후에는 S3에 어떠한 요청도 발생하지 않아야 하며, AccessDenied와 같은 에러가 CloudTrail에 기록되지 않아야 한다.

시도한 해결 방법 (What I Tried)

  • 서버 로그 확인 → 서버는 이미 수 시간 전에 종료됨을 확인.
  • CloudTrail 이벤트 상세 분석 → AWSService에 의해 요청이 발생했음을 확인.
  • S3 버킷 설정 확인 → 서버 액세스 로깅(Server Access Logging) 이 활성화되어 있었음.
  • 퍼블릭 액세스 차단 설정을 강화했으며, 이후 AccessDenied 발생 시작됨.

원인 분석 (Root Cause)

  • S3 Server Access Logging 기능은 S3 내부적으로 각 요청에 대한 로그 파일을 S3 버킷에 쓰는 방식으로 작동함.

image

  • 이때 로그 대상 버킷과 원본 버킷이 동일하면, 해당 PutObject 요청도 다시 로그로 기록되며 순환 발생 가능성 존재.
  • 퍼블릭 액세스 차단 설정을 "모두 차단"으로 바꾼 경우, AWS 내부 서비스(AWSService) 요청도 퍼블릭으로 간주되어 차단됨.
  • 그 결과 S3에서 자기 자신에게 로그를 쓰려는 요청이 차단되면서 AccessDenied가 발생하게 됨.

관련 로그 / 명령어 결과 (Logs / Outputs)

{
  "eventSource": "s3.amazonaws.com",
  "eventName": "PutObject",
  "userIdentity": {
    "type": "AWSService",
    "invokedBy": "s3.amazonaws.com"
  },
  "sourceIPAddress": "s3.amazonaws.com",
  "userAgent": "s3.amazonaws.com",
  "errorCode": "AccessDenied",
  "requestParameters": {
    "bucketName": "s3-prod-ongi",
    "key": "2025-05-19-07-20-30-7FC49A2AB0EFD5C3"
  }
}

해결 방법 (Resolution)

  • S3 서버 액세스 로깅 기능을 일시적으로 비활성화하거나, 로그 저장용 별도 버킷을 생성하여 순환 참조를 방지.
  • 퍼블릭 액세스 차단 정책을 사용할 때는, S3 내부 서비스(AWSService)에 필요한 예외를 허용하거나 별도 로그 버킷 구성 필요.

후속 조치 (Next Actions)

  • S3 버킷 로깅 구조 분리 (예: s3-prod-ongi-logs 등 별도 버킷 생성)
  • CloudTrail와 S3 접근 정책에 대한 문서화 및 변경 이력 관리
  • 로그 저장 및 접근 권한에 대한 IAM Role 및 정책 재검토

여전히 남는 의문점

  • 왜 내가 활동하는 시간이 아닌 시간에 파일이 생겼을까?
    • 자동으로 생김 → s3에서 스스로 자신(s3)에게 접근해서 로그를 남기는(put 요청) 과정이 자동으로 생김