[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: AWSService
및 invokedBy: s3.amazonaws.com
으로 기록됨.
- 요청의 IP 및 UserAgent 또한
s3.amazonaws.com
으로 나타남.
- 해당 요청은 AccessDenied 에러와 함께 실패함.

기대 결과 (Expected Behavior)
- 서버가 종료된 이후에는 S3에 어떠한 요청도 발생하지 않아야 하며,
AccessDenied
와 같은 에러가 CloudTrail에 기록되지 않아야 한다.
시도한 해결 방법 (What I Tried)
- 서버 로그 확인 → 서버는 이미 수 시간 전에 종료됨을 확인.
- CloudTrail 이벤트 상세 분석 →
AWSService
에 의해 요청이 발생했음을 확인.
- S3 버킷 설정 확인 → 서버 액세스 로깅(Server Access Logging) 이 활성화되어 있었음.
- 퍼블릭 액세스 차단 설정을 강화했으며, 이후
AccessDenied
발생 시작됨.
원인 분석 (Root Cause)
- S3 Server Access Logging 기능은 S3 내부적으로 각 요청에 대한 로그 파일을 S3 버킷에 쓰는 방식으로 작동함.

- 이때 로그 대상 버킷과 원본 버킷이 동일하면, 해당 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 요청) 과정이 자동으로 생김