

# 정책을 통한 오리진 요청 제어
<a name="controlling-origin-requests"></a>

CloudFront에 대한 최종 사용자 요청이 *캐시 누락*로 나타나는 경우(요청된 객체가 엣지 로케이션에 캐싱되지 않음) CloudFront는 오리진에 요청을 보내 객체를 검색합니다. 이를 *오리진 요청*이라고 합니다. 오리진 요청에는 다음과 같은 최종 사용자 요청의 정보가 항상 포함됩니다.
+ URL 경로(경로 전용, URL 쿼리 문자열 또는 도메인 이름 제외)
+ 요청 본문(있는 경우)
+ CloudFront에서 모든 오리진 요청에 자동으로 포함하는 HTTP 헤더(`Host`, `User-Agent`, `X-Amz-Cf-Id` 등)

URL 쿼리 문자열, HTTP 헤더 및 쿠키와 같은 최종 사용자 요청의 기타 정보는 기본적으로 오리진 요청에 포함되지 않습니다. (예외: 레거시 캐시 설정의 경우 CloudFront는 기본적으로 헤더를 오리진에 전달합니다.) 그러나 분석 또는 원격 분석을 위해 데이터를 수집하는 등 오리진에서 이러한 다른 정보 중 일부를 수신할 수 있습니다. *오리진 요청 정책*을 사용하여 오리진 요청에 포함된 정보를 제어할 수 있습니다.

오리진 요청 정책은 캐시 키를 제어하는 [캐시 정책](controlling-the-cache-key.md)과 별개입니다. 이를 통해 오리진에서 추가 정보를 수신하고 적절한 *캐시 적중률*(캐시 적중으로 나타나는 뷰어 요청의 비율)을 유지할 수 있습니다. 오리진 요청에 포함되는 정보(오리진 요청 정책 사용)와 캐시 키에 포함되는 정보(캐시 정책 사용)를 별도로 제어하면 됩니다.

두 종류의 정책은 별개이지만 서로 관련이 있습니다. 캐시 정책을 사용하여 캐시 키에 포함하는 모든 URL 쿼리 문자열, HTTP 헤더 및 쿠키는 오리진 요청에 자동으로 포함됩니다. 오리진 요청 정책을 사용하여 오리진 요청에 포함하지만 캐시 키에는 포함하지 *않을* 정보를 지정합니다. 캐시 정책과 마찬가지로 오리진 요청 정책을 CloudFront 배포에 있는 하나 이상의 캐시 동작에 연결합니다.

오리진 요청 정책을 사용하여 최종 사용자 요청에 포함되지 않은 오리진 요청에 HTTP 헤더를 추가할 수도 있습니다. 이러한 추가 헤더는 오리진 요청을 보내기 전에 CloudFront에서 추가되며, 헤더 값은 최종 사용자 요청에 따라 자동으로 결정됩니다. 자세한 내용은 [CloudFront 요청 헤더 추가](adding-cloudfront-headers.md) 섹션을 참조하세요.

**Topics**
+ [오리진 요청 정책 이해](origin-request-understand-origin-request-policy.md)
+ [오리진 요청 정책 생성](origin-request-create-origin-request-policy.md)
+ [관리형 오리진 요청 정책 사용](using-managed-origin-request-policies.md)
+ [CloudFront 요청 헤더 추가](adding-cloudfront-headers.md)
+ [오리진 요청 정책과 캐시 정책이 함께 작동하는 방식 이해](understanding-how-origin-request-policies-and-cache-policies-work-together.md)

# 오리진 요청 정책 이해
<a name="origin-request-understand-origin-request-policy"></a>

CloudFront에서는 일반 사용 사례에 대해 미리 정의된 오리진 요청 정책(*관리형 정책*이라고 함)을 제공합니다. 이러한 관리형 정책을 사용하거나 필요에 따라 자체 오리진 요청 정책을 생성할 수 있습니다. 관리형 정책에 대한 자세한 내용은 [관리형 오리진 요청 정책 사용](using-managed-origin-request-policies.md) 단원을 참조하세요.

오리진 요청 정책에는 *정책 정보* 및 *오리진 요청 설정*으로 분류되는 다음과 같은 설정이 포함되어 있습니다.

## 정책 정보
<a name="origin-request-understand-origin-request-policy-info"></a>

**이름**  
오리진 요청 정책을 식별하는 이름입니다. 콘솔에서 이름을 사용하여 오리진 요청 정책을 캐시 동작에 연결합니다.

**설명**  
오리진 요청 정책에 대한 설명입니다. 이는 선택 사항입니다.

## 오리진 요청 설정
<a name="origin-request-understand-origin-request-policy-settings"></a>

오리진 요청 설정은 CloudFront에서 오리진으로 보내는 요청(오리진 요청이라고 함)에 포함된 최종 사용자 요청의 값을 지정합니다. 이 값에는 URL 쿼리 문자열, HTTP 헤더 및 쿠키가 포함될 수 있습니다. 지정한 값은 오리진 요청에 포함되지만 캐시 키에는 포함되지 않습니다. 캐시 키 제어에 대한 자세한 내용은 [정책으로 캐시 키 제어](controlling-the-cache-key.md) 단원을 참조하세요.

