Amazon S3 オリジンへのアクセスの制限 - Amazon CloudFront

Amazon S3 オリジンへのアクセスの制限

Amazon S3 バケットをオリジンとして CloudFront を使用する場合、以下の利点が得られるような方法で CloudFront と Amazon S3 を設定できます。

  • Amazon S3 バケットへのアクセスを制限して、パブリックにアクセスできないようにします

  • ビューワー (ユーザー) が、指定された CloudFront ディストリビューションを介してのみバケット内のコンテンツにアクセスできるようにします。つまり、ユーザーがバケットから直接コンテンツにアクセスしたり、意図しない CloudFront ディストリビューションを介してコンテンツにアクセスしたりできないようにします。

そのためには、認証されたリクエストを Amazon S3 に送信するように CloudFront を設定し、CloudFront からの認証済みリクエストへのアクセスのみを許可するように Amazon S3 を設定します。CloudFront には、認証済みリクエストを Amazon S3 オリジンに送信するために、オリジンアクセスコントロール (OAC) とオリジンアクセスアイデンティティ (OAI) という 2 つの方法が用意されています。OAC は以下をサポートしているため、OAC の使用をお勧めします。

  • すべての AWS リージョンのすべての Amazon S3 バケット (2022 年 12 月以降に開始されたオプトインリージョンを含む)

  • AWS KMS による Amazon S3 サーバー側の暗号化 (SSE-KMS)

  • Amazon S3 に対する動的なリクエスト (POSTPUT など)

OAI は上記のリストのシナリオでは機能しないか、それらのシナリオでは追加の回避策が必要です。以下のトピックでは、Amazon S3 オリジンで OAC を使用する方法について説明します。OAI から OAC への移行に関する詳細については、「オリジンアクセスアイデンティティ (OAI) からオリジンアクセスコントロール (OAC) への移行」を参照してください。

注記

オリジンが、ウェブサイトエンドポイントとして設定されている Amazon S3 バケットである場合、CloudFront でカスタムオリジンとして設定する必要があります。つまり、OAC (または OAI) を使用することはできません。ただし、カスタムヘッダーを設定し、それらを要求するようにオリジンを設定することで、カスタムオリジンへのアクセスを制限できます。詳しくは、「 カスタムオリジン上のファイルへのアクセス制限」を参照してください。

トピック

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

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

前提条件

オリジンアクセスコントロール (OAC) を作成して設定する前に、Amazon S3 バケットオリジンを持つ CloudFront ディストリビューションが必要です。このオリジンは、ウェブサイトエンドポイントとして設定されたバケットではなく、通常の S3 バケットである必要があります。S3 バケットオリジンを使用した CloudFront ディストリビューションのセットアップの詳細については、「簡単な CloudFront ディストリビューションの開始方法」を参照してください。

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

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

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

バケットポリシーの追加または変更の詳細については、Amazon S3 ユーザーガイドの「Amazon S3 コンソールを使用したバケットポリシーの追加」を参照してください。

以下の例は、S3 オリジンへのアクセスを CloudFront OAC に許可する S3 バケットポリシーを示しています。以下の例で、次の操作を行います。

  • DOC-EXAMPLE-BUCKET を S3 バケットオリジンの名前に置き換えます。

  • 111122223333 を、CloudFront ディストリビューションと S3 バケットオリジンを含む AWS アカウント ID に置き換えます

  • EDFDVBD6EXAMPLE を、CloudFront ディストリビューションの ID に置き換えます

例 CloudFront OAC への読み取り専用アクセスを許可する S3 バケットポリシー

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } }

例 CloudFront OAC への読み取りと書き込みアクセスを許可する S3 バケットポリシー

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } }

SSE-KMS

S3 バケットオリジン内のオブジェクトが AWS Key Management Service (SSE-KMS) でのサーバー側の暗号化を使用して暗号化されている場合は、OAC に AWS KMS キーを使用するアクセス許可があることを確認する必要があります。KMS キーを使用するアクセス許可を OAC に付与するには、KMS キーポリシーにステートメントを追加します。キーポリシーを変更する方法については、AWS Key Management Service デベロッパーガイドの「キーポリシーの変更」を参照してください。

