Amazon S3에서 CORS를 구성하고 cURL을 사용하여 CORS 규칙을 확인하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Simple Storage Service(S3) 버킷의 리소스에 대한 교차 오리진 액세스를 허용하고 싶은데 오류가 발생합니다.

해결 방법

Amazon S3 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 CORS(Cross-Origin Resource Sharing) 규칙을 버킷에 적용할 수 있습니다. Amazon S3 버킷에 대한 CORS 규칙을 테스트하려면 cURL 명령을 사용하세요. CORS는 헤더를 사용하여 웹 서버가 다른 오리진에서 요청한 콘텐츠를 브라우저가 표시할 수 있도록 하는 HTTP의 기능입니다. CORS 규칙으로 정의되지 않은 Amazon S3 버킷에 교차 오리진 요청을 보내면 CORS 헤더가 반환되지 않습니다.

예를 들면 다음과 같습니다.

curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Origin: http://www.example.com"

HTTP/1.1 200 OK
x-amz-id-2: Va106gWx1uUDGbouopXfpjvjHW0VXydI8/VGlraf/62f2vvxtI+iAnmu7lF4MK2B6CxuzReyfRI=
x-amz-request-id: QWNNX1Y0MWFM152H
Date: Thu, 04 Nov 2021 18:52:55 GMT
Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT
ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6"
Accept-Ranges: bytes
Content-Type: text/html
Server: AmazonS3
Content-Length: 55

웹 서버가 웹사이트에 유사한 요청을 한 경우 버킷에서 검색된 콘텐츠가 브라우저에 표시되지 않습니다. 콘텐츠가 표시되도록 하려면 Amazon S3 버킷에 대한 CORS 정책을 구성하세요. 올바르게 CORS 정책을 구성하면 적절한 헤더가 반환됩니다. Amazon S3 콘솔 또는 AWS CLI를 사용하여 버킷에 대한 CORS 규칙을 구성할 수 있습니다.

Amazon S3 콘솔을 사용하여 CORS 규칙 구성

Amazon S3 콘솔을 사용하여 버킷에 대한 CORS 규칙을 구성하려면 다음 단계를 수행하세요.

1.    AWS Management Console에 로그인합니다.

2.    Amazon S3 콘솔을 엽니다.

3.    버킷을 선택합니다.

4.    권한 탭을 선택합니다.

5.    교차 오리진 리소스 공유 창에서 편집을 선택합니다.

6.    텍스트 상자에 활성화하려는 JSON CORS 규칙을 다음과 같이 입력합니다.

Example:

[
  {
    "AllowedHeaders": [
      "Authorization"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD"
    ],
    "AllowedOrigins": [
      "http://www.example.com"
    ],
    "ExposeHeaders": [
      "Access-Control-Allow-Origin"
    ]
  }
]

각 CORS 규칙 요소 또는 예제 규칙에 대한 자세한 내용은 CORS 구성을 참조하세요.

7.    저장을 선택합니다.

AWS CLI를 사용하여 CORS 규칙 구성

AWS CLI를 사용하여 버킷에 대한 CORS 규칙을 구성하려면 다음 명령을 실행합니다.

aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

CORS 규칙 테스트

CORS 규칙을 테스트하려면 다음과 같은 cURL 명령을 사용합니다.

curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Origin: http://www.example.com"

HTTP/1.1 200 OK
x-amz-id-2: d5Jsw1vCf8tR3cMdXrtcTKYgczU/1pjxahnrw7C6jU1fLo8py2Nv2kpeFs8pYPruVZg6Y3JuRUA=
x-amz-request-id: BMCCY18E58B3GBWV
Date: Thu, 04 Nov 2021 19:12:26 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Expose-Headers: Access-Control-Allow-Origin
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Last-Modified: Thu, 04 Nov 2021 16:03:50 GMT
ETag: "cd4276d2cd5a2dc8ebcc1e04746680f6"
Accept-Ranges: bytes
Content-Type: text/html
Server: AmazonS3
Content-Length: 55

CORS 규칙이 올바르게 구성된 경우 200 OK 응답을 받게 됩니다.

CORS 메서드 문제 해결

CORS 구성으로 버킷에 액세스하는 동안 예상치 못한 동작이 발생하는 경우 다음을 시도하세요.

1.    -H "Access-Control-Request-Method:" 플래그를 추가하여 특정 CORS 메서드를 사용하여 요청하려면 cURL 명령을 <Method>사용하세요. 이 플래그는 테스트할 CORS 메서드를 지정합니다. --request OPTIONS 플래그를 사용하여 해당 요청의 실행 전 검사를 수행합니다.

