AWS Elemental MediaStore オリジンへのアクセスを制限する - Amazon CloudFront

AWS Elemental MediaStore オリジンへのアクセスを制限する

CloudFront には、AWS Elemental MediaStore オリジンへのアクセスを制限するためのオリジンアクセスコントロール (OAC) が用意されています。

新しいオリジンアクセスコントロールを作成する

次のトピックで説明されているステップを実行して、CloudFront で新しいオリジンアクセスコントロールを設定します。

前提条件

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

MediaStore へのアクセス許可をオリジンアクセスコントロールに付与する

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

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

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

例 CloudFront OAC への読み取り専用アクセスを許可する MediaStore コンテナポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "mediastore:GetObject" ], "Resource": "arn:aws:mediastore:<region>:111122223333:container/<container name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/<CloudFront distribution ID>" }, "Bool": { "aws:SecureTransport": "true" } } } ] }
例 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:<region>:111122223333:container/<container name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/<CloudFront distribution ID>" }, "Bool": { "aws:SecureTransport": "true" } } } ] }
注記

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

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

OAC を作成するには、AWS Management Console、AWS CloudFormation、AWS CLI、または CloudFront API を使用できます。

Console
オリジンアクセスコントロールを作成するには
  1. AWS Management Consoleにサインインし、https://console.aws.amazon.com/cloudfront/v4/home で CloudFront コンソールを開きます。

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

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

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

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

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

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

  6. [Create] (作成) を選択します。

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

ディストリビューションの MediaStore オリジンにオリジンアクセスコントロールを追加するには
  1. CloudFront コンソール (https://console.aws.amazon.com/cloudfront/v4/home) を開きます。

  2. OAC を追加する先の MediaStore オリジンがあるディストリビューションを選択し、[Origins] (オリジン) タブを選択します。

  3. OAC を追加する先の MediaStore オリジンを選択し、[Edit] (編集) を選択します。

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

  5. [Origin access control] (オリジンアクセスコントロール) ドロップダウンメニューから、使用する OAC を選択します。

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

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

CloudFormation

AWS CloudFormation を使用してオリジンアクセスコントロール (OAC) を作成するには、AWS::CloudFront::OriginAccessControl リソースタイプを使用します。以下の例は、オリジンアクセスコントロールを作成するための AWS 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」を参照してください。

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
  2. 先ほど作成した origin-access-control.yaml ファイルを開きます。ファイルを編集して OAC の名前、説明 (オプション) を追加し、SigningBehavioralways に変更します。その後、ファイルを保存します。

    その他の OAC の設定については、「オリジンアクセスコントロールの詳細設定」を参照してください。

  3. 次のコマンドを使用して、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
  2. 先ほど作成した dist-config.yaml という名前のファイルを開きます。ファイルを編集し、以下の変更を加えます。

    • Origins オブジェクトで、OriginAccessControlId という名前のフィールドに OAC の ID を追加します。

    • OriginAccessIdentity という名前のフィールドから値を削除します (存在する場合)。

    • ETag フィールドの名前を IfMatch に変更します。ただし、フィールドの値は変更しないでください。

    完了したら、ファイルを保存します。

  3. オリジンアクセスコントロールを使用するようにディストリビューションを更新するには、次のコマンドを使用します。

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

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

API

CloudFront API でオリジンアクセスコントロールを作成するには、CreateOriginAccessControl を使用します。この API コールで指定するフィールドの詳細については、AWS SDK やその他の API クライアントの API リファレンスドキュメントを参照してください。

オリジンアクセスコントロールを作成したら、以下の API コールのいずれかを使用して、それをディストリビューションの MediaStore オリジンにアタッチできます。

  • 既存のディストリビューションにアタッチするには、UpdateDistribution を使用します。

  • 新しいディストリビューションにアタッチするには、CreateDistribution を使用します。

これらの API コールの両方について、OriginAccessControlId フィールドのオリジン内にオリジンアクセスコントロール ID を指定します。これらの API コールで指定するその他フィールドの詳細については、「ディストリビューション設定リファレンス」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

オリジンアクセスコントロールの詳細設定

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

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

オリジンリクエストに常に署名する (推奨設定)

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

オリジンリクエストに署名しない

この設定は、コンソールでは [リクエストに署名しない]、または API、CLI、およびAWS CloudFormation では never です。この設定を使用して、このオリジンアクセスコントロールを使用するすべてのディストリビューションのすべてのオリジンに対して、オリジンアクセスコントロールをオフにします。これにより、オリジンアクセスコントロールを使用するすべてのオリジンとディストリビューションからコントロールを 1 つずつ削除する場合に比べて、時間と労力を節約できます。この設定の場合、CloudFront は MediaStore オリジンに送信するいずれのリクエストにも署名しません。

警告

この設定を使用するには、MediaStore オリジンがパブリックにアクセス可能である必要があります。パブリックにアクセスできない MediaStore オリジンでこの設定を使用すると、CloudFront はオリジンにアクセスできません。MediaStore オリジンは CloudFront にエラーを返し、CloudFront はこれらのエラーをビューワーに渡します。詳細については、コンテナポリシーの例: HTTPS 経由のパブリック読み取りアクセスを参照してください。

ビューワー (クライアント) の Authorization ヘッダーを上書きしない

この設定は、コンソールでは [認証ヘッダーを上書きしない] で、API、CLI、および AWS CloudFormation では no-override です。この設定は、対応するビューワーリクエストに Authorization ヘッダーに含まれていない場合にのみ、CloudFront がオリジンリクエストに署名するよう指定する場合に使用します。この設定では、ビューワーリクエストが存在するが、ビューワーリクエストに Authorization ヘッダーが含まれていないときにオリジンリクエストに署名する (独自の Authorization ヘッダーを追加) ときに、CloudFront はビューワーリクエストから Authorization ヘッダーを渡します。

警告

ビューワーリクエストから Authorization ヘッダーを渡すには、このオリジンアクセスコントロールに関連付けられた MediaStore オリジンを使用するすべてのキャッシュ動作で、Authorization ヘッダーをキャッシュポリシーに追加する必要があります。