次の例は、OAC による KMS キーの使用を許可する KMS キーポリシーステートメントを示しています。以下の例で、次の操作を行います。

  • 111122223333 を、CloudFront ディストリビューション、S3 バケットオリジン、および KMS キーを含む AWS アカウント ID に置き換えます

  • EDFDVBD6EXAMPLE を、CloudFront ディストリビューションの ID に置き換えます

例 CloudFront OAC による SSE-KMS の KMS キーへのアクセスを許可する KMS キーポリシーステートメント

{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }

オリジンアクセスコントロールの作成

オリジンアクセスコントロール (OAC) を作成するには、AWS Management Console、AWS CloudFormation、AWS CLI、または CloudFront API を使用します。

Console

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

  1. AWS Management Console にサインインし、https://console.aws.amazon.com/cloudfront/v3/home で CloudFront コンソールを開きます。

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

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

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

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

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

  5. [Create] を選択します。

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

ディストリビューションの S3 オリジンにオリジンアクセスコントロールを追加するには

  1. https://console.aws.amazon.com/cloudfront/v3/home で CloudFront コンソールを開きます。

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

  3. OAC を追加する S3 オリジンを選択し、[編集] を選択します。

  4. [オリジンアクセス] セクションで、[オリジンアクセスコントロール設定 (推奨)] を選択します。

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

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

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

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: s3 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
    注記

    yaml-input オプションは、AWS CLI のバージョン 2 でしか使用できません。AWS CLI のバージョン 1 では、JSON 形式の入力ファイルを生成できます。詳細については、AWS Command Line Interface ユーザーガイドの「JSON または YAML 入力ファイルから AWS CLI スケルトンと入力パラメータを生成」を参照してください。

  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 ディストリビューションの S3 バケットオリジンに OAC を追加するために必要です。

OAC を既存のディストリビューションの S3 バケットオリジンにアタッチするには (入力ファイルを含む CLI)

  1. 以下のコマンドを使用して、OAC を追加する CloudFront ディストリビューションのディストリビューション設定を保存します。ディストリビューションには S3 バケットオリジンが必要です。distribution_ID をディストリビューション ID に置き換えます。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
    注記

    --output yaml オプションは、AWS CLI のバージョン 2 でしか使用できません。AWS CLI のバージョン 1 では、JSON 形式で出力を生成できます。詳細については、AWS Command Line Interfaceユーザーガイドの「AWS CLI からのコマンド出力の制御」を参照してください。

  2. 先ほど作成した dist-config.yaml という名前のファイルを開きます。ファイルを編集し、次の変更を加えます。

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

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

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

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

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

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml

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

API

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

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

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

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

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

オリジンアクセスアイデンティティ (OAI) からオリジンアクセスコントロール (OAC) への移行

レガシーのオリジンアクセスアイデンティティ (OAI) からオリジンアクセスコントロール (OAC) に移行するには、まず S3 バケットオリジンを更新して、OAI と OAC の両方がバケットのコンテンツにアクセスできるようにします。これにより、移行中に CloudFront がバケットにアクセスできなくなる状況を回避できます。OAI と OAC の両方が S3 バケットにアクセスできるようにするには、バケットポリシーを更新し、プリンシパルの種類ごとに 1 つずつ、2 つのステートメントを含めます。

次の S3 バケットポリシー例では、OAI と OAC の両方に S3 オリジンへのアクセスを許可しています。以下の例で、次の操作を行います。

  • DOC-EXAMPLE-BUCKET を S3 ベケットオリジンの名前に置き換えます。

  • 111122223333 を、CloudFront ディストリビューションと S3 バケットオリジンを含む AWS アカウント ID に置き換えます

  • EDFDVBD6EXAMPLE を、CloudFront ディストリビューションの ID に置き換えます

  • EH1HDMB1FH2TC を、オリジンアクセスアイデンティティの ID に置き換えます

