

# 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>

CloudFront ディストリビューションで OAC を作成または設定する前に、CloudFront に MediaPackage v2 オリジンへのアクセス許可があることを確認してください。これは、CloudFront ディストリビューションを作成した後で、ディストリビューション設定で MediaPackage v2 オリジンに OAC を追加する前に行います。

IAM ポリシーを使用して、CloudFront サービスプリンシパル (`cloudfront.amazonaws.com`) がオリジンにアクセスできるようにします。ポリシーの `Condition` 要素は、MediaPackage v2 オリジンを含む CloudFront ディストリビューションを対象とするリクエストに限り、MediaPackage v2 オリジンへのアクセスを CloudFront に許可します。**これは、OAC を追加する MediaPackage v2 オリジンを持つディストリビューションです。

**Example : OAC が有効になっている CloudFront ディストリビューションへの読み取り専用アクセスを許可する IAM ポリシー**  
次のポリシーは、CloudFront ディストリビューション (`E1PDK09ESKHJWT`) に MediaPackage v2 オリジンへのアクセスを許可します。オリジンは、`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` アクションを追加します。MQAR では MediaPackage v2 オリジンに `HEAD` リクエストを送信するためにこのアクセス許可が必要です。MQAR の詳細については、「[Media Quality-Aware Resiliency](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 マネジメントコンソール、CloudFormation、AWS CLI、または CloudFront API を使用できます。

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

**OAC を作成するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ナビゲーションペインで、[**オリジンアクセス**] を選択します。

1. [**コントロール設定を作成**] を選択します。

1. **[新しい OAC を作成]** フォームで、次の操作を実行します。

   1. OAC の**名前**とオプションの**説明**を入力します。

   1. **[署名動作]** は、デフォルト設定の **[署名リクエスト (推奨)]** のままにすることをお勧めします。詳細については、「[オリジンアクセスコントロールの詳細設定](#oac-advanced-settings-mediapackage)」を参照してください。

1. **[オリジンタイプ]** で、**[MediaPackage V2]** を選択します。

1. **[作成]** を選択します。
**ヒント**  
OAC を作成したら、**名前**を書き留めておきます。次の手順では、この操作を行う必要があります。

**ディストリビューションの MediaPackage v2 オリジンに OAC を追加するには**

1. CloudFront コンソール ([https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)) を開きます。

1. OAC を追加する先の MediaPackage V2 オリジンがあるディストリビューションを選択し、**[オリジン]** タブを選択します。

1. OAC を追加する先の MediaPackage v2 オリジンを選択し、**[編集]** を選択します。

1. オリジンの **[Protocol]** (プロトコル) として **[HTTPS only]** (HTTPS のみ) を選択します。

1. **[オリジンアクセスコントロール]** ドロップダウンから、使用する OAC 名を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

ディストリビューションは、すべての CloudFront エッジロケーションへのデプロイを開始します。エッジロケーションは、新しい設定を受け取ると、MediaPackage v2 オリジンに送信するすべてのリクエストに署名します。

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

CloudFormation で OAC を作成するには、`AWS::CloudFront::OriginAccessControl` リソースタイプを使用します。次の例は、OAC を作成するための CloudFormation テンプレート構文を YAML 形式で示しています。

```
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 を追加するために必要です。

**既存のディストリビューションで MediaPackage v2 オリジンに OAC をアタッチするには (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 コールのいずれかを使用して、OAC をディストリビューションの 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) という名前の設定が含まれています。この設定では、次のオプションを使用できます。

**オリジンリクエストに常に署名する (推奨設定)**  
コンソールの [**Sign requests (recommended)**] (署名リクエスト (推奨))、または API、CLI、および CloudFormation の `always` という設定を使用することをお勧めします。この設定の場合、CloudFront は MediaPackage v2 オリジンに送信するすべてのリクエストに常に署名します。

**オリジンリクエストに署名しない**  
この設定は、コンソールでは [**リクエストに署名しない**]、または API、CLI、およびCloudFormation では `never` です。この設定を使用して、この OAC を使用するすべてのディストリビューションですべてのオリジンの OAC をオフにします。OAC を使用するすべてのオリジンとディストリビューションから OAC を 1 つずつ削除する場合と比べて、この設定で時間と労力を節約できます。この設定の場合、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` ヘッダーを上書きしない**  
この設定は、コンソールでは [**認可ヘッダーを上書きしない**] で、API、CLI、および CloudFormation では `no-override` です。この設定は、対応するビューワーリクエストに `Authorization` ヘッダーに含まれていない場合にのみ、CloudFront がオリジンリクエストに署名するよう指定する場合に使用します。この設定では、ビューワーリクエストが存在するが、ビューワーリクエストに `Authorization` ヘッダーが含まれていないときにオリジンリクエストに署名する (独自の `Authorization` ヘッダーを追加) ときに、CloudFront はビューワーリクエストから `Authorization` ヘッダーを渡します。  
ビューワーリクエストから `Authorization` ヘッダーを渡すには、このオリジンアクセスコントロールに関連付けられた MediaPackage v2 オリジンを使用するすべてのキャッシュ動作で、`Authorization` ヘッダーを[キャッシュポリシー](controlling-the-cache-key.md)に追加する必要があります。**