AWS(Amazon Web Service)

[AWS] Amazon S3 - CORS

yunseohhe 2024. 11. 7. 09:19

CORS(Cross-Origin Resource Sharing)

  • 교차 오리진 리소스 공유이다.
  • Origin(오리진) = 체계(protocol) + 호스트(domain) + 포트
      - https://www.example.com를 예로 살펴보면 HTTPS의 포트는 443이다.
        프로토콜은 HTTP 자체이고, 도메인은 www.example.com이다.
  • CORS는 웹 브라우저 기반 보안 메커니즘으로 메인 오리진을 방문하는 동안 다른 오리진에 대한 요청을 허용하거나 거부한다.
  • Origins이 같다는 것은 체계, 호스트, 포트가 동일할 때 같다고 말한다.
      - 예시의 두 URL(http://example.com/app1 & http://example.com.app2)은 같은 오리진을 공유하고 있다.
      - 오리진이 다른 경우도 있다. (http://www.example.com & http://other.example.com)
  • 웹 브라우저가 한 웹사이트를 방문하는 동안 요청 체계의 일부로 다른 웹사이트에 요청을 보내야 할 때, 다른 오리진이 CORS 헤더를 사용해서 요청을 허용하지 않는 한 해당 요청은 이행되지 않는다.
       = 이를 "액세스 제어 허용 오리진" 헤더라고 한다.

  • 도식을 통해 작동 방식과 활용 방법을 알아보자.
  • 위의 예시처럼 우리의 오리진인 웹 서버가 있다고 생각해보자. https://www.example.com이고 웹 브라우저가 있다.
  • 교차 오리진인 두 번째 웹 서버는 https://www.other.com 이다. 웹 브라우저가 첫 번째 오리진 웹 서버에 HTTPS 요청을 하고, 결과의 일부로 검색된 index.html 파일이 가령 다른 웹 서버에서 이미지도 가져와야 한다고 말한다.
  • 웹 브라우저에는 보안 기능이 내장되어 있어 먼저 교차 오리진에 사전 요청을 보낸다. www.other.com에 대한 옵션이 필요하고 해당 요청의 오리진이 https://www.example.com 이라는 것을 알려준다. 웹 서버가 교차 오리진 리소스 공유를 사용하도록 구성되었다면 the example.com 오리진을 허용하고 GET, PUT, DELETE 메서드를 허용할 것이다. 이것이 CORS 헤더이다. 
  • 웹 브라우저가 이 CORS 헤더에 만족한다면 웹 브라우저는 다른 서버에 이 파일을 검색하고 호출하도록 요청한다.

 

Amazon S3 - CORS

  • 클라이언트가 S3 버킷에서 교차 오리진 요청을 하면 정확한 CORS 헤더를 활성화해야 한다.
  • 위의 작업을 빠르게 수행하려면 특정 오리진을 허용하거나 *(별표)를 붙여 모든 오리진을 허용한다.

  • 웹 브라우저와 정적 웹사이트가 활성화된 S3 버킷이 있다. my-bucket-html이고 자산과 이미지는 다른 S3 버킷인 my-bucket-assets에 저장한다. 위의 예시에서도 정적 웹사이트를 활성화 했고, 웹브라우저는 첫 번째 S3 버킷으로 가서 해당 웹사이트 URL에 대한 index.html파일을 요청한다. 물론 정적 웹사이트 URL이다.
  • 반환된 index.html에는 이미지가 들어 있는데, 해당 이미지는 다른 웹 사이트에 존재한다. images/coffee.jpg 파일을 요청하고, 웹 브라우저가 보내는 것이다.
  • 위의 예시의 맨 밑의 노랑줄은 다른 웹사이트가 대상 호스트이고, 첫 번째 웹사이트가 오리진이다. S3 버킷이 정확한 CORS 헤더를 갖도록 구성되지 않았다면 요청을 거부한다. 요청을 허용한 경우라면 정확한 헤더를 갖고 요청이 처리되어 이미지를 얻을 수 있다.
  • CORS는 웹 브라우저 보안 메커니즘으로 다른 오리진에서 한 S3 버킷에 들어있는 검색된 이미지, 자산, 파일을 요청할 수 있게 해준다.