[AWS] S3 안전하게 사용하기 (1) 솔루션 선정

Falcon·2022년 8월 30일
1

aws

목록 보기
25/35
post-thumbnail

🎯 Goals

  • 퍼블릭 버킷 에 대해 DDoS 급 파일 다운로드 요청 방지
  • IP 기반으로 특정 사용자와 동일 AWS EC2 에서만 S3 오브젝트 업로드 가능
  • S3 오브젝트 다운로드시 인가 로직 추가
    (ex. JWT)

가장 중요한 것은 과도한 클라우드 비용이 발생을 방지하는 것.
클라우드 비용 폭탄이 일부 파일 유출보다 더 큰 문제.

1. CloudFront

Contents Delivery Network (CDN) 역할

When to use

  • S3 버킷이 Public 상태 일 때
    S3 엔드포인트를 숨기고(Private) CloundFront URI 로만 접근 가능하게 할 수 있다.
  • 가독성이 떨어지는 S3 주소를 그대로 사용하고 싶지 않을 때
    EndPoint 주소를 Route53 과 연결하여 가독성 있는 주소로 변경 가능하다.

2. WAF

Web Application Firewall

⚠️ S3 에 WAF 를 적용하고 싶다면, CloudFront 와 함께 사용해야만 한다.

⚠️WAF 는 단위 기간 동안 총 10,000개 IP 주소만 접근 제한할 수 있다.
높은 rate 의 요청이 순간적으로 10,000개가 넘어가면 10,000개 까지만 접근 제한하고 그 넘어의 IP 는 막아내지 못한다.
(추가 비용은 없음)

When to use

  • 특정 IP 주소에서만 리소스 접근이 가능하게 할 때
  • 특정 IP 주소의 과도한 Request 를 방지하고자 할 때

헤더 문자열 검사는 "우리 서비스 사용자" 로는 제한 가능한데 불특정 사용자 다수에겐 의미가 없음.. (인증이 아니라 인가가 필요함)

=> 헤더 문자열 검사를 '업로드' 에만 하면 BJ, 관리자에게만 헤더 문자열을 줌으로써 인가 가능.

ProsCons
IP 없이 특정 사용자들에게만 업로드 권한을 부여할 수 있음동적으로 임시 문자열 값을 변경하기 어렵기 때문에
임시 비밀번호로는 부적절

3. Lambda

오로지 파일 다운로드만 수행하는 람다 콜 (JWT 검증만 람다 -> 회원 등급 검사) -> 파일 다운로드.
혹은 람다 호출시 임시 비밀번호를 입력하게끔 강제하여 인증된 사람만 다운로드 가능.

When to use

  • 인증/인가에 커스터마이징 된 키 값을 사용할 때
    (ex. JWT)

단점

  • 리전별 concurrency rate limit (1,000)
  • 파일 확장자를 미리 알기 어려움
    => 브라우저별 대응이 필요함.

4. S3 pre-signed URLs

The pre-signed URLs are valid only for the specified duration.

When to use

  • 일정 시간동안만 URL 로 다운로드를 허용하고자 할 때

단점

  • 시간이 지나면 파일을 받을 수 없기 때문에
    쪽지 기반의 리워드가 제한됨.
  • Public 한 리소스에 사용할 수 없음.

📝 결정

  • ✅ 퍼블릭 버킷 에 대해 DDoS 급 파일 다운로드 요청 방지
  • ✅ IP 기반으로 특정 사용자와 동일 AWS EC2 에서만 S3 오브젝트 업로드 가능
  • ❌ S3 오브젝트 다운로드시 인가 로직 추가

중요한 2가지 요구사항을 만족시키는 CloudFront + WAF 를 사용하기로 했다.

🔗 Reference

profile
I'm still hungry

0개의 댓글