例 OAI および OAC への読み取り専用アクセスを許可する S3 バケットポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

S3 オリジンのバケットポリシーを更新して OAI と OAC の両方へのアクセスを許可したら、OAI の代わりに OAC を使用するようにディストリビューション設定を更新できます。詳しくは、「新しいオリジンアクセスコントロールの作成」を参照してください。

ディストリビューションが完全にデプロイされたら、OAI へのアクセスを許可するバケットポリシー内のステートメントを削除できます。詳しくは、「S3 バケットへのアクセス許可をオリジンアクセスコントロールに付与する」を参照してください。

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

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

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

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

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

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

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

警告

この設定を使用するには、S3 バケットオリジンがパブリックにアクセス可能である必要があります。パブリックにアクセスできない S3 バケットオリジンでこの設定を使用すると、CloudFront はオリジンにアクセスできません。S3 バケットオリジンは CloudFront にエラーを返し、CloudFront はそれらのエラーをビューワーに渡します。

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

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

警告

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

オリジンアクセスアイデンティティの使用 (レガシー、非推奨)

CloudFront のオリジンアクセスアイデンティティ (OAI) はオリジンアクセスコントロール (OAC) と類似した機能を提供しますが、すべてのシナリオで機能するわけではありません。これが、代わりに OAC の使用をお勧めする理由です。具体的には、OAI は以下をサポートしていません。

  • オプトインリージョンを含む、すべての AWS リージョンの Amazon S3 バケット

  • AWS KMS による Amazon S3 サーバー側の暗号化 (SSE-KMS)

  • Amazon S3 に対する動的なリクエスト (POST,PUTなど)

  • 2022 年 12 月以降に開始された新しい AWS リージョン

OAI から OAC への移行に関する詳細については、「オリジンアクセスアイデンティティ (OAI) からオリジンアクセスコントロール (OAC) への移行」を参照してください。

CloudFront コンソールを使用して OAI を作成するか、OAI をディストリビューションに追加する場合、バケットにアクセスするための OAI の許可を与えるように Amazon S3 バケットポリシーを自動的に更新できます。あるいは、このバケットポリシーの手動での作成または更新を選択することができます。どちらの方法を使用する場合でも、アクセス許可を確認して次のことを確認する必要があります。

  • CloudFront OAI は、CloudFront 経由でリクエストしているビューワーに代わってバケット内のファイルにアクセスできます。

  • ビューワーは、Amazon S3 URL を使用して CloudFront の外のファイルにアクセスすることができません。

重要

CloudFront でサポートされるすべての HTTP メソッドを受け入れて転送するように CloudFront を設定する場合は、必ず CloudFront OAI に目的のアクセス許可を付与してください。例えば、DELETE メソッドを使用するリクエストを受け入れて転送するように CloudFront を設定する場合、適切なファイルのみをビューワーが削除できるように、DELETE リクエストを適切に処理するバケットポリシーを設定してください。

Amazon S3 バケットポリシーの使用

Amazon S3 バケット内のファイルへのアクセス許可を CloudFront OAI に付与するには、次の方法でバケットポリシーを作成または更新します。

  • Amazon S3 コンソールで、Amazon S3 バケットの [アクセス許可] タブを使用する。

  • Amazon S3 API の PutBucketPolicy を使用する。

  • CloudFront コンソールを使用する。CloudFront コンソールでオリジン設定に OAI を追加するときに、[Yes, update the bucket policy] (はい、バケットポリシーを更新します) を選択すると、ユーザーに代わってバケットポリシーを更新するように CloudFront に指示できます。

バケットポリシーを手動で更新する場合は、次の点を確認してください。

  • ポリシーで正しい OAI を Principal として指定します。

  • ビューワーに代わってオブジェクトにアクセスするために必要なアクセス許可を OAI に付与します。

詳細については、次のセクションを参照してください。

バケットポリシーで OAI を Principal として指定

