バケットの仮想ホスティング - Amazon Simple Storage Service

バケットの仮想ホスティング

仮想ホスティングとは、単一のウェブサーバーから複数のウェブサイトにサービスを提供することです。サイトを区別する方法の 1 つとして、単なる URI のパス名部分ではなく、リクエストの明確なホスト名を使用します。通常の Amazon S3 REST リクエストは、リクエスト URI パスのスラッシュで区切られた先頭コンポーネントを使用してバケットを指定します。これに対し Amazon S3 仮想ホスティングでは、HTTP Host ヘッダーを使用することで、REST API 呼び出しでバケットを指定することができます。実際には、Amazon S3 は Host を、ほとんどのバケットは https://bucketname.s3.Region.amazonaws.com で自動的にアクセス可能である意味であると解釈します (限定されたタイプのリクエストの場合)。Amazon S3 のリージョンとエンドポイントの詳細なリストについては、AWS AWS 全般リファレンスの「Amazon S3リージョンとエンドポイント」を参照してください。

仮想ホスティングには、他の利点もあります。登録されているドメイン名を使用してバケットの名前を指定し、その名前を Amazon S3 の DNS エイリアスにすることによって、Amazon S3 のリソースの URL を自由にカスタマイズすることができます (例: http://my.bucketname.com/ など)。バケットの仮想サーバーの「ルートディレクトリ」に公開することもできます。多くの既存のアプリケーションがこの標準ロケーションでファイルを検索するため、この機能は重要です。たとえば、favicon.icorobots.txtcrossdomain.xml はすべてルートで見つかることが見込まれています。

重要

SSL と共に仮想ホスティング形式のバケットを使用した場合、SSL ワイルドカード証明書は、ドット (「.」) を含まないバケットのみと一致します。この問題を回避するには、HTTP を使用するか、または独自の証明書検証ロジックを記述します。詳細については、「Amazon S3 パスの非推奨プラン」を参照してください。

パス形式のリクエスト

現在、Amazon S3 は、すべてのリージョンで仮想ホスト形式アクセスおよびパス形式アクセスをサポートしていますが、変更されます(以下の 重要事項 メモを参照)。

Amazon S3 では、パス形式の URLは以下に示す形式に従います。

https://s3.Region.amazonaws.com/bucket-name/key name

たとえば、mybucket という名前のバケットを 米国西部 (オレゴン) リージョンで作成する場合に、そのバケットで puppy.jpg オブジェクトにアクセスする場合、次のパス形式の URL を使用できます。

https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg
重要

2020年9月30日以降に作成されたバケットは、仮想ホスト形式のリクエストのみをサポートします。パス形式のリクエストは、この日以前に作成されたバケットを継続的にサポートします。詳細情報については、 Amazon S3 パスの非推奨プラン – 続き を参照してください。

仮想ホスティング形式のリクエスト

仮想ホスト形式の URI では、バケット名は URL のドメイン名の一部です。

Amazon S3 仮想ホスティング形式の URL は以下に示す形式に従います。

https://bucket-name.s3.Region.amazonaws.com/key name

この例では、my-bucket はバケット名、米国西部(オレゴン)はリージョン、puppy.png はキー名です。

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

HTTP ホストヘッダーバケット仕様

GET リクエストが SSL エンドポイントを使用しないかぎり、HTTP Host ヘッダーを使用してリクエストに対してバケットを指定できます。REST リクエストの Host ヘッダーは、次のように解釈されます。

  • Host ヘッダーが省略されるか、またはその値が s3.Region.amazonaws.com である場合、リクエストのバケットはリクエスト URI のスラッシュで区切られた先頭コンポーネント、リクエストのキーはリクエスト URI の残りの部分になります。このセクションの最初および 2 つ目の例に示すように、これが通常の方式です。ホストヘッダーは、HTTP 1.0 リクエストでのみ省略可能です。

  • 上記のいずれの条件も該当せず、Host ヘッダーの値が .s3.Region.amazonaws.com で終わる場合、バケット名は Host ヘッダーの値のうち、先頭から .s3.Region.amazonaws.com までの値になります。リクエストのキーはリクエスト URI になります。この解釈により、このセクションの 3 番目と 4 番目の例で示されているように、.s3.Region.amazonaws.com のサブドメインとしてバケットが公開されます。

  • それ以外の場合、リクエストのバケットは Host ヘッダーの小文字の値、リクエストのキーはリクエスト URI になります。この解釈は、バケット名と同じ DNS 名を登録していて、その名前を Amazon S3 の CNAME エイリアスとして設定している場合に有用です。このドキュメントではドメイン名の登録および DNS の設定の手順については扱いませんが、このセクションの最後の例にその結果を示します。

このセクションでは、URL およびリクエストの例を示します。

例 パススタイル

この例では以下を使用しています。

  • バケット名 ‐ awsexamplebucket1.net

  • リージョン ‐ 米国東部(バージニア北部)

  • キー名 ‐ homepage.html

URL は次のとおりです。

http://s3.us-east-1.amazonaws.com/awsexamplebucket1.net/homepage.html

リクエストは次のとおりです。

GET /awsexamplebucket1.net/homepage.html HTTP/1.1 Host: s3.us-east-1.amazonaws.com

HTTP 1.0 でのリクエストと host ヘッダーの省略は次のとおりです。

GET /awsexamplebucket1.net/homepage.html HTTP/1.0

DNS 互換名については、「制約事項」を参照してください。キーの詳細については、「キー」を参照してください。

例 仮想ホスティング形式

この例では以下を使用しています。

  • バケット名 ‐ awsexamplebucket1.eu

  • リージョン ‐ 欧州 (アイルランド)

  • キー名 ‐ homepage.html

URL は次のとおりです。

http://awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com/homepage.html

リクエストは次のとおりです。

GET /homepage.html HTTP/1.1 Host: awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com

例 CNAME 方式

この方式を使用するには、DNS 名を bucketname.s3.us-east-1.amazonaws.com の CNAME エイリアスとして設定する必要があります。詳細については、「CNAME による Amazon S3 URL のカスタマイズ」を参照してください。この例では以下を使用しています。

  • バケット名 ‐ awsexamplebucket1.net

  • キー名 ‐ homepage.html

URL は次のとおりです。

http://www.awsexamplebucket1.net/homepage.html

例は次のとおりです。

GET /homepage.html HTTP/1.1 Host: www.awsexamplebucket1.net

CNAME による Amazon S3 URL のカスタマイズ

要件によっては、「s3.Region.amazonaws.com」をウェブサイトまたはサービスに表示したくない場合もあります。例えば、ウェブサイトの画像を Amazon S3 でホスティングしている場合、http://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/ の代わりに http://images.awsexamplebucket1.net/ と表示することができます。DNS 互換名を持つすべてのバケットは、 http://BucketName.s3.Region.amazonaws.com/[Filename] のように参照できます (例: http://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/mydog.jpg)。CNAME を使用すると、images.awsexamplebucket1.net を Amazon S3 のホスト名にマッピングできるため、この URL は http://images.awsexamplebucket1.net/mydog.jpg になります。

バケット名は CNAME と同じである必要があります。例えば、CNAME を作成して images.awsexamplebucket1.netimages.awsexamplebucket1.net.s3.us-east-1.amazonaws.com にマッピングした場合、http://images.awsexamplebucket1.net/filenamehttp://images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/filename はどちらも同じになります。

CNAME DNS レコードは、ドメイン名を適切な仮想ホスティング形式のホスト名にエイリアス設定する必要があります。たとえば、バケット名とドメイン名が images.awsexamplebucket1.net で、バケットが 米国東部(バージニア北部) リージョンにある場合、CNAME レコードは images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com のエイリアスであることが必要です。

images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com.

Amazon S3 はホスト名を使用してバケット名を決定します。そのため CNAME とバケット名は同じである必要があります。たとえば、www.example.comwww.example.com.s3.us-east-1.amazonaws.com の CNAME として設定したとします。http://www.example.com にアクセスすると、Amazon S3 は次のようなリクエストを受け取ります。

GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3 は元のホスト名 www.example.com だけを認識し、リクエストを解決するために使用される CNAME マッピングを認識しません。

すべての Amazon S3 エンドポイントは、CNAME で使用できます。たとえば、s3.ap-southeast-1.amazonaws.com を CNAME で使用できます。エンドポイントの詳細については、「エンドポイントのリクエスト」を参照してください。

CNAME を使用してホスト名を Amazon S3 バケットに関連付けるには

  1. 管理するドメインに属するホスト名を選択します。

    この例では、images ドメインの awsexamplebucket1.net サブドメインを使用します。

  2. ホスト名と一致するバケットを作成します。

    この例では、ホスト名およびバケット名は images.awsexamplebucket1.net です。バケット名はホスト名と完全に一致する必要があります。

  3. ホスト名を Amazon S3 バケットのエイリアスとして定義する CNAME レコードを作成します。

    次に例を示します。

    images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-west-2.amazonaws.com

    重要

    リクエストルーティングの理由により、CNAME レコードは、前述の例と完全に一致するように定義する必要があります。そうしない場合、正しく動作するように見えても、最終的には予期しない結果を招くことがあります。

    DNS 設定の手順は、お使いの DNS サーバーまたは DNS プロバイダーによって異なります。個別の情報については、お使いのサーバーのマニュアルをご覧になるか、プロバイダーにお問い合わせください。

制約事項

SSL

仮想ホスト URL は、非 SSL (HTTP) リクエストでのみサポートされます。

SOAP

SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP 用に Amazon S3 の新機能をサポートする予定はありません。REST API か AWS SDK を使用することをお勧めします。

下位互換性

レガシーエンドポイント

一部のリージョンでは、レガシーエンドポイントがサポートされています。これらのエンドポイントは、サーバーアクセスログまたは CloudTrail ログに表示される場合があります。詳細については、次の情報を確認してください。Amazon S3 のリージョンとエンドポイントの詳細なリストについては、AWS AWS 全般リファレンスの「Amazon S3リージョンとエンドポイント」を参照してください。

重要

ログにレガシーエンドポイントが表示される場合もありますが、バケットにアクセスするには、常に標準のエンドポイント構文を使用することをお勧めします。

Amazon S3 仮想ホスティング形式の URL は以下に示す形式に従います。

https://bucket-name.s3.Region.amazonaws.com/key name

Amazon S3 では、パス形式の URLは以下に示す形式に従います。

https://s3.Region.amazonaws.com/bucket-name/key name

s3‐リージョン

一部の古い Amazon S3 リージョンでは、ドット (S3.us-west-2 など) ではなく、S3 とリージョンの間にダッシュを含むエンドポイント (S3‐us-west-2 など) がサポートされています。バケットがこれらのリージョンのいずれかにある場合、サーバーアクセスログまたは CloudTrail ログに次のエンドポイント形式が表示されることがあります。

https://bucket-name.s3-Region.amazonaws.com

この例では、バケット名は my-bucket、リージョンは 米国西部 (オレゴン) です。

https://my-bucket.s3-us-west-2.amazonaws.com

レガシーグローバルエンドポイント

一部のリージョンでは、レガシーグローバルエンドポイントを使用して、リージョン固有のエンドポイントを指定しないリクエストを作成できます。レガシーグローバルエンドポイントポイントは次のとおりです。

bucket-name.s3.amazonaws.com

サーバーアクセスログまたは CloudTrail ログに、レガシーグローバルエンドポイントを使用するリクエストが表示される場合があります。この例では、バケット名は my-bucket であり、レガシーグローバルエンドポイントが表示されます。

https://my-bucket.amazonaws.com

米国東部(バージニア北部) に対する仮想ホスティング形式のリクエスト

レガシーグローバルエンドポイントで行われたリクエストは、デフォルトでは米国東部 (バージニア北部) に送信されます。したがって、レガシーグローバルエンドポイントは 米国東部(バージニア北部) のリージョン別エンドポイントの代わりに使用されることがあります。米国東部(バージニア北部) でバケットを作成し、グローバルエンドポイントを使用する場合、Amazon S3 はデフォルトでリクエストをこのリージョンにルーティングします。

他のリージョンに対する仮想ホスティング形式のリクエスト

レガシーグローバルエンドポイントは、サポートされている他のリージョンでの仮想ホスティング形式のリクエストにも使用されます。2019 年 3 月 20 日より前に開始されたリージョンにバケットを作成し、レガシーグローバルエンドポイントを使用すると、Amazon S3 は DNS を更新してリクエストを正しいロケーションにルーティングします。この処理には時間がかかる場合があります。その間、デフォルトのルールが適用されて、仮想ホスティング形式のリクエストは米国東部 (バージニア北部) リージョンに送信され、Amazon S3 は HTTP 307 リダイレクトによりこのリクエストを正しいリージョンにリダイレクトします。2019 年 3 月 20 日より後に開始されたリージョンの S3 バケットの場合、DNS はリクエストをバケットが存在する AWS リージョンに直接ルーティングしません。代わりに HTTP 400 Bad Request エラーが返されます。詳細については、「リクエストのリダイレクトと REST API」を参照してください。

パス形式のリクエスト

米国東部(バージニア北部) リージョンでは、パス形式のリクエストにレガシーグローバルエンドポイントを使用できます。

他のすべてのリージョンでは、パススタイル構文の場合、バケットへのアクセスを試行するときにリージョン固有のエンドポイントを使用する必要があります。レガシーグローバルエンドポイント、またはバケットが存在するリージョンのエンドポイントとは異なる別のエンドポイントを使用してバケットにアクセスしようとすると、HTTP レスポンスコード 307「一時的なリダイレクト」エラーと、リソースの正しい URI を示すメッセージが表示されます。たとえば、米国西部 (オレゴン) リージョンで作成されたバケットに https://s3.amazonaws.com/bucket-name を使用すると、HTTP 307「一時的なリダイレクト」エラーが発生します。