AWS DVA-C02 #29 CORS
AWS DVA-C02 #29 CORS — #개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 참고: ExamPotic Di...
#개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
요구사항 분석
- 기존 상황
- 클라이언트 사이드 웹앱 1개 → S3에서 호스팅
- CloudFront 도메인: https://www.example.com
- 목표
- 추가로 3개의 웹앱을 각각 별도 S3 버킷에서 호스팅
- 공통 리소스(JS·웹폰트)는 중앙 S3 버킷에서 제공
- 문제
-
- 브라우저에서 중앙 S3 버킷의 JS·폰트를 로드할 때 차단 발생
보기 분석
A. 중앙 S3 버킷에 접근할 수 있는 Access Point를 4개 만들고, 각 웹 애플리케이션 버킷에 해당 Access Point를 연결한다.
B.중앙 S3 버킷에 접근을 허용하는 버킷 정책을 만들고, 해당 정책을 중앙 S3 버킷에 적용한다
C. 중앙 S3 버킷에 접근을 허용하는 CORS(Cross-Origin Resource Sharing) 구성을 만들고, 이를 중앙 S3 버킷에 추가한다.
D. 중앙 S3 버킷의 무결성 검증을 위해 Content-MD5 헤더를 생성하고, 각 웹 애플리케이션 요청에 이 헤더를 포함한다.
👉 한줄 솔루션
- 중앙 S3 버킷의 CROS 정책에 각 웹앱 오리진을 허용하라
- CloudFront 사용시 CORS 헤더 전달 설정도 함께 구성하라.
A.
❌ S3 Access Point는 대규모 데이터 셋에 대한 세분화된 접근 제어를 제공하지만, 브라우저 CORS 차단과는 무관하다.
B.
❌. 버킷 정책은 IAM 권한 제어, CORS와 무관하다.
C.
✅ 중앙 버킷에서 허용할 오리진(도메인)을 명시하면 중앙 버킷의 컨텐츠를 copy가능
D.
❌. Content-MD5는 무결성 검증 용도, CORS와 무관
요구 지식
CORS(Cross-Origin Resource Sharing)
웹 브라우저의 보안 정책 중 하나이다. 한 도메인에서 웹 페이지가 다른 도메인/오리진에 요청할 때 차단하는 메커니즘
ex) app1.example.com → common-assets.s3.amazonaws.com
허용 하려면 서버에서 Access-Control-Allow-Origin 헤더 설정 필요
S3의 CORS 설정
S3는 버킷 단위로 CORS 규칙을 JSON으로 설정한다.
# .xml
<CORSConfiguration>
<CORSRule>
<AllowOrigin>https://www.example.com</AllowedOrigin>
<AllowOrigin>https://app2.example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader> <!--📌 모든 도메인 허용 -->
</CORSRule>
</CORSConfiguration>
CloudFront + CORS
S3에서 CORS 헤더를 설정해도, CloudFront 캐시가 해당 헤더를 전달해야 한다.
👇CloudFront동작
Behavior → Cache Based on Selected Headers에서 Origin 헤더를 포함
CORS 관련 응답 헤더가 캐시에서 제거되지 않도록 Whitelist Headers 설정
브라우저의 폰트/JS 로드 정책
웹폰트(@font-facE)와 JS 파일은 CORS 검사 대상
폰트: 서버에서 Access-Control-Allow-Origin 헤더 없으면 차단된다.
JS: 다른 오리진이면 동일하게 차단
실습
-S3 bucket -< 권한 -> 편집
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD"
],
"AllowedOrigins": [
"https://www.example.com",
"https://app2.example.com",
"https://app3.example.com",
"https://app4.example.com"
],
"ExposeHeaders": [
"Access-Control-Allow-Origin"
],
"MaxAgeSeconds": 3000
}
]
중앙 버킷에 허용할 도메인 및 method를 입력