S3 보안 사고의 대부분은 설정 실수에서 온다. 2017년부터 2023년까지 수십 건의 대규모 데이터 유출이 "잘못 설정된 S3 버킷"으로 인해 발생했다. 미국 군 기밀 문서, 대형 항공사 고객 데이터, 수백만 명의 의료 기록이 Public으로 열린 S3 버킷에서 노출됐다. 이 중 많은 경우 버킷 정책에 Allow를 주면서 Block Public Access를 끈 것이 원인이었다.
이 글에서는 S3 접근 제어의 5개 계층이 어떻게 평가되는지 내부 로직을 따라가고, 각 암호화 방식의 키 관리 구조와 실제 차이를 다룬다. 또한 VPC Endpoint 정책으로 데이터 유출을 방지하는 패턴과, 멀티 테넌트 환경에서 S3 Access Points를 활용하는 방법까지 다룬다.
S3가 처음 출시됐을 때(2006년), 접근 제어는 ACL(Access Control List) 하나뿐이었다. S3 버킷과 객체에 누가 접근할 수 있는지를 XML로 정의했다. 이것이 AWS 최초의 접근 제어 메커니즘이었다.
2008년 IAM(Identity and Access Management)이 출시되면서 사용자와 그룹에 정책을 부여하는 방식이 추가됐다. S3는 이제 IAM 정책도 지원하기 시작했다. 그러나 IAM 정책은 누가(identity) 무엇을 할 수 있는지를 정의하고, ACL은 특정 버킷/객체에 누구의 접근을 허용하는지를 정의했다