콘텐츠의 지리적 배포 제한 - Amazon CloudFront

콘텐츠의 지리적 배포 제한

지리적 차단이라고도 하는 지리적 제한을 사용하여 특정 지리적 위치에 있는 사용자가 Amazon CloudFront 배포를 통해 배포한 콘텐츠에 액세스하는 것을 차단할 수 있습니다. 지리적 제한을 사용하는 데에는 다음 두 가지 옵션이 있습니다.

  • CloudFront 지리적 제한 기능을 사용합니다. 이 옵션을 사용하면 배포와 연결된 파일 전체에 대한 액세스를 제한하고 국가 수준에서 액세스를 제한합니다.

  • 타사 지리적 위치 서비스를 사용합니다. 이 옵션을 사용하면 배포와 연결된 파일의 하위 집합에 대한 액세스를 제한하거나 국가 수준이 아닌 더욱 세분화된 범위에서 액세스를 제한합니다.

CloudFront 지리적 제한 사용

사용자가 콘텐츠를 요청할 경우 일반적으로 CloudFront는 사용자가 위치한 장소와 상관없이 요청한 콘텐츠를 제공합니다. 특정 지리적 위치에 있는 사용자가 콘텐츠에 액세스하는 것을 차단해야 하는 경우, CloudFront 지리적 제한 기능을 사용하여 다음 중 하나를 실행할 수 있습니다.

  • 허용 목록에 있는 승인된 국가에 있는 사용자만 콘텐츠에 액세스할 수 있도록 권한을 부여합니다.

  • 사용자가 거부 목록의 금지된 국가 중 하나에 있는 경우 액세스를 금지합니다.

예를 들어, 콘텐츠를 배포하도록 허용되지 않는 특정 국가로부터 요청이 온 경우 CloudFront 지리적 제한을 사용하여 이 요청을 차단할 수 있습니다.

참고

CloudFront에서는 서드 파티 데이터베이스를 사용하여 사용자의 위치를 확인합니다. IP 주소 및 국가 간 매핑 정확도는 리전에 따라 다릅니다. 최근 테스트에 따르면 전반적인 정확도는 99.8%입니다. CloudFront에서 사용자 위치를 확인할 수 없는 경우 CloudFront는 사용자가 요청한 콘텐츠를 제공합니다.

지리적 제한이 작동하는 방식은 다음과 같습니다.

  1. 리히텐슈타인에서만 콘텐츠를 배포할 권리를 보유하고 있다고 가정합니다. CloudFront 배포를 업데이트하고 리히텐슈타인만 포함된 허용 목록을 추가합니다. (또는 리히텐슈타인을 제외한 모든 국가가 포함된 거부 목록을 추가할 수도 있습니다.)

  2. 모나코에 있는 사용자가 콘텐츠를 요청하고 DNS는 요청을 이탈리아 밀라노에 있는 CloudFront 엣지 로케이션으로 라우팅합니다.

  3. 밀라노의 엣지 로케이션에서는 이 배포를 찾아 모나코에 있는 사용자의 콘텐츠 다운로드가 허용되지 않았음을 확인합니다.

  4. CloudFront에서는 HTTP 상태 코드 403 (Forbidden)을 사용자에게 반환합니다.

선택적으로 CloudFront에서 사용자 지정 오류 메시지를 사용자에게 반환하도록 구성할 수 있으며, CloudFront에서 요청된 파일에 대한 오류 응답을 캐싱하려는 시간을 지정할 수 있습니다. 기본값은 10초입니다. 자세한 내용은 특정 HTTP 상태 코드에 대한 사용자 지정 오류 페이지 생성 단원을 참조하십시오.

지리적 제한은 전체 배포에 적용됩니다. 하나의 제한을 콘텐츠의 특정 부분에 적용하고 또 다른 제한을 다른 부분에 적용해야 할 경우(또는 이 부분에 대한 제한이 없는 경우), 별도의 CloudFront 배포를 만들거나 서드 파티 지리적 위치 서비스를 사용해야 합니다.

CloudFront 액세스 표준 로그(액세스 로그)를 사용하는 경우, sc-status(HTTP 상태 코드)의 값이 403인 로그 항목을 검색하여 CloudFront에서 거부된 요청을 식별할 수 있습니다. 그러나 표준 로그만 사용해서는 사용자의 위치에 따라 CloudFront에서 거부된 요청과 사용자가 다른 이유로 파일에 대한 액세스 권한이 없어 CloudFront에서 거부된 요청을 구별할 수 없습니다. Digital Element 또는 MaxMind와 같은 타사 지리적 위치 서비스가 있는 경우, 액세스 로그에 있는 c-ip(클라이언트 IP) 열의 IP 주소에 따라 요청의 위치를 식별할 수 있습니다. CloudFront 표준 로그에 대한 자세한 내용은 표준 로그(액세스 로그) 구성 및 사용 단원을 참조하세요.

다음 절차는 CloudFront 콘솔을 사용하여 기존 배포에 지리적 제한을 추가하는 방법을 설명합니다. 콘솔을 사용하여 배포를 생성하는 방법에 대한 자세한 내용은 배포 생성 섹션을 참조하세요.

