

# AWS Elemental MediaPackage v2 오리진에 대한 액세스 제한
<a name="private-content-restricting-access-to-mediapackage"></a>

CloudFront는 MediaPackage v2 오리진에 대한 액세스를 제한하기 위한 오리진 액세스 제어(OAC)를 제공합니다.**

**참고**  
CloudFront OAC는 MediaPackage v2만 지원합니다. MediaPackage v1은 지원되지 않습니다.

**Topics**
+ [

## 새 OAC 생성
](#create-oac-overview-mediapackage)
+ [

## 오리진 액세스 제어를 위한 고급 설정
](#oac-advanced-settings-mediapackage)

## 새 OAC 생성
<a name="create-oac-overview-mediapackage"></a>

다음 주제에 설명된 단계를 완료하여 CloudFront에서 새 OAC를 설정합니다.

**Topics**
+ [

### 사전 조건
](#oac-prerequisites-mediapackage)
+ [

### MediaPackage v2 오리진에 액세스할 수 있는 CloudFront 권한 부여
](#oac-permission-to-access-mediapackage)
+ [

### OAC 생성
](#create-oac-mediapackage)

### 사전 조건
<a name="oac-prerequisites-mediapackage"></a>

OAC를 생성하고 설정하기 전에 MediaPackage v2 오리진과 함께 CloudFront 배포가 있어야 합니다. 자세한 내용은 [MediaStore 컨테이너 또는 MediaPackage 채널 사용](DownloadDistS3AndCustomOrigins.md#concept_AWS_Media) 섹션을 참조하세요.

### MediaPackage v2 오리진에 액세스할 수 있는 CloudFront 권한 부여
<a name="oac-permission-to-access-mediapackage"></a>

OAC를 만들거나 CloudFront 배포에서 설정하기 전에 CloudFront에 MediaPackage v2 오리진에 액세스할 수 있는 권한이 있는지 확인합니다. 이 작업은 CloudFront 배포를 생성한 후, 배포 구성에서 MediaPackage v2 오리진에 OAC를 추가하기 전에 수행합니다.

IAM 정책을 사용하여 CloudFront 서비스 위탁자(`cloudfront.amazonaws.com`)가 오리진에 액세스하도록 허용합니다. 이 정책의 `Condition` 요소는 요청이 MediaPackage v2 오리진을 포함하는 CloudFront 배포를 대신하는 경우에만 CloudFront가 MediaPackage v2 오리진에 액세스할 수 있도록 허용합니다.** OAC를 추가하려는 MediaPackage v2 오리진이 있는 배포입니다.

**Example : CloudFront 배포에서 OAC에 대한 읽기 전용 액세스를 허용하는 IAM 정책**  
다음 정책은 MediaPackage v2 오리진에 대한 CloudFront 배포(`E1PDK09ESKHJWT`) 액세스를 허용합니다. 오리진은 `Resource` 요소에 지정된 ARN입니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {"Service": "cloudfront.amazonaws.com"},
            "Action": "mediapackagev2:GetObject",
            "Resource": "arn:aws:mediapackagev2:us-east-1:123456789012:channelGroup/channel-group-name/channel/channel-name/originEndpoint/origin_endpoint_name",
            "Condition": {
                "StringEquals": {"AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/E1PDK09ESKHJWT"}
            }
        }
    ]
}
```

**참고**  
MQAR 기능 및 오리진 액세스 제어(OAC)를 사용 설정한 경우 IAM 정책에 `mediapackagev2:GetHeadObject` 작업을 추가합니다. MediaPackage v2 오리진으로 `HEAD` 요청을 보내려면 MQAR에 이 권한이 필요합니다. MQAR에 대한 자세한 내용은 [미디어 품질 인식 복원력](media-quality-score.md) 섹션을 참조하시기 바랍니다.
MediaPackage v2 오리진에 대한 권한이 없는 배포를 생성하는 경우 CloudFront 콘솔에서 **정책 복사**를 선택한 다음 **엔드포인트 권한 업데이트**를 선택할 수 있습니다. 그런 다음 복사한 권한을 엔드포인트에 연결할 수 있습니다. 자세한 내용은 AWS Elemental MediaPackage 사용자 설명서의 [엔드포인트 정책 필드](https://docs.aws.amazon.com/mediapackage/latest/userguide/endpoints-policy.html)를 참조합니다.**

### OAC 생성
<a name="create-oac-mediapackage"></a>

OAC를 생성하려면 AWS Management Console, CloudFormation, AWS CLI 또는 CloudFront API를 사용할 수 있습니다.

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

**OAC를 만들려면**

1. AWS Management Console에 로그인한 다음 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 탐색 창에서 **Origin access**(원본 액세스)를 선택합니다.

1. **Create control setting**(제어 설정 생성)을 선택합니다.

1. **새로운 OAC 생성** 양식에서 다음을 수행합니다.

   1. OAC의 **이름**을 입력하고 선택적으로 **설명**을 입력합니다.

   1. **서명 동작**의 경우 기본 설정인 **요청 서명(권장)**을 유지하는 것이 좋습니다. 자세한 내용은 [오리진 액세스 제어를 위한 고급 설정](#oac-advanced-settings-mediapackage) 섹션을 참조하세요.

1. **오리진 유형**으로는 **MediaPackage V2**를 선택합니다.

1. **생성**을 선택합니다.
**작은 정보**  
OAC를 생성한 후 **이름**을 기록해 둡니다. 다음 절차에서 필요합니다.

**배포의 MediaPackage v2 오리진에 OAC를 추가하려는 경우**

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

1. OAC를 추가하려는 MediaPackage V2 오리진이 있는 배포를 선택한 다음 **오리진** 탭을 선택합니다.

1. OAC를 추가할 MediaPackage V2 오리진을 선택한 다음 **편집**을 선택합니다.

1. 오리진의 **프로토콜**에 **HTTPS만 해당**을 선택합니다.

1. **오리진 액세스 제어** 드롭다운 메뉴에서 사용할 OAC를 선택합니다.

1. **변경 사항 저장**를 선택합니다.

모든 CloudFront 엣지 로케이션에 배포가 시작됩니다. 엣지 로케이션은 새 구성을 수신하면 MediaPackage V2 오리진으로 보내는 모든 요청에 서명합니다.

------
#### [ CloudFormation ]

CloudFormation에 OAC를 생성하려면 `AWS::CloudFront::OriginAccessControl` 리소스 유형을 사용합니다. 다음 예는 OAC를 생성하기 위한 YAML 형식의 CloudFormation 템플릿 구문을 보여줍니다.

```
Type: AWS::CloudFront::OriginAccessControl
Properties: 
  OriginAccessControlConfig: 
      Description: An optional description for the origin access control
      Name: ExampleOAC
      OriginAccessControlOriginType: mediapackagev2
      SigningBehavior: always
      SigningProtocol: sigv4
```

자세한 내용은 AWS CloudFormation 사용 설명서의 [AWS::CloudFront::OriginAccessControl](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html)을 참조하세요.**

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

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

**오리진 액세스 제어를 생성하려면(입력 파일과 CLI)**

1. 다음 명령을 사용하여 이름이 `origin-access-control.yaml`인 파일을 생성합니다. 이 파일에는 **create-origin-access-control** 명령에 대한 모든 입력 파라미터가 들어 있습니다.

   ```
   aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
   ```

1. 방금 생성한 `origin-access-control.yaml` 파일을 엽니다. 파일을 편집하여 OAC의 이름, 설명(선택 사항)을 추가하고 `SigningBehavior`를 `always`로 변경합니다. 그런 다음 파일을 저장합니다.

   다른 OAC 설정에 대한 자세한 내용은 [오리진 액세스 제어를 위한 고급 설정](#oac-advanced-settings-mediapackage) 섹션을 참조하세요.

1. 다음 명령으로 `origin-access-control.yaml` 파일의 입력 파라미터를 사용하여 오리진 액세스 제어를 만듭니다.

   ```
   aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml
   ```

   명령 출력에 있는 `Id` 값을 기록해 둡니다. CloudFront 배포의 MediaPackage v2 오리진에 OAC를 추가하려면 필요합니다.

**OAC를 기존 배포의 MediaPackage v2 오리진에 연결하는 방법(입력 파일과 CLI)**

1. 다음 명령을 사용하여 OAC를 추가할 CloudFront 배포에 대한 배포 구성을 저장합니다. 배포에 MediaPackage v2 오리진이 있어야 합니다.

   ```
   aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
   ```

1. 방금 생성한 `dist-config.yaml`이라는 파일을 엽니다. 파일을 편집하여 다음과 같이 변경합니다.
   + `Origins` 객체에서 `OriginAccessControlId`라는 필드에 OAC의 ID를 추가합니다.
   + `OriginAccessIdentity`라는 필드에서 값을 제거합니다(있는 경우).
   + `ETag` 필드의 이름을 `IfMatch`로 바꾸지만 필드 값은 변경하지 마세요.

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

1. 오리진 액세스 제어를 사용하도록 배포를 업데이트하려면 다음 명령을 사용합니다.

   ```
   aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml
   ```

모든 CloudFront 엣지 로케이션에 배포가 시작됩니다. 엣지 로케이션은 새 구성을 수신하면 MediaPackage v2 오리진으로 보내는 모든 요청에 서명합니다.

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

CloudFront API를 사용하여 OAC를 생성하려면 [CreateOriginAccessControl](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginAccessControl.html)을 사용합니다. 이 API 호출에서 지정하는 필드에 대한 자세한 내용은 AWS SDK 또는 기타 API 클라이언트에 대한 API 참조 설명서를 참조하세요.

OAC를 생성한 후 다음 API 호출 중 하나를 사용하여 배포의 MediaPackage v2 오리진에 연결할 수 있습니다.
+ 기존 배포에 연결하려면 [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 호출에 대해 오리진 내부의 `OriginAccessControlId` 필드에 OAC ID를 제공합니다. 이러한 API 호출에서 지정하는 다른 필드에 대한 자세한 내용은 [모든 배포 설정 참조](distribution-web-values-specify.md)와 AWS SDK 또는 기타 API 클라이언트에 대한 API 참조 설명서를 참조하세요.

------

## 오리진 액세스 제어를 위한 고급 설정
<a name="oac-advanced-settings-mediapackage"></a>

CloudFront OAC 기능에는 특정 사용 사례만을 위한 고급 설정이 포함되어 있습니다. 고급 설정이 특별히 필요한 경우가 아니면 권장 설정을 사용하세요.

OAC에는 **서명 동작**(콘솔) 또는 `SigningBehavior`(API, CLI 및 CloudFormation)라는 설정이 포함되어 있습니다. 이 설정은 다음 옵션을 제공합니다.

**항상 오리진 요청에 서명(권장 설정)**  
이 설정의 이름은 콘솔에서 **서명 요청(권장)**이고 API, CLI, CloudFormation에서 `always`이며, 이 설정을 사용하는 것이 좋습니다. 이 설정을 사용하면 CloudFront가 항상 MediaPackage v2 오리진으로 보내는 모든 요청에 서명합니다.

**오리진 요청 서명 안 함**  
이 설정의 이름은 콘솔에서 **Do not sign requests**(요청 서명 안 함)이고 API, CLI, CloudFormation에서 `never`입니다. 이 OAC를 사용하는 모든 배포의 모든 오리진에 대한 OAC를 끄려면 이 설정을 사용합니다. 오리진 액세스 제어를 사용하는 모든 오리진 및 배포에서 OAC를 하나씩 제거하는 것과 비교하여 시간과 노력을 절약할 수 있습니다. 이 설정을 사용하면 CloudFront가 MediaPackage v2 오리진으로 보내는 모든 요청에 서명하지 않습니다.  
이 설정을 사용하려면 MediaPackage v2 오리진에 공개적으로 액세스할 수 있어야 합니다. 공개적으로 액세스할 수 없는 MediaPackage v2 오리진에 이 설정을 사용하는 경우 CloudFront가 오리진에 액세스할 수 없습니다. MediaPackage v2 오리진은 CloudFront에 오류를 반환하고 CloudFront 해당 오류를 뷰어에 전달합니다. 자세한 내용은 AWS Elemental MediaPackage 사용 설명서의 [MediaPackage의 정책 및 권한](https://docs.aws.amazon.com/mediapackage/latest/userguide/policies-permissions.html)에 대한 MediaPackage v2 정책 예제를 참조하세요.**

**뷰어(클라이언트) `Authorization` 헤더 재정의 안 함**  
이 설정의 이름은 콘솔에서 **Do not override authorization header**(승인 헤더 재정의 안 함)이고 API, CLI, CloudFormation에서 `no-override`입니다. 해당 뷰어 요청에 `Authorization` 헤더가 포함되지 않은 경우에만 CloudFront에서 오리진 요청에 서명하도록 하려면 이 설정을 사용합니다. 이 설정을 사용하면 CloudFront에서는 뷰어 요청에 `Authorization` 헤더가 있는 경우 이를 전달하지만 뷰어 요청에 `Authorization` 헤더가 포함되어 있지 않으면 오리진 요청에 서명합니다(자체 `Authorization` 헤더 추가).  
뷰어 요청에서 `Authorization` 헤더를 전달하려면 이 오리진 액세스 제어와 연결된 MediaPackage v2 오리진을 사용하는 모든 캐시 동작에 대한 `Authorization` 헤더를 [캐시 정책](controlling-the-cache-key.md)에 반드시** 추가해야 합니다.