AWS S3 CORS 설정: 심층 분석
숙련된 AWS 베테랑이든 이제 막 시작했든, S3의 CORS 설정을 마스터하면 웹 애플리케이션의 기능성과 보안을 크게 향상시킬 수 있다.

안녕하세요, 클라우드 열정가 여러분! 오늘은 AWS S3 CORS 설정의 세계로 깊이 들어가 본다. 처음에는 어렵게 느껴질 수 있지만, 이해하면 매우 보람 있는 주제다. 숙련된 AWS 베테랑이든 이제 막 시작했든, S3의 CORS 설정을 마스터하면 웹 애플리케이션의 기능성과 보안을 크게 향상시킬 수 있다.
CORS란 무엇인가?
Cross-Origin Resource Sharing(CORS)은 버킷의 리소스가 애플리케이션이 호스팅된 도메인과 다른 도메인에서 어떤 방식으로 접근될 수 있는지 지정할 수 있게 해주는 보안 기능이다. Amazon S3의 맥락에서는 버킷의 파일이 다른 웹사이트와 어떻게 공유되는지를 제어한다.
CORS가 필요한 이유
example.com에 호스팅된 웹 애플리케이션이 S3 버킷 myawesomebucket.s3.amazonaws.com에서 일부 에셋을 가져와야 한다고 상상해보자. 적절한 CORS 설정이 없으면, 브라우저는 Same-Origin Policy로 인해 이러한 요청을 차단할 것이다. 이는 한 출처의 문서나 스크립트가 다른 출처의 리소스와 어떻게 상호작용할 수 있는지 제한하는 중요한 보안 메커니즘이다.
S3에 CORS 설정하기
이제 직접 S3 버킷에 CORS를 구성해보자. AWS는 이 과정을 사용자 친화적으로 만들었으며, AWS Management Console, AWS CLI, SDK를 통해 수행할 수 있다. 접근성을 위해 Management Console 방식을 중심으로 설명한다:
- AWS Management Console에 로그인: S3 서비스 페이지로 이동.
- 버킷 선택: CORS를 설정할 버킷 클릭.
- CORS 구성 찾기: Permissions 탭을 클릭한 다음 "Cross-origin resource sharing (CORS)" 섹션을 찾는다.
- CORS 구성 편집: "Edit" 버튼을 클릭하면 CORS 규칙을 정의할 수 있는 JSON 편집기가 표시된다.
- 규칙 정의: 여기에서 어떤 출처가 리소스에 접근할 수 있는지, 어떤 HTTP 메서드가 허용되는지, 그리고 기타 세부 사항을 지정한다. 예를 들어:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "POST"],
"AllowedOrigins": ["https://example.com"],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]이 규칙은 https://example.com에서 GET과 POST 요청을 모두 허용하고, 모든 헤더를 수락하며, 어떤 헤더도 노출하지 않는다. 또한 캐시 수명을 3000초로 설정한다.
구성 저장: 원하는 규칙을 설정한 후 "Save changes"를 클릭.
CORS 구성 요소 설명
- AllowedOrigins: 버킷에 요청을 보낼 수 있는 출처를 지정. 모든 출처에는 ["*"] 사용.
- AllowedMethods: 사용할 수 있는 HTTP 메서드 나열 (GET, PUT, POST, DELETE, HEAD).
- AllowedHeaders: preflight
OPTIONS요청에서 허용되는 헤더 표시. - ExposeHeaders: 클라이언트 애플리케이션의 스크립트에서 접근 가능한 헤더 지정.
- MaxAgeSeconds: preflight 요청 결과를 캐시할 수 있는 기간 정의.
사용 사례 예시
퍼블릭 CDN
S3 버킷을 퍼블릭 웹사이트의 CDN으로 사용하는 경우:
[
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET"],
"MaxAgeSeconds": 86400
}
]이 구성은 모든 도메인이 GET 요청을 사용하여 버킷에서 리소스를 가져올 수 있도록 허용하며, 긴 캐시 기간을 설정한다.
제한된 접근
example.com에 호스팅된 애플리케이션만 버킷에 POST 데이터를 전송할 수 있도록 하려면:
[
{
"AllowedOrigins": ["https://example.com"],
"AllowedMethods": ["POST"],
"AllowedHeaders": ["Content-Type"],
"MaxAgeSeconds": 600
}
]이 구성은 엄격하게 example.com에서의 POST 요청만 허용하며, "Content-Type" 헤더만 수락한다.
일반적인 함정과 팁
- 디버깅: 브라우저 도구나
curl과 같은 도구를 사용하여 CORS 설정을 테스트하고 디버깅하라. 변경 사항이 전파되는 데 몇 분이 걸릴 수 있다는 점을 기억하라. - 보안: 가능한 한 출처와 메서드를 제한하라. 출처에 "*"를 사용하거나 모든 메서드를 허용하면 버킷이 불필요한 위험에 노출될 수 있다.
- 테스트: 프로덕션에 푸시하기 전에 스테이징 환경에서 CORS 구성을 철저히 테스트하여 예상치 못한 동작을 방지하라.
결론
AWS S3 CORS 설정을 마스터하는 것은 안전하고 효율적인 웹 애플리케이션을 개발하는 데 필수적이다. 이러한 설정을 이해하고 구현함으로써 S3 리소스가 의도한 대로 정확히 접근되도록 보장하고, 데이터를 보호하며, 애플리케이션의 사용자 경험을 최적화할 수 있다.
CORS 마스터의 핵심은 실험과 테스트라는 것을 기억하라. 소매를 걷어붙이고 AWS 콘솔로 뛰어들어 설정을 조정하기 시작하라. 즐거운 코딩 되길!
Ercan의 다른 글
같은 저자, 다른 영역의 사이트 두 개.