CloudFront 웹 배포에 지리적 제한을 추가하려면(콘솔)
  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home에서 CloudFront 콘솔을 엽니다.

  2. 탐색 창에서 배포를 선택한 후 업데이트하려는 배포를 선택합니다.

  3. 보안 탭을 선택한 다음 지리적 제한을 선택합니다.

  4. 편집을 선택합니다.

  5. 허용 목록(Allow list)을 선택하여 허용된 국가의 목록을 생성하거나 차단 목록(Block list)을 선택하여 차단된 국가의 목록을 생성합니다.

  6. 원하는 국가를 목록에 추가한 다음 변경 사항 저장(Save changes)을 선택합니다.

서드 파티 지리적 위치 서비스 사용

CloudFront 지리적 제한 기능을 사용하여 지정된 웹 배포를 통해 배포하는 전체 파일에 대해 국가 수준에서 콘텐츠의 배포를 제어할 수 있습니다. 국가의 경계를 따르지 않는 지리적 제한이 있는 경우 또는 해당 배포를 통해 제공하는 파일 중 일부에 대해서만 액세스를 제한하려는 경우, CloudFront와 서드 파티 지리적 위치 서비스를 조합할 수 있습니다. 이를 통해 국가에 따라서나 도시, 우편번호에 따라서는 물론이고 경도/위도에 따라서도 콘텐츠를 제어할 수 있습니다.

타사 지리적 위치 서비스를 사용하는 경우 CloudFront 서명된 URL을 사용하는 것이 좋습니다. 이렇게 하면 URL이 더 이상 유효하지 않게 된 이후의 만료 날짜 및 시간을 지정할 수 있습니다. 또한 오리진으로는 Amazon S3 버킷을 사용하는 것이 좋습니다. 이렇게 하면 CloudFront 오리진 액세스 제어를 사용하여 사용자가 오리진에서 콘텐츠에 직접 액세스하는 것을 차단할 수 있기 때문입니다. 서명된 URL 및 오리진 액세스 제어에 대한 자세한 내용은 서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공 섹션을 참조하세요.

다음 단계에서는 서드 파티 지리적 위치 서비스를 사용하여 파일에 대한 액세스를 제어하는 방법을 설명합니다.

서드 파티 지리적 위치 서비스를 사용하여 CloudFront 배포의 파일에 대한 액세스를 제한하려면
  1. 지리적 위치 서비스를 통해 계정을 얻습니다.

  2. Amazon S3 버킷에 콘텐츠를 업로드합니다.

  3. 프라이빗 콘텐츠를 제공하도록 Amazon CloudFront 및 Amazon S3를 구성합니다. 자세한 내용은 서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공 단원을 참조하십시오.

  4. 다음을 수행하도록 웹 애플리케이션을 작성합니다.

    • 각 사용자 요청에 대한 IP 주소를 지리적 위치 서비스에 전송합니다.

    • 지리적 위치 서비스로부터의 반환 값을 평가하여 CloudFront에서 콘텐츠를 배포하려는 위치에 사용자가 있는지 여부를 확인합니다.

    • 사용자의 위치에 콘텐츠를 배포하려면 CloudFront 콘텐츠에 대해 서명된 URL을 생성합니다. 해당 위치에 콘텐츠를 배포하지 않으려면 HTTP 상태 코드 403 (Forbidden)를 사용자에게 반환합니다. 또는 사용자 지정 오류 메시지를 반환하도록 CloudFront를 구성할 수 있습니다. 자세한 내용은 특정 HTTP 상태 코드에 대한 사용자 지정 오류 페이지 생성 단원을 참조하십시오.

    자세한 내용은 사용 중인 지리적 위치 서비스의 설명서를 참조하세요.

웹 서버 변수를 사용하여 웹 사이트를 방문한 사용자의 IP 주소를 가져올 수 있습니다. 다음 경고를 기록해 두세요.

  • 웹 서버가 로드 밸런서를 통해 인터넷에 연결되지 않은 경우, 웹 서버 변수를 사용하여 원격 IP 주소를 가져올 수 있습니다. 그러나 이 IP 주소는 사용자의 IP 주소와 항상 일치하지는 않으며, 사용자가 인터넷에 연결된 방법에 따라 프록시 서버의 IP 주소가 될 수도 있습니다.

  • 웹 서버가 로드 밸런서를 통해 인터넷에 연결된 경우, 웹 서버 변수에는 사용자의 IP 주소가 아닌 로드 밸런서의 IP 주소가 포함될 수 있습니다. 이러한 구성에서는 X-Forwarded-For HTTP 헤더의 마지막 IP 주소를 사용하는 것이 좋습니다. 이 헤더는 대개 두 개 이상의 IP 주소를 포함하고 있으며, 이들 중 대부분은 프록시나 로드 밸런서용 IP 주소입니다. 목록의 마지막 IP 주소는 사용자의 지리적 위치와 가장 관련성이 높은 주소입니다.

웹 서버가 로드 밸런서에 연결되지 않은 경우, IP 주소 스푸핑을 방지하기 위해 X-Forwarded-For 헤더 대신 웹 서버 변수를 사용하는 것이 좋습니다.