← 목록

S3 퍼블릭 액세스 차단 가이드: Block Public Access 설정과 위험도 판단

퍼블릭 차단 4가지 옵션이 각각 무엇을 막는지, 무엇은 막지 않는지. 켤 때 가장 많이 받는 질문에 답하기 위해 정리한 기준

2026-04-06AWSS3SecurityDevOps

들어가며

Config 규칙 점검에서 퍼블릭 액세스 차단이 꺼진 버킷이 걸렸다. 켜면 되는 일인데, 막상 켜려고 하면 늘 같은 질문이 돌아온다. "그러면 지금 쓰는 게 안 되는 거 아니냐."

이 질문에 "괜찮을 겁니다"라고 답할 수는 없었다. 퍼블릭 차단이 정확히 어떤 요청을 막고 어떤 요청은 그대로 두는지 확인해야 켜자고 말할 수 있었다. 그래서 정리한 글이다.


퍼블릭 액세스란

S3 버킷이 인터넷에 공개되어 있어서, AWS 계정 외부의 누구나 파일을 읽거나 쓸 수 있는 상태다. 여기서 중요한 건 "인증 없이"다. 자격증명을 전혀 제시하지 않은 익명 요청이 통과하는 상태를 말한다.

퍼블릭 접근이 가능해지는 경로는 두 가지다.

두 경로가 따로 있다는 점이 차단 옵션이 네 개인 이유다.


Block Public Access란

퍼블릭 접근을 원천 차단하는 안전장치다. 버킷 정책이나 ACL로 퍼블릭 접근을 허용하더라도 이 설정이 켜져 있으면 차단된다.

순서로 보면 이렇다.

요청 도착
   │
   ▼
[Block Public Access]   ← 여기서 먼저 걸린다
   │  (퍼블릭으로 판정되는 요청이면 거부)
   ▼
[버킷 정책 / ACL / IAM 권한 평가]
   │
   ▼
허용 또는 거부

정책보다 앞에 서 있기 때문에, 누군가 실수로 퍼블릭 정책을 붙여도 그 정책이 효력을 갖지 못한다. 정책을 잘 쓰는 것과는 별개로 켜두는 이유가 이것이다.

4가지 차단 옵션

옵션막는 대상시점
BlockPublicAcls퍼블릭 ACL을 새로 붙이는 요청설정 시도 시
IgnorePublicAcls이미 붙어 있는 퍼블릭 ACL요청 평가 시
BlockPublicPolicy퍼블릭 버킷 정책을 새로 붙이는 요청설정 시도 시
RestrictPublicBuckets퍼블릭 정책이 있는 버킷에 대한 퍼블릭 및 교차 계정 접근요청 평가 시

두 개씩 짝을 이룬다. Block으로 시작하는 옵션은 앞으로 생길 설정을 막고, Ignore와 Restrict는 이미 있는 설정을 무력화한다. 그래서 네 개를 다 켜야 "지금도 안전하고 앞으로도 안전한" 상태가 된다. 두 개만 켜면 기존 설정은 살아 있거나, 새 설정을 막지 못하거나 둘 중 하나가 된다.


무엇이 막히고 무엇은 그대로인가

실제로 가장 많이 받은 질문이 여기에 있다. 퍼블릭 차단은 인증 없이 들어오는 요청만 막는다. 자격증명이나 서명이 붙은 요청은 대상이 아니다.

퍼블릭 차단이 영향을 주는 요청과 주지 않는 요청

접근 방식퍼블릭 차단의 영향이유
브라우저에서 URL로 직접 열기 (익명)차단됨자격증명 없는 요청
ECS Task Role, EC2 Instance Role영향 없음IAM 인증 요청
AWS CLI / SDK (자격증명 사용)영향 없음IAM 인증 요청
Presigned URL영향 없음발급자의 서명이 붙은 요청
CloudFront OAC / OAI영향 없음CloudFront가 IAM 주체로 접근

