- AWS가 S3 버킷스쿼팅(bucketsquatting) 문제를 해결하기 위한 새로운 계정 기반 네임스페이스 보호 기능을 도입함
- 새 네임스페이스는 <prefix>-<accountid>-<region>-an 형식으로, 동일한 계정만 해당 이름의 버킷을 생성할 수 있음
- 다른 계정이 동일한 이름을 사용하려 하면 InvalidBucketNamespace 오류가 발생하며, 잘못된 리전 지정 시에도 동일한 오류가 반환됨
- 이 네임스페이스는 기본적으로 사용이 권장되며, 조직 정책(SCP)에서 s3:x-amz-bucket-namespace 조건 키로 강제 적용 가능
- 기존 버킷에는 소급 적용되지 않지만, 새 버킷에는 강력한 보호를 제공해 S3 보안 구조의 근본적 개선을 의미함
Bucketsquatting 문제 개요
-
Bucketsquatting(또는 Bucketsniping) 은 AWS S3에서 버킷 이름이 전역적으로 고유하다는 점을 악용하는 공격 형태
- 버킷이 삭제되면 이름이 다시 사용 가능해져, 공격자가 동일한 이름으로 새 버킷을 등록할 수 있음
- 이로 인해 민감한 데이터 접근이나 서비스 중단 위험이 발생할 수 있음
- 조직들이 흔히 myapp-us-east-1과 같은 예측 가능한 네이밍 규칙을 사용해 공격 노출 가능성이 높았음
- AWS 내부 팀도 이 문제의 영향을 받아, 약 10년간 AWS 보안팀과 협력해 해결 방안을 모색해 왔음
새로운 S3 네임스페이스 도입
- AWS는 문제 해결을 위해 계정별 네임스페이스(account namespace) 개념을 도입
- 형식: <prefix>-<accountid>-<region>-an
- 예시: myapp-123456789012-us-west-2-an
- 이 네임스페이스는 해당 계정만 해당 이름의 버킷을 생성할 수 있도록 제한
- 다른 계정이 동일 이름을 생성하면 InvalidBucketNamespace 오류 발생
- 버킷 이름의 리전이 실제 리전과 불일치할 경우에도 동일 오류 반환
- AWS는 이 네임스페이스를 모든 새 버킷에 기본적으로 사용할 것을 권장
- 기존 네임스페이스(.mrap, --x-s3, -s3alias)와 달리, 이번에는 보안 목적의 일반 사용자용 네임스페이스로 도입됨
정책 적용 및 관리
- 보안 관리자는 s3:x-amz-bucket-namespace 조건 키를 사용해 조직 전체 정책(SCP) 으로 네임스페이스 사용을 강제할 수 있음
- 기존 버킷이나 네임스페이스 없는 템플릿에는 자동 적용되지 않음
- 기존 버킷을 보호하려면 새 네임스페이스 형식으로 버킷을 만들고 데이터를 마이그레이션해야 함
- 이 조치로 인해 버킷스쿼팅은 사실상 “사라지는 중”이며, 새 버킷에는 완전한 보호 제공
다른 클라우드 제공업체의 접근 방식
-
Google Cloud Storage(GCS) 는 이미 도메인 이름 검증 기반 네임스페이스를 사용
-
myapp.com과 같은 도메인 형식 버킷은 도메인 소유자만 생성 가능
- 비도메인 형식 버킷에서는 여전히 버킷스쿼팅 가능성 존재
-
Azure Blob Storage는 스토리지 계정명 + 컨테이너명 구조를 사용
- 최대 24자 제한으로 네임스페이스가 좁아, 동일한 문제에 더 취약할 수 있음
결론 (tl;dr)
- AWS S3에 새로운 계정 리전 네임스페이스가 도입됨
- 이 네임스페이스는 버킷스쿼팅 공격을 방지하며, 새 버킷 생성 시 반드시 사용하는 것이 권장됨
- 기존 버킷은 자동 보호되지 않으므로, 필요한 경우 데이터 마이그레이션을 통해 보호 강화 필요