Amazon S3 バケットポリシーで Principal として OAI を指定するには、OAI の ID を含む OAI の Amazon リソースネーム (ARN) を使用します。例:

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }

上記の例を使用するには、EH1HDMB1FH2TC を OAI の ID に置き換えます。OAI の ID を確認するには、CloudFront コンソールの「オリジンアクセスアイデンティティページ」を参照するか、CloudFront API の ListCloudFrontOriginAccessIdentities を使用します。

OAI にアクセス許可を付与

Amazon S3 バケット内のオブジェクトにアクセスするためのアクセス許可を OAI に付与するには、特定の Amazon S3 API オペレーションに関連するポリシーでアクションを使用します。例えば、s3:GetObject アクションは、OAI がバケット内のオブジェクトを読み取ることを許可します。詳細については、次のセクションの例を参照するか、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 のアクション」を参照してください。

Amazon S3 バケットポリシーの例

以下の例は、S3 バケットへのアクセスを CloudFront OAI に許可する Amazon S3 バケットポリシーを示しています。これらの例を使用するには、次の手順に従います。

例 OAI に読み取りアクセスを許可する Amazon S3 バケットポリシー

次の例では、指定されたバケット (s3:GetObject) 内のオブジェクトの読み取りを OAI に許可します。

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

例 OAI に読み取りおよび書き込みアクセスを許可する Amazon S3 バケットポリシー

次の例では、指定されたバケット (s3:GetObjects3:PutObject) 内のオブジェクトの読み取りおよび書き込みを OAI に許可します。これにより、ビューワーは CloudFront を介して Amazon S3 バケットにファイルをアップロードできます。

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Amazon S3 オブジェクト ACL の使用 (非推奨)

重要

Amazon S3 バケットポリシーを使用して OAI へのアクセスを S3 バケットに与えることを推奨します。このセクションで説明したように ACL を使用できますが、お勧めしません。

Amazon S3 では所有権が強化されたバケットS3 オブジェクトの所有権を設定することを推奨しており、すなわち、バケットとその中のオブジェクトについて ACL が無効になっているということです。この設定を [オブジェクトの所有権] に適用する場合は、バケットポリシーを使用して OAI へのアクセスを与える必要があります (前のセクションを参照)。

次のセクションは、ACL を必要とするレガシーユースケースのみを対象としています。

Amazon S3 バケット内のファイルへのアクセス許可を CloudFront OAI に付与するには、次の方法でファイルの ACL を作成または更新します。

ACL を使用して OAI へのアクセスを許可する場合、Amazon S3 の正規ユーザー ID を使用して OAI を指定する必要があります。これは、CloudFront コンソールのオリジンアクセスアイデンティティページにある [Amazon S3 正規ユーザー ID] の値です。CloudFront API を使用している場合は、OAI の作成時に返された S3CanonicalUserId 要素の値を使用するか、CloudFront API の ListCloudFrontOriginAccessIdentities を呼び出します。

新しい Amazon S3 リージョンでは、リクエストの認証用に署名バージョン 4 を使用する必要があります。(各 Amazon S3 リージョンでサポートされている署名バージョンについては、AWS 一般リファレンスにある「Amazon Simple Storage Service エンドポイントおよびクォータ」を参照してください)。オリジンアクセスアイデンティティを使用しており、バケットが、署名バージョン 4 が必要なリージョンの 1 つにある場合、以下の点に注意してください。

  • DELETEGETHEADOPTIONS、および PATCH リクエストは条件なしでサポートされます。

  • CloudFront に PUT リクエストを送信してファイルを Amazon S3 バケットにアップロードする場合は、リクエストに x-amz-content-sha256 ヘッダーを追加する必要があります。ヘッダー値にはリクエストの本文の SHA-256 ハッシュが含まれている必要があります。詳細については、Amazon Simple Storage Service API リファレンスの「一般的なリクエストヘッダー」ページで x-amz-content-sha256 ヘッダーに関するドキュメントを参照してください。

  • POST リクエストはサポートされません。