퍼블릭 액세스란
S3 버킷이 인터넷에 공개되어 있어서, AWS 계정 외부의 누구나 파일을 읽거나 쓸 수 있는 상태입니다.
퍼블릭 접근이 가능해지는 경로는 두 가지:
- 버킷 정책(Bucket Policy)에
"Principal": "*"설정 - 버킷 ACL에 퍼블릭 읽기/쓰기 권한 부여
Block Public Access란
퍼블릭 접근을 원천 차단하는 안전장치입니다. 버킷 정책이나 ACL로 퍼블릭 접근을 허용하더라도 이 설정이 켜져 있으면 차단됩니다.
4가지 차단 옵션
| 옵션 | 설명 |
|---|---|
| BlockPublicAcls | 새로운 퍼블릭 ACL 추가 차단 |
| IgnorePublicAcls | 기존 퍼블릭 ACL 무시 |
| BlockPublicPolicy | 새로운 퍼블릭 버킷 정책 추가 차단 |
| RestrictPublicBuckets | 퍼블릭 정책이 있는 버킷의 퍼블릭/교차 계정 접근 제한 |
4개 전부 켜는 것이 권장됩니다.
상태별 위험도
| 퍼블릭 차단 | 버킷 정책 | 실제 상태 | 위험도 |
|---|---|---|---|
| 활성 | 정책 없음 | 안전 + 실수 방지 | 안전 |
| 활성 | 퍼블릭 정책 있음 | 차단됨 (정책 무시) | 안전 |
| 비활성 | 정책 없음 | 현재는 안전, 실수 방지 장치 없음 | 주의 |
| 비활성 | 퍼블릭 정책 있음 | 누구나 접근 가능 | 위험 |
"퍼블릭 차단 비활성 + 정책 없음" 상태는 지금 당장 위험하지는 않지만, 누군가 실수로 퍼블릭 정책을 추가하면 즉시 공개됩니다. Config 규칙에 걸리는 이유가 이것입니다.
확인 방법
퍼블릭 액세스 차단 확인
- S3 → 버킷 클릭 → "권한(Permissions)" 탭
- "퍼블릭 액세스 차단" 섹션
- 4개 항목이 전부 "켜짐"이면 안전
버킷 정책 확인
같은 "권한" 탭 → "버킷 정책" 섹션에서 "Principal": "*" 또는 "Principal": {"AWS": "*"}가 있으면 퍼블릭입니다.
조치 방법
퍼블릭 접근이 필요 없는 버킷 (대부분)
- S3 → 버킷 → "권한" 탭
- "퍼블릭 액세스 차단" → "편집"
- 4개 항목 전부 체크 → "변경 사항 저장"
- 확인 문구에
confirm입력 → 저장
기존 동작에 영향 없습니다. AWS SDK/CLI를 통한 IAM 인증 접근은 퍼블릭 차단과 무관합니다.
퍼블릭 접근이 의도적으로 필요한 버킷
정적 웹사이트 호스팅, 외부 파일 공유 등의 경우 Config 규칙에서 예외 리소스로 등록하여 미준수 집계에서 제외합니다.
주의사항
- 퍼블릭 액세스 차단은 버킷 레벨과 계정 레벨 두 곳에서 설정 가능
- 계정 레벨에서 차단하면 모든 버킷에 일괄 적용됨
- 퍼블릭 차단을 켜도 CloudFront OAC/OAI를 통한 접근은 영향 없음 (퍼블릭이 아닌 IAM 기반 접근)
- 퍼블릭 차단을 켜도 presigned URL은 정상 동작 (서명된 요청이라 퍼블릭이 아님)
정리
- S3 퍼블릭 액세스 차단은 실수로 인한 데이터 공개를 원천 방지하는 안전장치
- 4개 옵션 전부 활성화가 권장되며, 기존 IAM 인증 접근에는 영향 없음
- CloudFront OAC, presigned URL 등 정상적인 접근 방식은 퍼블릭 차단과 무관
- Config 규칙
s3-bucket-public-read/write-prohibited로 지속 감시