다음 주제는 S3와 관련된 몇 가지 일반적인 CORS 문제를 해결하는 데 도움이 될 수 있습니다.
주제
403 Forbidden 오류: 이 버킷에 대해 CORS가 활성화되지 않음
교차 오리진 요청이 Amazon S3로 전송되었지만 CORS가 S3 버킷에 구성되지 않은 경우 다음 403 Forbidden
오류가 발생합니다.
오류: HTTP/1.1 403 Forbidden CORS Response: CORS is not enabled for this bucket.
CORS 구성은 버킷에 액세스할 수 있도록 허용할 오리진, 각 오리진에 대해 지원되는 작업(HTTP 메서드) 및 기타 작업별 정보를 식별하는 규칙이 포함된 문서 또는 정책입니다. Amazon S3 콘솔, AWS SDK 및 REST API를 사용하여 S3에 CORS를 구성하는 방법을 알아보세요. CORS에 대한 자세한 내용과 CORS 구성의 예는 CORS의 요소를 참조하세요.
403 Forbidden 오류: 이 CORS 요청은 허용되지 않음
CORS 구성의 CORS 규칙이 요청의 데이터와 일치하지 않는 경우 다음 403 Forbidden
오류가 발생합니다.
오류: HTTP/1.1 403 Forbidden CORS Response: This CORS request is not allowed.
따라서 다음과 같은 여러 가지 이유로 이 403 Forbidden
오류가 발생할 수 있습니다.
-
오리진이 허용되지 않습니다.
-
메서드가 허용되지 않습니다.
-
요청된 헤더가 허용되지 않습니다.
Amazon S3가 받은 각 요청에 대해 해당 요청의 데이터와 일치하는 CORS 규칙이 CORS 구성에 있어야 합니다.
오리진이 허용되지 않음
버킷에 대한 CORS 요청의 Origin
헤더는 CORS 구성의 AllowedOrigins
요소에 있는 오리진과 일치해야 합니다. AllowedOrigins
요소의 와일드카드 문자("*"
)는 모든 HTTP 메서드와 일치합니다. AllowedOrigins
요소를 업데이트하는 방법에 대한 자세한 내용은 교차 오리진 리소스 공유(CORS) 구성을 참조하세요.
예를 들어 AllowedOrigins
요소에 http://www.example1.com
도메인만 포함된 경우 http://www.example2.com
도메인에서 보낸 CORS 요청에서 403
Forbidden
오류가 발생합니다.
다음 예시에서는 AllowedOrigins
요소에 http://www.example1.com
도메인이 포함된 CORS 구성의 일부를 보여줍니다.
"AllowedOrigins":[
"http://www.example1.com"
]
http://www.example2.com
도메인에서 보낸 CORS 요청이 성공하려면 해당 http://www.example2.com
도메인이 CORS 구성의 AllowedOrigins
요소에 포함되어야 합니다.
"AllowedOrigins":[
"http://www.example1.com"
"http://www.example2.com"
]
메서드가 허용되지 않음
버킷에 대한 CORS 요청의 Access-Control-Request-Method
에 지정된 HTTP 메서드는 CORS 구성의 AllowedMethods
요소에 나열된 메서드와 일치해야 합니다. AllowedMethods
의 와일드카드 문자("*"
)는 모든 HTTP 메서드와 일치합니다. AllowedOrigins
요소를 업데이트하는 방법에 대한 자세한 내용은 교차 오리진 리소스 공유(CORS) 구성을 참조하세요.
CORS 구성에서 AllowedMethods
요소에 다음 메서드를 지정할 수 있습니다.
-
GET
-
PUT
POST
-
DELETE
-
HEAD
다음 예시에서는 AllowedMethods
요소에 GET
메서드가 포함된 CORS 구성의 일부를 보여줍니다. GET
메서드를 포함한 요청만 성공합니다.
"AllowedMethods":[
"GET"
]
HTTP 메서드(예:PUT
)가 CORS 요청에 사용되었거나 버킷에 대한 사전 CORS 요청에 포함되었으나 해당 메서드가 CORS 구성에 없는 경우 요청에서 403 Forbidden
오류가 발생합니다. 이 CORS 요청 또는 CORS 사전 요청을 허용하려면 PUT
메서드를 CORS 구성에 추가해야 합니다.
"AllowedMethods":[
"GET"
"PUT"
]
요청된 헤더가 허용되지 않음
사전 요청의 Access-Control-Request-Headers
헤더에 나열된 헤더는 CORS 구성의 AllowedHeaders
요소에 있는 헤더와 일치해야 합니다. Amazon S3에 대한 요청에 사용할 수 있는 공통 헤더 목록은 공통 요청 헤더를 참조하세요. AllowedHeaders
요소를 업데이트하는 방법에 대한 자세한 내용은 교차 오리진 리소스 공유(CORS) 구성을 참조하세요.
다음 예시에서는 AllowedHeaders
요소에 Authorization
헤더가 포함된 CORS 구성의 일부를 보여줍니다. Authorization
헤더에 대한 요청만 성공합니다.
"AllowedHeaders": [
"Authorization"
]
헤더(예: Content-MD5
)가 CORS 요청에 포함되었지만 해당 헤더가 CORS 구성에 없는 경우 요청에서 403 Forbidden
오류가 발생합니다. 이 CORS 요청을 허용하려면 Content-MD5
헤더를 CORS 구성에 추가해야 합니다. CORS 요청의 Authorization
헤더와 Content-MD5
헤더를 모두 버킷으로 전달하려면 두 헤더가 모두 CORS 구성의 AllowedHeaders
요소에 포함되어 있는지 확인합니다.
"AllowedHeaders": [
"Authorization"
"Content-MD5"
]
CORS 응답에서 헤더를 찾을 수 없음
CORS 구성의 ExposeHeaders
요소는 CORS 요청에 대한 응답으로 브라우저에서 실행되는 스크립트와 애플리케이션이 액세스할 수 있도록 설정할 응답 헤더를 식별합니다.
S3 버킷에 저장된 객체에 응답 데이터와 함께 사용자 정의 메타데이터(예:x-amz-meta-custom-header
)가 있는 경우 이 사용자 지정 헤더에는 클라이언트측 JavaScript 코드에서 액세스할 추가 메타데이터 또는 정보가 포함될 수 있습니다. 하지만 기본적으로 브라우저는 보안상의 이유로 사용자 지정 헤더에 대한 액세스를 차단합니다. 클라이언트측 JavaScript가 사용자 지정 헤더에 액세스할 수 있도록 하려면 CORS 구성에 해당 헤더를 포함해야 합니다.
아래 예시에서 x-amz-meta-custom-header1
헤더는 ExposeHeaders
요소에 포함되어 있습니다. x-amz-meta-custom-header2
는 ExposeHeaders
요소에 포함되지 않았으며 CORS 구성에서 누락되었습니다. 응답에서는 ExposeHeaders
요소에 포함된 값만 반환됩니다. 요청에서 Access-Control-Expose-Headers
헤더에 x-amz-meta-custom-header2
헤더가 포함된 경우에도 응답은 여전히 200 OK
를 반환합니다. 하지만 허용된 헤더(예: x-amz-meta-custom-header
)만 반환되어 응답에 표시됩니다.
"ExposeHeaders": [
"x-amz-meta-custom-header1"
]
모든 헤더가 응답에 표시되도록 하려면 아래와 같이 허용된 모든 헤더를 CORS 구성의 ExposeHeaders
요소에 추가합니다.
"ExposeHeaders": [
"x-amz-meta-custom-header1",
"x-amz-meta-custom-header2"
]
S3 프록시 통합의 CORS 관련 고려 사항
오류가 발생하며 이미 S3 버킷의 CORS 구성을 확인했고 교차 오리진 요청이 AWS CloudFront와 같은 프록시로 전송되는 경우 다음 작업을 시도해 봅니다.
-
OPTIONS
메서드에서 HTTP 요청을 허용하도록 설정을 구성합니다. -
Origin
,Access-Control-Request-Headers
및Access-Control-Request-Method
헤더를 전달하도록 프록시를 구성합니다.
일부 프록시는 CORS 요청에 대한 사전 정의된 기능을 제공합니다. 예를 들어 CloudFront에서 오리진이 S3 버킷일 때 CORS 요청을 활성화하는 헤더가 포함된 정책을 구성할 수 있습니다. 자세한 내용은 Amazon CloudFront 개발자 안내서의 정책을 통한 오리진 요청 제어 또는 관리형 오리진 요청 정책 사용을 참조하세요.