Please enable JavaScript.
Coggle requires JavaScript to display documents.
Pre-signed URL 이미지 업로드, 1. 클라이언트 => 서버
이미지 업로드를 위한 presigned URL 요청, 2…
Pre-signed URL 이미지 업로드
개념 및 개요
Presigned URL이란?
객체 스토리지에 대한 특정 작업(GET, PUT, POST 등)을 수행할 권한이 포함된 임시 URL.
URL에는 요청의 무결성을 검증하기 위한 서명 정보가 포함되어, 클라이언트가 서버의 중계 없이도(별도의 서버 자격 증명 없이도) 안전하게 객체 스토리지에 접근하거나 이미지를 전송할 수 있음. 만료 시간이 정해져 있어 정해진 기간이 지나면 자동으로 접근이 불가능해짐.
구성 요소
- HTTP 요청 메서드
- 버킷 명
- 객체 키
- 만료 시간
- 서명 정보
주요 클라우드 벤더
- AWS S3 (Signature V4 / Presigned POST)
- Google Cloud Storage (Signed URL V4)
- Azure Blob Storage (Account / Service / User Delegation SAS)
사용 시나리오
웹/모바일 클라이언트가 대용량 이미지를 직접 스토리지에 업로드 해야할 때, 서버의 부하를 줄이기 위해 사용
3자 제공자(third-party)에게 임시 업로드 권한을 부여해야 하지만, 서버 자격 증명을 노출할 수 없는 경우에 사용
동작 과정
-
클라이언트가 이미지 업로드를 위한 presigned URL 발급을 서버를 통해 요청하면 객체 스토리지는 다시 서버를 통해 presigned URL을 전달한다.
클라이언트는 해당 URL을 사용해 PUT 요청으로 이미지를 업로드한다.
이때, 서버는 presigned URL 발급을 위한 과정에만 참여하게 된다.
특징
사용상의 이점
서버 부하 및 네트워크 비용 절감 (리소스 효율성)
클라이언트가 대용량의 이미지를 직접 객체 스토리지로 업로드 하면서, 애플리케이션 서버의 중계 부담이 사라지고, 네트워크 대역폭 소비 및 관련 비용을 절감할 수 있다
자격 증명 비노출
URL 자체에 서명이 포함되어 있어, 사용자는 AWS 자격 증명이나 API 키 없이도 권한이 한정된 요청을 수행할 수 있다
권한 제어의 세분화
Presigned URL 생성 시, GET / PUT / POST 등 HTTP 메서드 뿐만 아니라 객체 키, Content-Type, ACL, 메타데이터 등 세부 권한을 지정할 수 있어 최소 권한 원칙을 적용하기 용이하다
만료 시간 통제로 인한 보안성 향상
URL 생성 시, 만료 기간을 수 초 ~ 최대 수 일까지 설정 가능하며, 요청이 만료되면 자동으로 접근이 차단되어 보안성이 우수하다
손쉬운 서드파티 연동
서버 자격 증명을 전달하지 않고도 외부 파트너나 서버리스 함수(Lambda, Cloud Functions 등)가 안전하게 업로드 권한을 얻어 이미지를 전송하도록 설계할 수 있다
취약점 및 위험
URL 유출 위험
Presigned URL은 일종의 Bearer Token이므로, URL이 노출되면 만료 전까지 누구나 반복해서 사용할 수 있다
버킷 정보 노출
URL에 버킷명이나 객체 키가 평문으로 노출되므로, 내부 구조파악이나 무차별 대입 공격(brute-force)에 활용될 수 있다
장기 유효화에 따른 위험
만료 시간이 길면 그만큼 공격자가 URL을 획득했을 때 악용 가능성이 커지므로, 가능한 최소 시간(수 분 이내)으로 설정이 권장된다
CORS 및 CSRF 취약
잘못된 CORS 설정(허용 오리진 과다, 메서드 과다 허용)으로 인해 악성 사이트에서 사용자의 브라우저를 통해 URL을 호출할 수 있으며, CSRF 토큰 없이 S3에 요청이 전달될 수 있다
악성 파일 업로드 및 XSS
공격자는 악성 SVG / XML 파일을 업로드해 <img> 태그를 통한 외부 스크립트 로드 및 실행을 유도함으로써 클라이언트 측 XSS를 발생시킬 수 있다
Content-Type 우회 및 MIME 스니핑
서버가 Content-Type 헤더만으로 파일 형식을 제한해도, 브라우저의 MIME 스니핑으로 우회할 수 있고, 또 PUT 방식에서는 서버 측 검증 없이 임의의 파일이 업로드 될 수 있다
보안 권장 대책
버킷 정책 및 IP/VPC 조건부 접근
- 버킷 정책 또는 SAS 조건에 허용된 IP 범위를 제한
- VPC 엔드포인트 제한을 추가
- WAF를 통해 접근을 제한
재사용 방지
- URL 재사용을 막기 위해 만료 또는 일회용 정책을 적용
짧은 만료 시간
- 짧은 유효기간 설정, nonce 삽입, IP 기반 조건부 접근 제한 적용이 필요
- 필요하다면 재발급 로직을 구현
모니터링 및 로깅
- S3 접근 로그, CloudTrail, WAF 등을 활용해 presigned URL 사용 패턴을 감시하고 이상 징후 탐지
HTTP 필수화 / 강제화
모든 presigned URL 요청은 HTTPS를 통해 전송해, 중간자 공격을 방지
무결성 검증 / 파일 검증 및 사이즈 제한
- 업로드 후 MD5 해시를 확인해 데이터가 변조되지 않았음을 검증
- 클라이언트/서버 양쪽에서 파일 유형(Content-Type)과 크기 검증
-
-
-
-
-
-