정리하면 사람이 "이 주소 아무나 열 수 있게 해주세요"라고 만들어둔 경로만 끊긴다. 서비스가 쓰는 경로는 전부 인증을 거치기 때문에 그대로 동작한다. 이걸 표로 보여주고 나서야 논의가 빨라졌다.


상태별 위험도

퍼블릭 차단버킷 정책실제 상태위험도
활성정책 없음안전 + 실수 방지안전
활성퍼블릭 정책 있음차단됨 (정책 무시)안전
비활성정책 없음현재는 안전, 실수 방지 장치 없음주의
비활성퍼블릭 정책 있음누구나 접근 가능위험

"퍼블릭 차단 비활성 + 정책 없음" 상태를 눈여겨볼 만하다. 지금 당장 공개된 건 아니지만, 누군가 정책 한 줄을 붙이는 순간 공개된다. 사고의 조건이 이미 갖춰진 상태라서 Config 규칙이 이걸 잡아낸다.


확인 방법

퍼블릭 액세스 차단 확인

  1. S3에서 버킷을 열고 "권한(Permissions)" 탭으로 이동
  2. "퍼블릭 액세스 차단" 섹션 확인
  3. 4개 항목이 전부 "켜짐"이면 안전

버킷 정책 확인

같은 "권한" 탭의 "버킷 정책"에서 "Principal": "*" 또는 "Principal": {"AWS": "*"}가 있으면 퍼블릭이다. 목록에서 한눈에 보려면 버킷 목록 화면의 "액세스" 열을 보면 되는데, 여기에 "퍼블릭"이라고 표시된 버킷이 우선 확인 대상이다.


조치 방법

퍼블릭 접근이 필요 없는 버킷 (대부분)

  1. S3에서 버킷의 "권한" 탭으로 이동
  2. "퍼블릭 액세스 차단"에서 "편집" 클릭
  3. 4개 항목을 전부 체크하고 "변경 사항 저장"
  4. 확인 문구에 confirm 입력 후 저장

기존 동작에는 영향이 없다. 앞의 표에서 본 대로 IAM 인증 접근, Presigned URL, CloudFront OAC는 모두 그대로다.

퍼블릭 접근이 의도적으로 필요한 버킷

정적 웹사이트 호스팅이나 외부 파일 공유처럼 공개가 목적인 버킷이라면, Config 규칙에서 예외 리소스로 등록해 미준수 집계에서 제외한다. 이때 왜 예외인지를 같이 적어두는 게 중요하다. 이유가 없는 예외는 다음 점검 때 다시 판단 대상이 되고, 매번 같은 논의를 반복하게 된다.

한 가지 더 확인할 것은, 정말 퍼블릭이어야 하는지다. 외부 공유가 목적이라면 Presigned URL로, 웹 배포가 목적이라면 CloudFront OAC로 대체할 수 있는 경우가 많다. 둘 다 버킷을 공개하지 않고도 같은 결과를 낸다.


주의사항


정리


배운 점

보안 작업에서 필요한 자료는 위험의 크기가 아니라 영향 범위였다. 퍼블릭 차단을 켜자고 설득할 때 가장 효과가 있었던 건 유출 사례가 아니라, 무엇이 영향을 받지 않는지 적은 표였다. 막는 범위를 정확히 아는 사람만 막을 수 있다. 같은 순서를 EC2 IMDSv2 보안 강화에서도 밟았다. 거기서는 MetadataNoToken 메트릭으로 영향도를 먼저 세어봤다.

옵션이 넷으로 나뉜 데는 이유가 있었다. 처음엔 왜 하나가 아닌가 싶었는데, 앞으로 생길 설정을 막는 것과 이미 있는 설정을 무력화하는 건 다른 동작이었다. 설정 이름을 그대로 외우기보다 무엇을 언제 막는지로 묶어두니 기억에 남았다.

켜는 것보다 켜진 상태를 유지하는 게 어렵다. 한 번 켜도 새 버킷이 생기고 예외가 쌓인다. 그래서 이 작업의 마무리는 콘솔이 아니라 Config 규칙이었다. 전체 감시 구성은 AWS Config 기반 인프라 규정 준수 모니터링에 정리했다.


이어 읽기