[AWS Official Document](https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/cors.html) - 웹 브라우저에서 **서로 다른 출처(Origin) 간의 리소스 요청을 허용하기 위한 정책** - 즉, 프론트엔드(다른 도메인)에서 S3 리소스에 접근할 수 있도록 **명시적으로 허용하는 설정** ### 특징 - **Cross-Origin 제어** - 브라우저는 기본적으로 다른 도메인 요청을 차단 - CORS 설정을 통해 특정 Origin만 허용 가능 - **브라우저 레벨 정책** - 서버가 아니라 브라우저에서 enforced됨 - Postman, curl에서는 영향 없음 - **Preflight 요청 (사전 검사)** - 실제 요청 전에 OPTIONS 요청을 보내 허용 여부 확인 - 조건 맞으면 실제 요청 진행 - **버킷 단위 설정** - S3에서는 버킷에 CORS 규칙(JSON) 설정 - **조건 기반 허용** - Origin, HTTP Method, Header 기준으로 허용 여부 결정 ### 주요 설정 요소 - **AllowedOrigins** - 요청을 허용할 도메인 - 예: `https://example.com`, `*` - **AllowedMethods** - 허용할 HTTP 메서드 - 예: GET, PUT, POST, DELETE - **AllowedHeaders** - 허용할 요청 헤더 - **ExposeHeaders** - 클라이언트에 노출할 응답 헤더 - **MaxAgeSeconds** - preflight 결과 캐싱 시간 ### 동작 흐름 1. 브라우저 → S3에 preflight 요청 (OPTIONS) 2. S3 → CORS 규칙 확인 3. 조건 일치 시 허용 응답 4. 브라우저 → 실제 요청 수행 ### 사용 예시 - React/Vue 등 프론트엔드에서 **S3 이미지 직접 로드** - 프론트엔드 → S3로 **파일 업로드 (PUT)** - 정적 웹사이트에서 다른 도메인의 S3 리소스 접근 ### 한계 - **보안 기능이 아님** - 단순히 브라우저 요청 허용 여부만 결정 - **서버 간 통신에는 영향 없음** - 백엔드 → S3 요청은 CORS와 무관 - **설정 잘못하면 전체 공개 위험** - `AllowedOrigins: "*"` 사용 시 주의 필요