Cross−Origin Resource Sharing (CORS) の使用
Cross−Origin Resource Sharing (CORS) は、特定のドメインにロードされたクライアントウェブアプリケーションが異なるドメイン内のリソースと通信する方法を定義します。Amazon S3 の CORS のサポートによって、Amazon S3 でリッチなクライアント側ウェブアプリケーションを構築し、Amazon S3 リソースへのクロスオリジンアクセスを選択的に許可できます。
このセクションでは、CORS の概要を示します。サブトピックでは、Amazon S3 コンソールを使用するか、Amazon S3 REST API や AWS SDK を使用して、プログラムによって CORS を有効にする方法について説明します。
Cross−Origin Resource Sharing: ユースケースのシナリオ
CORS のユースケースの例を以下に示します。
シナリオ 1
「Amazon S3 を使用して静的ウェブサイトをホスティングする」で説明されているように、website
という名前の Amazon S3 バケットでウェブサイトをホストしているとします。ユーザーは、次のウェブサイトエンドポイントをロードします。
http://website.s3-website.us-east-1.amazonaws.com
このバケットに保存されているウェブページで JavaScript を使用し、バケットの Amazon S3 の API エンドポイント website.s3.us-east-1.amazonaws.com
を使用して、同じバケットに対して認証済みの GET および PUT リクエストを行います。ブラウザは通常、それらのリクエストを許可しないように、JavaScript をブロックしますが、CORS を使用することにより、website.s3-website.us-east-1.amazonaws.com
からのクロスオリジンリクエストを明示的に有効にするようにバケットを設定できます。
シナリオ 2
S3 バケットからウェブフォントをホストする必要があるとします。ここでも、ブラウザでウェブフォントを読み込むために CORS チェック (プリフライトチェックと呼ばれます) が必要です。ウェブフォントをホストしているバケットを、いずれのオリジンもこれらのリクエストを実行できるように設定します。
Amazon S3 でのバケットの CORS 設定の評価方法
Amazon S3 がブラウザからプリフライトリクエストを受け取ると、バケットの CORS 設定を評価し、受信ブラウザリクエストに一致する最初の CORSRule
ルールを使用して、クロスオリジンリクエストを有効にします。ルールが一致するには、次の条件を満たしている必要があります。
-
バケットへの CORS リクエストの
Origin
ヘッダーは、CORS 設定のAllowedOrigins
エレメントのオリジンと一致している必要があります。 -
バケットへの CORS リクエストの
Access-Control-Request-Method
で指定されている HTTP メソッドは、CORS 設定のAllowedMethods
エレメントに含まれているメソッドと一致している必要があります。 -
プリフライトリクエストの
Access-Control-Request-Headers
ヘッダーに含まれているヘッダーは、CORS 設定のAllowedHeaders
エレメントのヘッダーと一致している必要があります。
注記
バケットの CORS 設定を有効にすると、ACL とポリシーが引き続き適用されます。
Object Lambda アクセスポイントで CORS をサポートする方法
S3 Object Lambda がブラウザからリクエストを受信するか、リクエストに Origin
ヘッダーが含まれている場合、S3 Object Lambda は常に “AllowedOrigins":"*"
ヘッダーフィールドを追加します。
CORS の使用の詳細については、次のトピックを参照してください。