**참고:**Amazon S3는 GET, HEAD, PUT, POST 및 DELETE 메서드를 지원합니다.

curl -i http://mycorsbucket.s3.amazonaws.com/cors-test.html -H "Access-Control-Request-Method: POST" --request OPTIONS -H "Origin: http://www.example.com"
HTTP/1.1 403 Forbidden
x-amz-request-id: 190J4Q6222HA2KZ5
x-amz-id-2: 6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Fri, 19 Nov 2021 18:43:38 GMT
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessForbidden</Code><Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message><Method>POST</Method><ResourceType>OBJECT</ResourceType><RequestId>190J4Q6222HA2KZ5</RequestId><HostId>6oEci3qg88OeoLvBGwkN8K9AGdxyVela8ZKxftXMqyWrtZFfiKMrBwpTAeRiOth8amovJMtAAdA=</HostId></Error>

2.    요청에서 오류가 반환되는 경우 버킷에 CORS 구성이 설정되어 있는지 확인하세요. CORS 규칙에 필요한 메서드를 버킷에 추가했는지 확인하세요. CORS 구성이 설정된 경우, S3 콘솔의 버킷에 대한 권한 섹션에 CORS 구성을 편집하는 옵션이 표시됩니다.

aws s3api put-bucket-cors --bucket mycorsbucket --cors-configuration '{"CORSRules" : [{"AllowedHeaders":["Authorization"],"AllowedMethods":["GET","HEAD","POST"],"AllowedOrigins":["http://www.example.com"],"ExposeHeaders":["Access-Control-Allow-Origin"]}]}'

3.    업데이트된 CORS 규칙을 테스트합니다. 메서드가 예상대로 작동하면 다음과 같은 응답을 받게 됩니다.

curl -i http://mycorsbucket.s3.amazonaws.com/index.html -H "Access-Control-Request-Method: POST" -X OPTIONS -H "Origin: http://www.example.com"
HTTP/1.1 200 OK
x-amz-id-2: Cx4kuM31KPVE19woEPRRYxF+85vEWkLk8+M0p6BIb72T550njMnmLtjqRgYzuxKelR0f+cxhFqI=
x-amz-request-id: QBSHV46QK43HGW15
Date: Fri, 19 Nov 2021 18:48:21 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: GET, HEAD, POST
Access-Control-Expose-Headers: Access-Control-Allow-Origin
Access-Control-Allow-Credentials: true
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Server: AmazonS3
Content-Length: 0

4.    원하는 도구를 사용하여 전체 요청 및 응답을 캡처하세요. Amazon S3가 수신하는 각 요청에 대해 요청의 데이터와 일치하는 CORS 규칙이 있어야 합니다.

  • 요청에 오리진 헤더가 있는지 확인하세요. 헤더가 누락된 경우 Amazon S3는 요청을 교차 오리진 요청으로 취급하지 않으며 응답에서 CORS 응답 헤더를 전송하지 않습니다.
  • 요청의 오리진 헤더가 지정된 CorsRule의 AllowedOrigins 요소 중 하나 이상과 일치하는지 확인하세요. 오리진 요청 헤더의 체계, 호스트 및 포트 값은 CorsRule의 AllowedOrigins 요소와 반드시 일치해야 합니다. 예를 들어, 오리진http://www.example.com을 허용하도록 CORSrule을 설정했다고 가정합니다. 이렇게 하면, 요청의 https://www.example.com 및 http://www.example.com:80 오리진이 구성에서 허용된 오리진과 일치하지 않습니다.
  • 요청 또는 실행 전 요청의 메서드(Access-Control-Request-Method에 지정된 메서드)가 동일한 CORSRule의 AllowedMethods 요소 중 하나인지 확인하세요.
  • 실행 전 요청에 Access-Control-Request-Headers 헤더가 포함된 경우, CORSRule에 Access-Control-Request-Headers 헤더의 각 값에 대한 AllowedHeader 항목이 포함되어 있는지 확인하세요.

관련 정보

Amazon CloudFront 응답에 HTTP 헤더 추가

CloudFront에서 “요청된 리소스에 대한 '액세스 제어-허용-오리진' 헤더가 없습니다” 오류를 해결하려면 어떻게 해야 하나요?

Amazon S3는 버킷의 CORS 구성을 어떻게 평가하나요?

CORS 문제 해결

AWS 공식
AWS 공식업데이트됨 일 년 전