**헤더**  
CloudFront에서 오리진 요청에 포함하는 최종 사용자 요청의 HTTP 헤더입니다. 헤더의 경우 다음 설정 중 하나를 선택할 수 있습니다.  
+ **없음(None)** - 최종 사용자 요청의 HTTP 헤더가 오리진 요청에 포함되지 *않습니다*.
+ **모든 최종 사용자 헤더(All viewer header)** - 최종 사용자 요청의 모든 HTTP 헤더가 오리진 요청에 포함됩니다.
+ **All viewer headers and the following CloudFront headers(모든 뷰어 헤더 및 다음의 CloudFront 헤더)** - 뷰어 요청의 모든 HTTP 헤더가 오리진 요청에 포함됩니다. 또한 오리진 요청에 추가할 CloudFront 헤더를 지정합니다. CloudFront 헤더에 대한 자세한 내용은 [CloudFront 요청 헤더 추가](adding-cloudfront-headers.md) 단원을 참조하세요.
+ **Include the following headers(다음 헤더 포함)** - 오리진 요청에 포함할 HTTP 헤더를 지정합니다.
**참고**  
**Origin 커스텀 헤더** 설정에 이미 포함되어 있는 헤더는 지정하지 마세요. 자세한 내용은 [사용자 지정 헤더를 오리진 요청에 추가하도록 CloudFront 구성](add-origin-custom-headers.md#add-origin-custom-headers-configure) 섹션을 참조하세요.
+ **다음을 제외한 모든 뷰어 헤더** - 오리진 요청에 포함하지 ****않을** HTTP 헤더를 지정합니다. 지정된 헤더를 제외한 뷰어 요청의 다른 HTTP 헤더가 모두 포함됩니다.
**모든 뷰어 헤더 및 다음 CloudFront 헤더**, **다음 헤더 포함** 또는 **다음을 제외한 모든 뷰어 헤더** 설정을 사용하는 경우 HTTP 헤더를 이름으로만 지정합니다. CloudFront는 오리진 요청에 값을 비롯한 전체 헤더를 포함합니다.  
뷰어의 `Host` 헤더를 제거하기 위해 **다음을 제외한 모든 뷰어 헤더** 설정을 사용하면 CloudFront는 오리진의 도메인 이름이 포함된 새 `Host` 헤더를 오리진 요청에 추가합니다.

**Cookies**  
CloudFront에서 오리진 요청에 포함하는 최종 사용자 요청의 쿠키입니다. 쿠키의 경우 다음 설정 중 하나를 선택할 수 있습니다.  
+ **없음(None)** - 최종 사용자 요청의 쿠키가 오리진 요청에 포함되지 *않습니다*.
+ **모두(All)** - 최종 사용자 요청의 모든 쿠키가 오리진 요청에 포함됩니다.
+ **다음 쿠키 포함** – 오리진 요청에 포함할 뷰어 요청의 쿠키를 지정합니다.
+ **다음을 제외한 모든 쿠키** - 뷰어 요청의 쿠키 중 오리진 요청에 포함하지 ****않을** 쿠키를 지정합니다. 뷰어 요청의 다른 쿠키가 모두 포함됩니다.
**다음 쿠키 포함** 또는 **다음을 제외한 모든 쿠키** 설정을 사용하는 경우 이름으로만 쿠키를 지정합니다. CloudFront는 오리진 요청에 값을 비롯한 전체 쿠키를 포함합니다.

**쿼리 문자열**  
CloudFront에서 오리진 요청에 포함하는 최종 사용자 요청의 URL 쿼리 문자열입니다. 쿼리 문자열의 경우 다음 설정 중 하나를 선택할 수 있습니다.  
+ **없음(None)** - 최종 사용자 요청의 쿼리 문자열이 오리진 요청에 포함되지 *않습니다*.
+ **모두(All)** - 최종 사용자 요청의 모든 쿼리 문자열이 오리진 요청에 포함됩니다.
+ **다음 쿼리 문자열 포함** – 오리진 요청에 포함할 뷰어 요청의 쿼리 문자열을 지정합니다.
+ **다음을 제외한 모든 쿼리 문자열** – 오리진 요청에 포함하지 ****않을** 뷰어 요청의 쿼리 문자열을 지정합니다. 다른 모든 쿼리 문자열이 포함됩니다.
**다음 쿼리 문자열 포함** 또는 **다음을 제외한 모든 쿼리 문자열** 설정을 사용하는 경우 이름으로만 쿼리 문자열을 지정합니다. CloudFront는 오리진 요청에 값을 비롯한 전체 쿼리 문자열을 포함합니다.

# 오리진 요청 정책 생성
<a name="origin-request-create-origin-request-policy"></a>

오리진 요청 정책을 사용하여 CloudFront에서 오리진으로 보내는 요청에 포함된 값(URL 쿼리 문자열, HTTP 헤더 및 쿠키)을 제어할 수 있습니다. AWS Command Line Interface(AWS CLI) 또는 CloudFront API를 사용하여 CloudFront 콘솔에서 오리진 요청 정책을 생성할 수 있습니다.

오리진 요청 정책을 생성한 후 CloudFront 배포의 하나 이상의 캐시 동작에 이를 연결합니다.

오리진 요청 정책은 필요하지 않습니다. 캐시 동작에 오리진 요청 정책이 연결되어 있지 않으면 오리진 요청에는 [캐시 정책](cache-key-understand-cache-policy.md)에 지정된 모든 값이 포함되지만 그 이상은 포함되지 않습니다.

**참고**  
오리진 요청 정책을 사용하려면 캐시 동작도 [캐시 정책](controlling-the-cache-key.md)을 사용해야 합니다. 캐시 정책 없이 캐시 동작에 오리진 요청 정책을 사용할 수 없습니다.

------
#### [ Console ]

**오리진 요청 정책을 생성하는 방법(콘솔)**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/cloudfront/v4/home?#/policies](https://console.aws.amazon.com/cloudfront/v4/home?#/policies)의 CloudFront 콘솔에서 [**정책(Policies)**] 페이지를 엽니다.

1. **Origin request(오리진 요청)**를 선택한 다음 **Create origin request policy(오리진 요청 정책 생성)**를 선택합니다.

1. 이 오리진 요청 정책에 대해 원하는 설정을 선택합니다. 자세한 내용은 [오리진 요청 정책 이해](origin-request-understand-origin-request-policy.md) 섹션을 참조하세요.

1. 마친 후에는 **Create(생성)**를 선택합니다.

오리진 요청 정책을 생성한 후 이를 캐시 동작에 연결할 수 있습니다.

**오리진 요청 정책을 기존 배포에 연결하는 방법(콘솔)**

1. [https://console.aws.amazon.com/cloudfront/v4/home#/distributions](https://console.aws.amazon.com/cloudfront/v4/home#/distributions)의 CloudFront 콘솔에서 [**Distributions(배포)**] 페이지를 엽니다.

1. 업데이트할 배포를 선택한 다음 **Behaviors(동작)** 탭을 선택합니다.

1. 업데이트할 캐시 동작을 선택한 다음 **Edit(편집)**를 선택합니다.

   또는 새 캐시 동작을 생성하려면 **Create Behavior(동작 생성)**를 선택합니다.

1. **Cache key and origin request(캐시 키 및 오리진 요청)** 섹션에서 **Cache policy and origin request policy(캐시 정책 및 오리진 요청 정책)**가 선택되어 있는지 확인합니다.

1. **Origin Request Policy(오리진 요청 정책)**의 경우 이 캐시 동작에 연결할 오리진 요청 정책을 선택합니다.

1. 페이지 하단에서 **Save changes(변경 사항 저장)**를 선택합니다.

**오리진 요청 정책을 새 배포에 연결하는 방법(콘솔)**

1. 에서 CloudFront 콘솔을 엽니다[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. **배포 생성**을 선택합니다.

1. **Cache key and origin request(캐시 키 및 오리진 요청)** 섹션에서 **Cache policy and origin request policy(캐시 정책 및 오리진 요청 정책)**가 선택되어 있는지 확인합니다.

1. **Origin Request Policy(오리진 요청 정책)**의 경우 이 배포의 기본 캐시 동작에 연결할 오리진 요청 정책을 선택합니다.

1. 오리진, 기본 캐시 동작 및 기타 배포 설정에 대해 원하는 설정을 선택합니다. 자세한 내용은 [모든 배포 설정 참조](distribution-web-values-specify.md) 섹션을 참조하세요.

1. 완료되면 **Create Distribution(배포 생성)**을 선택합니다.

------
#### [ CLI ]

AWS Command Line Interface(AWS CLI)를 사용하여 오리진 요청 정책을 생성하려면 **aws cloudfront create-origin-request-policy** 명령을 사용합니다. 각 개별 파라미터를 명령줄 입력으로 지정하는 대신 입력 파일을 사용하여 명령의 입력 파라미터를 제공할 수 있습니다.

**오리진 요청 정책을 생성하는 방법(입력 파일이 있는 CLI)**

1. 다음 명령을 사용하여 `origin-request-policy.yaml` 명령에 대한 모든 입력 파라미터가 포함된 **create-origin-request-policy**이라는 파일을 만듭니다.

   ```
   aws cloudfront create-origin-request-policy --generate-cli-skeleton yaml-input > origin-request-policy.yaml
   ```

1. 방금 생성한 `origin-request-policy.yaml`이라는 파일을 엽니다. 파일을 편집하여 원하는 오리진 요청 정책 설정을 지정한 다음 파일을 저장합니다. 파일에서 선택적 필드를 제거할 수 있지만 필수 필드는 제거하지 마세요.

   오리진 요청 정책 설정에 대한 자세한 내용은 [오리진 요청 정책 이해](origin-request-understand-origin-request-policy.md) 단원을 참조하세요.

1. 다음 명령을 사용하여 `origin-request-policy.yaml` 파일의 입력 파라미터를 사용하여 오리진 요청 정책을 만듭니다.

   ```
   aws cloudfront create-origin-request-policy --cli-input-yaml file://origin-request-policy.yaml
   ```

   명령의 출력에 있는 `Id` 값을 기록해 둡니다. 오리진 요청 정책 ID인 이 값은 오리진 요청 정책을 CloudFront 배포의 캐시 동작에 연결하는 데 필요합니다.

**오리진 요청 정책을 기존 배포에 연결하는 방법(입력 파일이 있는 CLI)**

1. 다음 명령을 사용하여 업데이트할 CloudFront 배포에 대한 배포 구성을 저장합니다. *distribution\$1ID*를 배포 ID로 바꿉니다.

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 방금 생성한 `dist-config.yaml`이라는 파일을 엽니다. 오리진 요청 정책을 사용하도록 업데이트하려는 각 캐시 동작을 다음과 같이 변경하여 파일을 편집합니다.
   + 캐시 동작에서 `OriginRequestPolicyId`이라는 필드를 추가합니다. 필드 값에는 정책을 만든 후 기록한 오리진 요청 정책 ID를 사용합니다.
   + `ETag` 필드의 이름을 `IfMatch`로 바꾸지만 필드 값은 변경하지 마세요.

   완료되면 파일을 저장합니다.

1. 오리진 요청 정책을 사용하도록 배포를 업데이트하려면 다음 명령을 사용합니다. *distribution\$1ID*를 배포 ID로 바꿉니다.

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

**오리진 요청 정책을 새 배포에 연결(입력 파일이 있는 CLI)**

1. 다음 명령을 사용하여 `distribution.yaml` 명령에 대한 모든 입력 파라미터가 포함된 **create-distribution**이라는 파일을 만듭니다.

   ```
   aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
   ```

1. 방금 생성한 `distribution.yaml`이라는 파일을 엽니다. 기본 캐시 동작의 `OriginRequestPolicyId` 필드에 정책을 생성한 후 기록한 오리진 요청 정책 ID를 입력합니다. 파일을 계속 편집하여 원하는 배포 설정을 지정한 다음 완료되면 파일을 저장합니다.

   배포 설정에 대한 자세한 내용은 [모든 배포 설정 참조](distribution-web-values-specify.md) 단원을 참조하세요.

1. 다음 명령을 사용하여 `distribution.yaml` 파일의 입력 파라미터로 배포를 만듭니다.

   ```
   aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml
   ```

------
#### [ API ]

CloudFront API를 사용하여 오리진 요청 정책을 생성하려면 [CreateOriginRequestPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginRequestPolicy.html)를 사용합니다. 이 API 호출에서 지정하는 필드에 대한 자세한 내용은 AWS SDK 또는 기타 API 클라이언트에 대한 [오리진 요청 정책 이해](origin-request-understand-origin-request-policy.md) 및 API 참조 설명서를 참조하세요.

오리진 요청 정책을 생성한 후 다음 API 호출 중 하나를 사용하여 캐시 동작에 연결할 수 있습니다.
+ 기존 배포의 캐시 동작에 연결하려면 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)을 사용합니다.
+ 새 배포의 캐시 동작에 연결하려면 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)을 사용합니다.

이 두 API 호출에 대해 캐시 동작 내의 `OriginRequestPolicyId` 필드에 오리진 요청 정책의 ID를 제공합니다. 이러한 API 호출에서 지정하는 다른 필드에 대한 자세한 내용은 [모든 배포 설정 참조](distribution-web-values-specify.md)와 AWS SDK 또는 기타 API 클라이언트에 대한 API 참조 설명서를 참조하세요.

------

# 관리형 오리진 요청 정책 사용
<a name="using-managed-origin-request-policies"></a>

CloudFront에서는 배포의 캐시 동작에 연결할 수 있는 일련의 관리형 오리진 요청 정책을 제공합니다. 관리형 오리진 요청 정책을 사용하면 오리진 요청 정책을 직접 작성하거나 유지할 필요가 없습니다. 관리형 정책은 특정 사용 사례에 최적화된 설정을 사용합니다.

관리형 오리진 요청 정책을 사용하려면 배포의 캐시 동작에 이 정책을 연결합니다. 이 프로세스는 오리진 요청 정책을 생성할 때와 동일하지만 새 정책을 생성하는 대신 관리형 오리진 요청 정책 중 하나를 연결하기만 하면 됩니다. 이름(콘솔 사용) 또는 ID(AWS CLI 또는 SDK 사용)로 정책을 연결합니다. 이름과 ID는 다음 섹션에 나열되어 있습니다.

자세한 내용은 [오리진 요청 정책 생성](origin-request-create-origin-request-policy.md) 섹션을 참조하세요.

다음 항목에서는 사용할 수 있는 관리형 오리진 요청 정책에 대해 설명합니다.

**Topics**
+ [AllViewer](#managed-origin-request-policy-all-viewer)
+ [AllViewerAndCloudFrontHeaders-2022-06](#managed-origin-request-policy-all-viewer-and-cloudfront)
+ [AllViewerExceptHostHeader](#managed-origin-request-policy-all-viewer-except-host-header)
+ [CORS-CustomOrigin](#managed-origin-request-policy-cors-custom)
+ [CORS-S3Origin](#managed-origin-request-policy-cors-s3)
+ [Elemental-MediaTailor-PersonalizedManifests](#managed-origin-request-policy-mediatailor)
+ [HostHeaderOnly](#managed-origin-request-policy-host-header-only)
+ [UserAgentRefererHeaders](#managed-origin-request-policy-user-agent-referer)

## AllViewer
<a name="managed-origin-request-policy-all-viewer"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/216adef6-5c7f-47e4-b989-5492eafa07d3)

이 정책에는 뷰어 요청의 모든 값(헤더, 쿠키, 쿼리 문자열)이 포함됩니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`216adef6-5c7f-47e4-b989-5492eafa07d3`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:** 최종 사용자 요청의 모든 헤더
+ **오리진 요청에 포함된 쿠키:** 모두
+ **오리진 요청에 포함된 쿼리 문자열:** 모두

## AllViewerAndCloudFrontHeaders-2022-06
<a name="managed-origin-request-policy-all-viewer-and-cloudfront"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/33f36d7e-f396-46d9-90e0-52428a34d9dc)

이 정책에는 뷰어 요청의 모든 값(헤더, 쿠키, 쿼리 문자열)과 2022년 6월까지 릴리스된 모든 [CloudFront 헤더](adding-cloudfront-headers.md)(2022년 6월 이후 릴리스된 CloudFront 헤더는 포함되지 않음)가 포함됩니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`33f36d7e-f396-46d9-90e0-52428a34d9dc`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:** 최종 사용자 요청의 모든 헤더 및 다음 CloudFront 헤더:
  + `CloudFront-Forwarded-Proto`
  + `CloudFront-Is-Android-Viewer`
  + `CloudFront-Is-Desktop-Viewer`
  + `CloudFront-Is-IOS-Viewer`
  + `CloudFront-Is-Mobile-Viewer`
  + `CloudFront-Is-SmartTV-Viewer`
  + `CloudFront-Is-Tablet-Viewer`
  + `CloudFront-Viewer-Address`
  + `CloudFront-Viewer-ASN`
  + `CloudFront-Viewer-City`
  + `CloudFront-Viewer-Country`
  + `CloudFront-Viewer-Country-Name`
  + `CloudFront-Viewer-Country-Region`
  + `CloudFront-Viewer-Country-Region-Name`
  + `CloudFront-Viewer-Http-Version`
  + `CloudFront-Viewer-Latitude`
  + `CloudFront-Viewer-Longitude`
  + `CloudFront-Viewer-Metro-Code`
  + `CloudFront-Viewer-Postal-Code`
  + `CloudFront-Viewer-Time-Zone`
  + `CloudFront-Viewer-TLS`
+ **오리진 요청에 포함된 쿠키:** 모두
+ **오리진 요청에 포함된 쿼리 문자열:** 모두

## AllViewerExceptHostHeader
<a name="managed-origin-request-policy-all-viewer-except-host-header"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/b689b0a8-53d0-40ab-baf2-68738e2966ac)

***이 정책에는 뷰어 요청의 `Host` 헤더가 포함되지 *않지만** 뷰어 요청의 다른 값(헤더, 쿠키, 쿼리 문자열)은 모두 포함됩니다.

이 정책에는 HTTP 프로토콜, HTTP 버전, TLS 버전, 모든 디바이스 유형 및 최종 사용자 위치 헤더에 대한 추가 [CloudFront 요청 헤더](adding-cloudfront-headers.md)도 포함됩니다.

이 정책은 Amazon API Gateway 및 AWS Lambda 함수 URL 오리진과 함께 사용하기 위한 것입니다. 이러한 오리진에서는 `Host` 헤더에 CloudFront 배포의 도메인 이름이 아니라 오리진 도메인 이름이 포함될 것으로 예상합니다. 뷰어 요청의 `Host` 헤더를 이러한 오리진에 전달하면 오리진이 작동하지 않을 수 있습니다.

**참고**  
뷰어의 `Host` 헤더를 제거하기 위해 이러한 관리형 오리진 요청 정책을 사용하면 CloudFront는 오리진의 도메인 이름이 포함된 새 `Host` 헤더를 오리진 요청에 추가합니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`b689b0a8-53d0-40ab-baf2-68738e2966ac`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:** `Host` 헤더를 ****제외한** 뷰어 요청의 모든 헤더
+ **오리진 요청에 포함된 쿠키:** 모두
+ **오리진 요청에 포함된 쿼리 문자열:** 모두

## CORS-CustomOrigin
<a name="managed-origin-request-policy-cors-custom"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/59781a5b-3903-41f3-afcb-af62929ccde1)

이 정책에는 오리진이 사용자 지정 오리진일 때 CORS(Cross-Origin Resource Sharing) 요청을 활성화하는 헤더가 포함됩니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`59781a5b-3903-41f3-afcb-af62929ccde1`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:**
  + `Origin`
+ **오리진 요청에 포함된 쿠키:** 없음
+ **오리진 요청에 포함된 쿼리 문자열:** 없음

## CORS-S3Origin
<a name="managed-origin-request-policy-cors-s3"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/88a5eaf4-2fd4-4709-b370-b4c650ea3fcf)

이 정책에는 오리진이 Amazon S3 버킷일 때 CORS(Cross-Origin Resource Sharing) 요청을 활성화하는 헤더가 포함됩니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`88a5eaf4-2fd4-4709-b370-b4c650ea3fcf`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:**
  + `Origin`
  + `Access-Control-Request-Headers`
  + `Access-Control-Request-Method`
+ **오리진 요청에 포함된 쿠키:** 없음
+ **오리진 요청에 포함된 쿼리 문자열:** 없음

## Elemental-MediaTailor-PersonalizedManifests
<a name="managed-origin-request-policy-mediatailor"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/775133bc-15f2-49f9-abea-afb2e0bf67d2)

이 정책은 AWS Elemental MediaTailor 엔드포인트인 오리진과 함께 사용하도록 설계되었습니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`775133bc-15f2-49f9-abea-afb2e0bf67d2`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:**
  + `Origin`
  + `Access-Control-Request-Headers`
  + `Access-Control-Request-Method`
  + `User-Agent`
  + `X-Forwarded-For`
+ **오리진 요청에 포함된 쿠키:** 없음
+ **오리진 요청에 포함된 쿼리 문자열:** 모두

## HostHeaderOnly
<a name="managed-origin-request-policy-host-header-only"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/bf0718e1-ba1e-49d1-88b1-f726733018ae)

이 정책에는 오리진 요청의 `Host` 헤더만 포함됩니다. 쿼리 문자열이나 쿠키가 포함되지 않습니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`bf0718e1-ba1e-49d1-88b1-f726733018ae`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:** Host
+ **오리진 요청에 포함된 쿠키:** 없음
+ **오리진 요청에 포함된 쿼리 문자열:** 없음

## UserAgentRefererHeaders
<a name="managed-origin-request-policy-user-agent-referer"></a>

[CloudFront 콘솔에서 이 정책 보기](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/acba4595-bd28-49b8-b9fe-13317c0390fa)

이 정책에는 `User-Agent` 및 `Referer` 헤더만 포함됩니다. 쿼리 문자열이나 쿠키가 포함되지 않습니다.

CloudFormation, AWS CLI 또는 CloudFront API를 사용할 때 이 정책의 ID는 다음과 같습니다.

`acba4595-bd28-49b8-b9fe-13317c0390fa`

이 정책에는 다음 설정이 포함되어 있습니다.
+ **오리진 요청에 포함된 헤더:**
  + `User-Agent`
  + `Referer`
+ **오리진 요청에 포함된 쿠키:** 없음
+ **오리진 요청에 포함된 쿼리 문자열:** 없음

# CloudFront 요청 헤더 추가
<a name="adding-cloudfront-headers"></a>

CloudFront가 최종 사용자의 요청에서 원본 또는 [엣지 기능](edge-functions.md)으로 특정 HTTP 헤더를 추가하도록 CloudFront를 구성할 수 있습니다. 이러한 HTTP 헤더의 값은 최종 사용자 또는 최종 사용자 요청의 특성을 기반으로 합니다. 헤더는 최종 사용자의 디바이스 유형, IP 주소, 지리적 위치, 요청 프로토콜(HTTP 또는 HTTPS), HTTP 버전 및 TLS 연결 세부 정보, [JA3 핑거프린트](https://github.com/salesforce/ja3) 및 JA4 핑거프린트를 제공할 수 있습니다. 또한 WebSocket 헤더를 전달하도록 배포의 캐시 동작을 구성할 수 있습니다. 자세한 내용은 [CloudFront 배포에 WebSocket 사용](distribution-working-with.websockets.md) 섹션을 참조하세요.

이러한 헤더를 사용하면 정보를 확인하기 위해 직접 코드를 작성할 필요 없이 오리진 또는 엣지 함수에서 최종 사용자에 대한 정보를 수신할 수 있습니다. 오리진에서 이러한 헤더 정보를 기반으로 서로 다른 응답을 반환하는 경우, *캐시 키*에 해당 응답을 포함시켜 CloudFront에서 별도로 캐시할 수 있습니다. 예를 들어, 오리진에서는 최종 사용자가 거주하는 국가에 따라 특정 언어로 된 콘텐츠나 특정 디바이스 유형에 맞춘 콘텐츠로 응답할 수 있습니다. 오리진에서 로그 파일에 이러한 헤더를 쓸 수도 있습니다. 이 헤더를 사용하여 최종 사용자의 위치, 사용 중인 디바이스 유형 등에 대한 정보를 확인할 수 있습니다.

캐시 키에 헤더를 포함하려면 *캐시 정책*을 사용합니다. 자세한 내용은 [정책으로 캐시 키 제어](controlling-the-cache-key.md) 및 [캐시 키 이해](understanding-the-cache-key.md) 섹션을 참조하세요.

원본에서 이러한 헤더를 수신하지만 캐시 키에는 포함하지 않으려면 *원본 요청 정책*을 사용하십시오. 자세한 내용은 [정책을 통한 오리진 요청 제어](controlling-origin-requests.md) 섹션을 참조하세요.

**Topics**
+ [디바이스 유형 헤더](#cloudfront-headers-device-type)
+ [뷰어 위치 헤더](#cloudfront-headers-viewer-location)
+ [뷰어의 헤더 구조를 결정하기 위한 헤더](#cloudfront-headers-viewer-headers)
+ [TLS 관련 헤더](#tls-related-versions)
+ [기타 CloudFront 헤더](#cloudfront-headers-other)

## 디바이스 유형 헤더
<a name="cloudfront-headers-device-type"></a>

다음 헤더를 추가하여 최종 사용자의 디바이스 유형을 확인할 수 있습니다. `User-Agent` 헤더 값에 따라 CloudFront에서는 해당 헤더 값을 `true` 또는 `false`로 설정합니다. 디바이스가 둘 이상의 범주에 속하는 경우 둘 이상의 값이 `true`일 수 있습니다. 예를 들어 일부 태블릿 디바이스의 경우 CloudFront에서는 `CloudFront-Is-Mobile-Viewer`와 `CloudFront-Is-Tablet-Viewer`를 모두 `true`로 설정합니다.
+ `CloudFront-Is-Android-Viewer` – CloudFront에서 최종 사용자가 Android 운영 체제를 사용하는 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Desktop-Viewer` – CloudFront에서 최종 사용자가 데스크톱 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-IOS-Viewer` – CloudFront에서 최종 사용자가 iPhone, iPod touch, iPad 디바이스와 같은 Apple 모바일 운영 체제를 사용하는 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Mobile-Viewer` – CloudFront에서 최종 사용자가 모바일 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-SmartTV-Viewer` – CloudFront에서 최종 사용자가 스마트 TV라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Tablet-Viewer` – CloudFront에서 최종 사용자가 태블릿이라고 확인되면 `true`로 설정합니다.

## 뷰어 위치 헤더
<a name="cloudfront-headers-viewer-location"></a>

다음 헤더를 추가하여 최종 사용자의 위치를 확인합니다. CloudFront는 최종 사용자의 IP 주소에 따라 이러한 헤더의 값을 확인합니다. 이 헤더 값에 ASCII 문자가 아닌 문자가 있는 경우, CloudFront는 [RFC 3986의 섹션 1.2](https://tools.ietf.org/html/rfc3986#section-2.1)에 따라 문자를 퍼센트 인코딩합니다.
+ `CloudFront-Viewer-Address` - 최종 사용자의 IP 주소와 요청의 소스 포트를 포함합니다. 예를 들어, 헤더 값 `198.51.100.10:46532`는 최종 사용자의 IP 주소가 198.51.100.10이고 요청 소스 포트가 46532임을 의미합니다.
+ `CloudFront-Viewer-ASN` - 최종 사용자의 Autonomous System Number(ASN)를 포함합니다.
**참고**  
`CloudFront-Viewer-Address` 및 `CloudFront-Viewer-ASN`을 오리진 요청 정책에는 추가할 수 있지만 캐시 정책에는 추가할 수 없습니다.
+ `CloudFront-Viewer-Country` – 최종 사용자 국가의 두 자로 된 국가 코드가 들어 있습니다. 국가 코드 목록은 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 단원을 참조하세요.
+ `CloudFront-Viewer-City` – 최종 사용자의 도시 이름을 포함합니다.

다음 헤더를 추가하면 CloudFront는 AWS 네트워크에서 시작된 요청을 *제외한* 모든 요청에 해당 헤더를 적용합니다.
+ `CloudFront-Viewer-Country-Name` – 최종 사용자 국가의 이름을 포함합니다.
+ `CloudFront-Viewer-Country-Region` – 최종 사용자 리전을 나타내는 코드(최대 3자)를 포함합니다. 리전은 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)코드의 첫 번째 수준의 하위 항목(가장 폭넓거나 가장 덜 구체적)입니다.
+ `CloudFront-Viewer-Country-Region-Name` – 최종 사용자 리전의 이름을 포함합니다. 리전은 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)코드의 첫 번째 수준의 하위 항목(가장 폭넓거나 가장 덜 구체적)입니다.
+ `CloudFront-Viewer-Latitude` – 최종 사용자의 대략적인 위도를 포함합니다.
+ `CloudFront-Viewer-Longitude` – 최종 사용자의 대략적인 경도를 포함합니다.
+ `CloudFront-Viewer-Metro-Code` – 최종 사용자의 메트로 코드를 포함합니다. 이는 최종 사용자가 미국에 있을 때만 표시됩니다.
+ `CloudFront-Viewer-Postal-Code` – 최종 사용자의 우편 번호를 포함합니다.
+ `CloudFront-Viewer-Time-Zone` [IANA 표준 시간대 데이터베이스 형식](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)(예: `America/Los_Angeles`)으로 최종 사용자의 표준 시간대를 포함합니다.

**참고**  
`CloudFront-Viewer-City`, `CloudFront-Viewer-Metro-Code` 및 `CloudFront-Viewer-Postal-Code`를 모든 IP 주소에 사용할 수 있는 것은 아닙니다. 일부 IP 주소는 해당 정보를 얻을 수 있을 만큼 구체적으로 지리적 위치를 파악할 수 없습니다.

## 뷰어의 헤더 구조를 결정하기 위한 헤더
<a name="cloudfront-headers-viewer-headers"></a>

다음 헤더를 추가하여 전송한 헤더를 기반으로 최종 사용자를 식별할 수 있습니다. 예를 들어, 다양한 브라우저가 특정 순서로 HTTP 헤더를 전송할 수 있습니다. `User-Agent` 헤더에 지정된 브라우저가 해당 브라우저의 예상 헤더 순서와 일치하지 않는 경우 요청을 거부할 수 있습니다. 또한 `CloudFront-Viewer-Header-Count` 값이 `CloudFront-Viewer-Header-Order`의 헤더 수와 일치하지 않는 경우 요청을 거부할 수 있습니다.
+ `CloudFront-Viewer-Header-Order` — 최종 사용자의 헤더 이름을 요청된 순서대로 콜론으로 구분하여 포함합니다. 예를 들면 `CloudFront-Viewer-Header-Order: Host:User-Agent:Accept:Accept-Encoding`입니다. 7,680자 제한을 초과하는 헤더는 잘립니다.
+ `CloudFront-Viewer-Header-Count` — 최종 사용자 헤더의 총 수를 포함합니다.

## TLS 관련 헤더
<a name="tls-related-versions"></a>

다음 헤더를 추가하여 뷰어의 JA3 지문, JA4 지문, TLS 연결 세부 정보를 확인할 수 있습니다.
+ `CloudFront-Viewer-JA3-Fingerprint` — 최종 사용자의 [JA3 지문](https://github.com/salesforce/ja3)을 포함합니다. JA3 지문은 해당 요청이 알려진 클라이언트에서 온 것인지, 맬웨어인지 악성 봇인지 또는 예상되는(허용 목록에 있는) 응용 프로그램에서 온 것인지 판단하는 데 도움이 됩니다.
+ `CloudFront-Viewer-JA4-Fingerprint` - 뷰어의 JA4 지문이 포함되어 있습니다. JA3 지문과 마찬가지로 [JA4 지문](https://github.com/FoxIO-LLC/ja4)을 사용하면 해당 요청이 알려진 클라이언트에서 온 것인지, 멀웨어인지, 악성 봇인지 또는 예상되는(허용 목록에 있는) 애플리케이션에서 유입된 것인지 확인할 수 있습니다. 지문을 사용하여 HTTP 요청을 검사할 때 적용할 알려진 좋은 행위자와 나쁜 행위자의 데이터베이스를 구축할 수 있습니다. 그런 다음 애플리케이션 웹 서버 또는 [Lambda@Edge](lambda-at-the-edge.md) 및 [CloudFront Functions](cloudfront-functions.md)에서 헤더 값을 검사하여 헤더 값을 알려진 멀웨어 지문 목록과 비교하여 악성 클라이언트를 차단할 수 있습니다.
+ `CloudFront-Viewer-TLS` - 최종 사용자와 CloudFront 간의 연결에 사용된 SSL/TLS 버전, 암호, SSL/TLS 핸드셰이크 정보를 포함합니다. 헤더 값은 다음 형식입니다.

  ```
  SSL/TLS_version:cipher:handshake_information
  ```

  `handshake_information`에 대해 헤더는 다음 값 중 하나를 포함할 수 있습니다.
  + `fullHandshake` - SSL/TLS 세션에 대해 전체 핸드셰이크가 수행되었습니다.
  + `sessionResumed` - 이전 SSL/TLS 세션이 재개되었습니다.
  + `connectionReused` - 이전 SSL/TLS 연결이 재사용되었습니다.

  다음은 이 헤더에 대한 몇 가지 예시 값입니다.

  ```
  TLSv1.3:TLS_AES_128_GCM_SHA256:sessionResumed
  ```

  ```
  TLSv1.2:ECDHE-ECDSA-AES128-GCM-SHA256:connectionReused
  ```

  ```
  TLSv1.1:ECDHE-RSA-AES128-SHA256:fullHandshake
  ```

  ```
  TLSv1:ECDHE-RSA-AES256-SHA:fullHandshake
  ```

  이 헤더 값에 있을 수 있는 SSL/TLS 버전 및 암호의 전체 목록은 [최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호](secure-connections-supported-viewer-protocols-ciphers.md) 단원을 참조하세요.

**참고**  
JA3 및 JA4 지문은 SSL/TLS `Client Hello` 패킷에서 파생됩니다. 이는 HTTPS 요청에만 존재합니다.
이러한 TLS 관련 헤더의 경우 [오리진 요청 정책](controlling-origin-requests.md)에 추가할 수 있지만 [캐시 정책](controlling-the-cache-key.md)에는 추가할 수 없습니다.

## 기타 CloudFront 헤더
<a name="cloudfront-headers-other"></a>

다음 헤더를 추가하여 뷰어의 원본 요청 URI, 원본 요청 쿼리 문자열 파라미터와 값, 프로토콜, 버전을 확인할 수 있습니다.
+ `CloudFront-Error-Uri` - 뷰어로부터 받은 원본 요청 URI를 포함합니다.
+ `CloudFront-Error-Args` - 원본 요청 쿼리 문자열 파라미터 및 값을 포함합니다.
+ `CloudFront-Forwarded-Proto` – 최종 사용자의 요청 프로토콜(HTTP 또는 HTTPS)을 포함합니다.
+ `CloudFront-Viewer-Http-Version` – 최종 사용자 요청의 HTTP 버전을 포함합니다.

# 오리진 요청 정책과 캐시 정책이 함께 작동하는 방식 이해
<a name="understanding-how-origin-request-policies-and-cache-policies-work-together"></a>

CloudFront [오리진 요청 정책](controlling-origin-requests.md)을 사용하여 CloudFront가 오리진으로 보내는 요청, 즉 *오리진 요청*을 제어할 수 있습니다. 오리진 요청 정책을 사용하려면 동일한 캐시 동작에 [캐시 정책](controlling-the-cache-key.md)을 연결해야 합니다. 캐시 정책 없이 캐시 동작에 오리진 요청 정책을 사용할 수 없습니다. 자세한 내용은 [정책을 통한 오리진 요청 제어](controlling-origin-requests.md) 단원을 참조하십시오.

오리진 요청 정책과 캐시 정책은 함께 작동하여 CloudFront가 오리진 요청에 포함하는 값을 결정합니다. 캐시 정책을 사용하여 캐시 키에 지정하는 모든 URL 쿼리 문자열, HTTP 헤더 및 쿠키는 오리진 요청에 자동으로 포함됩니다. 오리진 요청 정책에 지정하는 모든 추가 쿼리 문자열, 헤더 및 쿠키도 오리진 요청에 포함됩니다(캐시 키에는 포함되지 않음).

오리진 요청 정책과 캐시 정책에는 서로 충돌하는 것처럼 보일 수 있는 설정이 있습니다. 예를 들어 한 정책에서는 특정 값을 허용하고 다른 정책에서는 차단할 수 있습니다. 다음 표에서는 오리진 요청 정책과 캐시 정책의 설정을 함께 사용할 때 CloudFront가 오리진 요청에 포함하는 값을 설명합니다. 이러한 설정은 일반적으로 모든 유형의 값(쿼리 문자열, 헤더 및 쿠키)에 적용됩니다. 단, 캐시 정책에서 모든 헤더를 지정하거나 헤더 차단 목록을 사용할 수는 없습니다.


|  |  **오리진 요청 정책**  |  |  **None(없음)**  |  **모두**  |  **허용 목록**  |  **차단 목록**  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  **캐시 정책**  | 
|  **None(없음)**  |  모든 오리진 요청에 포함된 기본값을 제외하고 뷰어 요청의 값은 오리진 요청에 포함되지 않습니다. 자세한 내용은 [정책을 통한 오리진 요청 제어](controlling-origin-requests.md) 단원을 참조하십시오.  |  뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  |  오리진 요청 정책에 지정된 값만 오리진 요청에 포함됩니다.  |  오리진 요청 정책에 지정된 값을 ****제외하고** 뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  | 
|  **모두** **참고:** 캐시 정책의 모든 헤더를 지정할 수는 없습니다.  |  뷰어 요청의 모든 쿼리 문자열과 쿠키가 오리진 요청에 포함됩니다.  |  뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  |  뷰어 요청의 모든 쿼리 문자열 및 쿠키와 오리진 요청 정책에 지정된 모든 헤더가 오리진 요청에 포함됩니다.  |  오리진 요청 정책에 차단 목록에 지정된 것을 비롯하여 뷰어 요청의 모든 쿼리 문자열 및 쿠키가 오리진 요청에 포함됩니다. 캐시 정책 설정은 오리진 요청 정책 차단 목록을 재정의합니다.  | 
|  **허용 목록**  |  뷰어 요청에 지정된 값만 오리진 요청에 포함됩니다.  |  뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  |  캐시 정책 또는 오리진 요청에 지정된 값이 오리진 요청에 포함됩니다.  |  캐시 정책에 지정된 값은 오리진 요청 정책 차단 목록에 지정되어 있더라도 오리진 요청에 포함됩니다. 캐시 정책 허용 목록은 오리진 요청 정책 차단 목록을 재정의합니다.  | 
|  **차단 목록** **참고:** 캐시 정책 차단 목록의 헤더를 지정할 수는 없습니다.  |  지정된 것을 ****제외하고** 뷰어 요청의 모든 쿼리 문자열과 쿠키가 오리진 요청에 포함됩니다.  |  뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  |  오리진 요청 정책에 지정된 값은 캐시 정책 차단 목록에 지정되어 있더라도 오리진 요청에 포함됩니다. 오리진 요청 정책 허용 목록은 캐시 정책 차단 목록을 재정의합니다.  |  캐시 정책 또는 오리진 요청 정책에 지정된 값을 ****제외하고** 뷰어 요청의 모든 값이 오리진 요청에 포함됩니다.  | 