

# 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)
+ [MediaStore オリジンにアクセスするアクセス許可を CloudFront に付与する](#oac-permission-to-access-mediastore)
+ [オリジンアクセスコントロールを作成する](#create-oac-mediastore)

### 前提条件
<a name="oac-prerequisites-mediastore"></a>

オリジンアクセスコントロール (OAC) を作成して設定する前に、MediaStore オリジンを持つ CloudFront ディストリビューションが必要です。

### MediaStore オリジンにアクセスするアクセス許可を CloudFront に付与する
<a name="oac-permission-to-access-mediastore"></a>

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

MediaStore コンテナポリシーを使用して、CloudFront サービスプリンシパル (`cloudfront.amazonaws.com`) がオリジンにアクセスできるようにします。ポリシーの `Condition` 要素を使用して、MediaStore オリジンを含む CloudFront ディストリビューションに代わってリクエストが行われた場合にのみ MediaStore コンテナへのアクセスを CloudFront に許可します。これは、OAC を追加する MediaStore オリジンを持つディストリビューションです。

以下の例は、MediaStore オリジンへのアクセスを CloudFront ディストリビューションに許可する MediaStore コンテナポリシーを示しています。

**Example OAC が有効になっている CloudFront ディストリビューションへの読み取り専用アクセスを許可する 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 OAC が有効になっている CloudFront ディストリビューションへの読み取りおよび書き込みアクセスを許可する 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"
                    }
                }
            }
        ]
}
```

**注記**  
書き込みアクセスを許可するには、**許可されている HTTP メソッド**の設定により、CloudFront ディストリビューションの動作設定に `PUT` を含める必要があります。

### オリジンアクセスコントロールを作成する
<a name="create-oac-mediastore"></a>

OAC を作成するには、AWS マネジメントコンソール、CloudFormation、AWS CLI、または CloudFront API を使用できます。

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

**オリジンアクセスコントロールを作成するには**

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

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

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

1. [**コントロール設定を作成**] フォームで、以下の操作を行います。

   1. [**詳細**] ペインに、[**名前**] と (オプションで) オリジンアクセスコントロールの [**説明**] を入力します。

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

1. **[Origin type]** (オリジンタイプ) ドロップダウンから [MediaStore] を選択します。

1. **[作成]** を選択します。

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

**ディストリビューションの 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` リソースタイプを使用します。以下の例は、オリジンアクセスコントロールを作成するための CloudFormation テンプレート構文を YAML 形式で示しています。

```
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 ディストリビューションのディストリビューション設定を保存します。ディストリビューションには MediaStoore オリジンが必要です。

   ```
   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 オリジンアクセスコントロール機能には、特定のユースケースのみを対象とした詳細設定が含まれています。詳細設定が特に必要でない限り、推奨設定を使用してください。

オリジンアクセスコントロールには、[**署名動作**] (コンソール)、または `SigningBehavior` (API、CLI、および CloudFormation) という設定が含まれています この設定では、次のオプションを使用できます。

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

**オリジンリクエストに署名しない**  
この設定は、コンソールでは [**リクエストに署名しない**]、または API、CLI、およびCloudFormation では `never` です。この設定を使用して、このオリジンアクセスコントロールを使用するすべてのディストリビューションのすべてのオリジンに対して、オリジンアクセスコントロールをオフにします。これにより、オリジンアクセスコントロールを使用するすべてのオリジンとディストリビューションからコントロールを 1 つずつ削除する場合に比べて、時間と労力を節約できます。この設定の場合、CloudFront は MediaStore オリジンに送信するいずれのリクエストにも署名しません。  
この設定を使用するには、MediaStore オリジンがパブリックにアクセス可能である必要があります。パブリックにアクセスできない MediaStore オリジンでこの設定を使用すると、CloudFront はオリジンにアクセスできません。MediaStore オリジンは CloudFront にエラーを返し、CloudFront はこれらのエラーをビューワーに渡します。詳細については、コンテナポリシーの例: [HTTPS 経由のパブリック読み取りアクセス](https://docs.aws.amazon.com/mediastore/latest/ug/policies-examples-public-https.html)を参照してください。

**ビューワー (クライアント) の `Authorization` ヘッダーを上書きしない**  
この設定は、コンソールでは [**認可ヘッダーを上書きしない**] で、API、CLI、および CloudFormation では `no-override` です。この設定は、対応するビューワーリクエストに `Authorization` ヘッダーに含まれていない場合にのみ、CloudFront がオリジンリクエストに署名するよう指定する場合に使用します。この設定では、ビューワーリクエストが存在するが、ビューワーリクエストに `Authorization` ヘッダーが含まれていないときにオリジンリクエストに署名する (独自の `Authorization` ヘッダーを追加) ときに、CloudFront はビューワーリクエストから `Authorization` ヘッダーを渡します。  
ビューワーリクエストから `Authorization` ヘッダーを渡すには、このオリジンアクセスコントロールに関連付けられた MediaStore オリジンを使用するすべてのキャッシュ動作で、`Authorization` ヘッダーを[キャッシュポリシー](controlling-the-cache-key.md)に追加する必要があります。