

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

CloudFront는 AWS Elemental MediaStore 오리진에 대한 액세스를 제한할 수 있도록 *오리진 액세스 제어*(OAC)를 제공합니다.

**Topics**
+ [

## 새 오리진 액세스 제어 생성
](#create-oac-overview-mediastore)
+ [

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

## 새 오리진 액세스 제어 생성
<a name="create-oac-overview-mediastore"></a>

다음 주제에 설명된 단계를 완료하여 CloudFront에서 새 오리진 액세스 제어를 설정합니다.

**Topics**
+ [

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

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

### 오리진 액세스 제어 생성
](#create-oac-mediastore)

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

오리진 액세스 제어(OAC)를 생성하고 설정하기 전에 MediaStore 오리진과 함께 CloudFront 배포가 있어야 합니다.

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

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

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

다음은 CloudFront 배포에서 MediaStore 오리진에 액세스할 수 있도록 허용하는 MediaStore 컨테이너 정책의 예제입니다.

**Example : CloudFront 배포에서 OAC에 대한 읽기 전용 액세스를 허용하도록 사용 설정된 MediaStore 컨테이너 정책**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadOnly",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject"
                ],
                "Resource": "arn:aws:mediastore:us-east-1:111122223333:container/<container name>/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**Example : CloudFront 배포에서 OAC에 대한 읽기 및 쓰기 액세스를 허용하도록 사용 설정된 MediaStore 컨테이너 정책**    
****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipalReadWrite",
                "Effect": "Allow",
                "Principal": {
                  "Service": "cloudfront.amazonaws.com"
                },
                "Action": [ 
                  "mediastore:GetObject",
                  "mediastore:PutObject"
                ],
                "Resource": "arn:aws:mediastore:us-east-1:111122223333:container/container-name/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
                    },
                    "Bool": {
                      "aws:SecureTransport": "true"
                    }
                }
            }
        ]
}
```

**참고**  
쓰기 액세스를 허용하려면 CloudFront 배포의 동작 설정에 `PUT`을 포함하기 위해 **Allowed HTTP methods**(허용된 HTTP 메서드)를 구성해야 합니다.

### 오리진 액세스 제어 생성
<a name="create-oac-mediastore"></a>

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

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

**오리진 액세스 제어를 생성하려면**

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. **Create control setting**(제어 설정 생성) 양식을 사용하여 다음을 수행합니다.

   1. **Details**(세부 정보) 창에서 오리진 액세스 제어의 **Name**(이름) 및 선택적 **Description**(설명)을 입력합니다.

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

1. **Origin type**(오리진 유형) 드롭다운에서 MediaStore를 선택합니다.

1. **생성(Create)**을 선택합니다.

   OAC를 생성한 후 **Name**(이름)을 기록해 둡니다. 다음 절차에서 필요합니다.

**배포의 MediaStore 오리진에 오리진 액세스 제어를 추가하는 방법**

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

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

1. OAC를 추가할 MediaStore 오리진을 선택한 다음 **Edit**(편집)을 선택합니다.

1. 오리진의 **Protocol**(프로토콜)에 **HTTPS only**(HTTPS만 해당)를 선택합니다.

1. **Origin access control**(원본 액세스 제어) 드롭다운 메뉴에서 사용할 OAC를 선택합니다.

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

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

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

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

```
Type: AWS::CloudFront::OriginAccessControl
Properties: 
  OriginAccessControlConfig: 
      Description: An optional description for the origin access control
      Name: ExampleOAC
      OriginAccessControlOriginType: mediastore
      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-mediastore) 섹션을 참조하세요.

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

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

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

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

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

   ```
   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 엣지 로케이션에 배포가 시작됩니다. 엣지 로케이션은 새 구성을 수신하면 MediaStore 오리진으로 보내는 모든 요청에 서명합니다.

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

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

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

------

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

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

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

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

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

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