Amazon S3 バケットの使用 - Amazon Simple Storage Service

Amazon S3 バケットの使用

Amazon S3 にデータ (写真、動画、ドキュメントなど) をアップロードするには、いずれかの AWS リージョンに S3 バケットを作成する必要があります。その後、バケットにオブジェクトをいくつでもアップロードできます。

実装の面では、バケットとオブジェクトはリソースであり、Amazon S3 はバケットやオブジェクトを管理するための API を提供します。たとえば、Amazon S3 API を使用してバケットの作成やオブジェクトのアップロードを行うことができます。これらの操作は Amazon S3 コンソールを使用して実行することもできます。コンソールでは、Amazon S3 API を使用して Amazon S3 にリクエストを送信します。

このセクションでは、バケットを操作する方法について説明します。オブジェクトの操作方法の詳細については、「Amazon S3 オブジェクトの使用」を参照してください。

Amazon S3 バケット名はグローバルに一意であり、名前空間はすべての AWS アカウントによって共有されています。つまり、バケットが作成された後は、そのバケットの名前はバケットが削除されるまで、どの AWS リージョン内の別の AWS アカウントでも使用できません。可用性やセキュリティ検証の目的で、特定のバケット命名規則に依存しないでください。バケットの命名のガイドラインについては、バケットの制約と制限 を参照してください。

Amazon S3 は、指定されたリージョンでバケットを作成します。レイテンシーを最適化してコストを最小化し、規制要件に対応するには、地理的に近い AWS リージョンを選択します。たとえば、ヨーロッパにお住まいの場合は、欧州 (アイルランド) または 欧州 (フランクフルト) リージョンにバケットを作成するとよいでしょう。Amazon S3 リージョンのリストについては、『AWS 全般リファレンス』の「リージョンとエンドポイント」を参照してください。

注記

特定の AWS リージョンに作成したバケットに属するオブジェクトは、お客様が明示的に他のリージョンに転送しない限り、そのリージョンから移動しません。たとえば、欧州 (アイルランド) リージョンに保存されているオブジェクトは、ずっとそのリージョンに置かれたままです。

バケットの作成

Amazon S3 には、バケットを作成して管理するための API が用意されています。デフォルトでは、AWS アカウントにつき最大で 100 個のバケットを作成できます。バケットを追加する必要が場合は、サービスの制限の緩和を申請することによって、アカウントバケットの制限を最大 1,000 バケットまで引き上げることができます。バケットの上限緩和を申請する方法については、AWS 全般のリファレンスの「AWS のサービスの制限」を参照してください。バケットには、オブジェクトをいくつでも保存できます。

バケットを作成するときに、バケット名とバケットを作成する AWS リージョンを指定します。バケットの命名についてさらに詳しくは、「バケット命名規則」を参照してください。

バケットを作成するには、以下のいずれかの方法を使用できます。例については、「バケットを作成する例」を参照してください。

Amazon S3 コンソール

バケットは、Amazon S3 コンソールを使用して作成できます。詳細については、『Amazon Simple Storage Service コンソールユーザーガイド』の「バケットの作成」を参照してください。

REST API

REST API を使用したバケットの作成は、リクエストを認証するためのコードを記述する必要があるため、面倒な場合があります。詳細については、Amazon Simple Storage Service API Referenceの「PUT Bucket」を参照してください。代わりに AWS マネジメントコンソール または AWS を使用することをお勧めします。

AWS SDK

AWS SDK を使用してバケットを作成する場合は、最初にクライアントを作成し、次にそのクライアントを使用してバケットを作成するリクエストを送信します。クライアントまたはバケットの作成時にリージョンを指定しない場合、Amazon S3 ではデフォルトのリージョン 米国東部(バージニア北部) が使用されます。特定のリージョンを指定することもできます。利用できる AWS リージョンのリストについては、『AWS General Reference』の「リージョンとエンドポイント」を参照してください。AWS リージョンを有効または無効にする方法の詳細については、『AWS General Reference』の「AWS リージョンの管理」を参照してください。

ベストプラクティスとして、クライアントとバケットを同じリージョンで作成する必要があります。リージョンがローンチされたのが 2019 年 3 月 20 日以降の場合、クライアントとバケットが同じリージョンに存在する必要があります。ただし、2019 年 3 月 20 日以前にローンチされたリージョンでは、米国東部(バージニア北部) のリージョンでクライアントを使用することでバケットを作成できます。詳細については、「レガシーエンドポイント」を参照してください。

クライアントの作成

クライアントを作成するときに、クライアントを作成する AWS リージョンを指定できます。リージョンを指定しない場合、Amazon S3 はデフォルトリージョンで 米国東部(バージニア北部) にクライアントを作成します。デュアルスタックのエンドポイントにアクセスするためにクライアントを作成するには、AWS リージョンを指定する必要があります。詳細については、「デュアルスタックのエンドポイント」を参照してください。

クライアントを作成すると、リージョンはリージョン固有のエンドポイントにマッピングされます。クライアントは、このエンドポイントを使用して Amazon S3 と通信します。

s3.<region>.amazonaws.com

たとえば、eu-west-1 リージョンを指定してクライアントを作成する場合、次のリージョン固有エンドポイントにマッピングされます。

s3.eu-west-1.amazonaws.com

バケットの作成

バケットの作成時にリージョンを指定しない場合、Amazon S3 は 米国東部(バージニア北部) リージョンにバケットを作成します。したがって、特定のリージョンにバケットを作成する場合、バケットの作成時にリージョンを指定する必要があります。

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

アクセス許可について

AWS アカウントのルート認証情報を使用して、バケットを作成したり、その他の Amazon S3 オペレーションを実行したりすることができます。ただし、AWS では、バケット作成などのリクエストを行う目的で AWS アカウントのルート認証情報を使用しないことをお勧めします。代わりに、IAM ユーザーを作成し、そのユーザーにフルアクセスを許可します (デフォルトではユーザーにアクセス許可はありません)。このようなユーザーを管理者ユーザーと呼びます。アカウントのルート認証情報ではなく、管理者ユーザーの認証情報を使用して、AWS を操作し、バケットの作成、ユーザーの作成、およびアクセス許可の付与などのタスクを実行できます。

詳細については、「ルートアカウント認証情報とAWS 全般のリファレンスの「IAM ユーザーの認証情報」とIAM ユーザーガイドの「IAM のベストプラクティス」を参照してください。

リソースを作成する AWS アカウントは、そのリソースを所有しています。たとえば、AWS アカウントに IAM ユーザーを作成し、そのユーザーにバケットを作成するアクセス許可を付与すると、ユーザーはバケットを作成できます。しかし、ユーザーはバケットを所有していません。ユーザーが属する AWS アカウントがバケットを所有しています。ユーザーがその他のバケットオペレーションを実行するには、リソース所有者から追加のアクセス許可を取得する必要があります。Amazon S3 リソースのアクセス許可を管理する方法の詳細については、「Amazon S3 での Identity and Access Management」を参照してください。

バケットへのパブリックアクセスを管理する

パブリックアクセスは、アクセスコントロールリスト (ACL)、バケットポリシー、またはその両方からバケットおよびオブジェクトに付与されます。Amazon S3 リソースへのパブリックアクセスを管理しやすくするために、Amazon S3 ではパブリックアクセスのブロックを設定できます。 Amazon S3 ブロックのパブリックアクセス設定では ACL およびバケットポリシーを上書きできるため、これらのリソースへのパブリックアクセスに均一な制限を適用できます。パブリックアクセスのブロック設定は、個々のバケットまたはアカウント内のすべてのバケットに適用できます。

すべての Amazon S3 バケットとオブジェクトのパブリックアクセスを確実にブロックできるように、アカウントのパブリックアクセスをブロックするための 4 つの設定をすべてオンにすることをお勧めします。これらの設定によって、現在および将来のバケットのパブリックアクセスはすべてブロックされます。

これらの設定を適用する前に、アプリケーションがパブリックアクセスなしで正しく動作することを確認してください。バケットやオブジェクトへのある程度のパブリックアクセスが必要な場合 (例: Amazon S3 での静的ウェブサイトのホスティング に示されている静的なウェブサイトをホストする場合) は、ストレージのユースケースに合わせて個々の設定をカスタマイズできます。詳細については、「Amazon S3 パブリックアクセスブロックの使用」を参照してください。

バケットへのアクセス

Amazon S3 コンソールを使用してバケットにアクセスできます。コンソール UI を使用して、コードを記述することなく、ほぼすべてのバケットオペレーションを実行できます。

プログラムでバケットにアクセスする場合、Amazon S3 は RESTful アーキテクチャをサポートしていることに注意してください。このアーキテクチャでは、バケットやオブジェクトはリソースであり、それぞれリソースを一意に識別するリソース URI を持ちます。

Amazon S3 では、仮想ホスト形式の URL とパス形式の URL の両方でバケットにアクセスできます。バケットはパス形式の URL と仮想ホスト形式の URL を使用してアクセスできるため、DNS 準拠のバケット名を使用してバケットを作成することをお勧めします。詳細については、「バケットの制約と制限」を参照してください。

注記

仮想ホスティング形式とパス形式のリクエストでは、S3 ドットリージョンエンドポイント構造 (s3.Region) を使用します (https://my-bucket.s3.us-west-2.amazonaws.com など)。ただし、一部の古い Amazon S3 リージョンは S3 ダッシュリージョンエンドポイント (s3-Region) もサポートしています (https://my-bucket.s3-us-west-2.amazonaws.com など)。バケットがこれらのリージョンのいずれかにある場合、サーバーアクセスログまたは CloudTrail ログに s3-Region エンドポイントが表示されることがあります。このエンドポイント構造をリクエストで使用しないことをお勧めします。

仮想ホスティング形式のアクセス

仮想ホスティング形式のリクエストでは、バケット名は 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

仮想ホスティング形式のリクエストのアクセスについては、「仮想ホスティング形式のリクエスト」を参照してください。

パス形式のアクセス

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 パスの非推奨プラン – 続き を参照してください。

IPv6 での S3 バケットへのアクセス

Amazon S3 には一連のデュアルスタックのエンドポイントがあり、インターネットプロトコルバージョン 6(IPv6) と IPv4 での S3 バケットへのリクエストを両方サポートしています。詳細については、「IPv6 を使用したリクエストの実行」を参照してください。

S3 アクセスポイントを介したバケットへのアクセス

バケットには、直接アクセスするだけでなく、S3 アクセスポイントを介してアクセスできます。S3 アクセスポイントの詳細については、「Amazon S3 アクセスポイントを使用したデータアクセスの管理 」を参照してください。

S3 アクセスポイントでは、仮想ホスト形式のアドレス指定のみがサポートされます。アクセスポイントを介してバケットをアドレス指定するには、次の形式を使用します。

https://AccessPointName-AccountId.s3-accesspoint.region.amazonaws.com.
注記
  • アクセスポイント名にダッシュ (-) 文字が含まれている場合は、URL にダッシュを含めて、アカウント ID の前に別のダッシュを挿入します。たとえば、リージョン us-west-2 で アカウント 123456789012 が所有する finance-docs という名前のアクセスポイントを使用する場合、適切な URL は https://finance-docs-123456789012.s3-accesspoint.us-west-2.amazonaws.com になります。

  • S3 アクセスポイントは HTTP によるアクセスをサポートせず、HTTPS による安全なアクセスのみをサポートします。

S3:// を使用したバケットへのアクセス

一部の AWS サービスでは、S3://bucket を使用して Amazon S3 バケットを指定する必要があります。正しい形式を以下に示します。この形式を使用する場合、バケット名にはリージョンが含まれないことに注意してください。

S3://bucket-name/key-name

たとえば、前述のパス形式セクションで説明したサンプルバケットを使用する場合などです。

S3://mybucket/puppy.jpg

バケット設定オプション

Amazon S3 では、バケットを設定するためのさまざまなオプションをサポートしています。たとえば、バケットをウェブサイトのホスティング用に設定する、バケット内のオブジェクトのライフサイクルを管理するための設定を追加する、およびバケットへのアクセスをすべて記録するようにバケットを設定することができます。Amazon S3 では、バケットの設定情報を保存および管理するためのサブリソースをサポートしています。Amazon S3 API を使用して、これらのサブリソースを作成および管理できます。ただし、コンソールや AWS SDK を使用することもできます。

注記

また、オブジェクトレベルの設定もあります。たとえば、オブジェクトに固有のアクセスコントロールリスト (ACL) を設定することによって、オブジェクトレベルのアクセス許可を設定できます。

これらは、特定のバケットやオブジェクトのコンテキストに存在するため、サブリソースと呼ばれます。次の表に、バケット固有の設定を管理するためのサブリソースのリストを示します。

サブリソース 説明

cors (Cross-Origin Resource Sharing)

クロスオリジンリクエストを許可するようにバケットを設定できます。

詳細については、「Cross-Origin Resource Sharing の有効化」を参照してください。

イベントの通知

指定したバケットイベントの通知を送信するようにバケットを設定できます。

詳細については、「 Amazon S3 イベント通知の設定」を参照してください。

ライフサイクル

バケットのライフサイクルが明確に定義されていれば、バケット内のオブジェクトのライフサイクルルールを定義できます。たとえば、作成されてから 1 年後にオブジェクトアーカイブする、作成されてから 10 年後にオブジェクトを削除するなどのルールを定義できます。

詳細については、「オブジェクトのライフサイクル管理」を参照してください。

location

バケットを作成するときには、Amazon S3 でバケットを作成する AWS リージョンを指定します。Amazon S3 では、この情報を location サブリソースに格納し、この情報を取得するための API を提供します。

logging

ログ記録によって、バケットへのアクセスのリクエストを追跡できます。各アクセスログレコードには、1 つのアクセスリクエストに関する詳細が含まれます。内容は、リクエスタ、バケット名、リクエスト時刻、リクエストアクション、応答ステータス、およびエラーコード (存在する場合) です。アクセスログ情報は、セキュリティとアクセス監査に役立ちます。また、顧客基盤について知り、Amazon S3 の請求を理解することにも役立ちます。 

詳細については、「Amazon S3 サーバーアクセスのログ記録」を参照してください。

オブジェクトのロック

S3 オブジェクトロック を使用するには、バケットのオブジェクトに対して有効にします。オプションで、バケットに配置された新しいオブジェクトに適用されるデフォルトのリテンションモードと期間を設定することもできます。

詳細については、「バケット設定」を参照してください。

policy および ACL (アクセスコントロールリスト)

すべてのリソース (バケットやオブジェクトなど) はデフォルトではプライベートです。Amazon S3 では、バケットレベルのアクセス許可を付与および管理するために、バケットポリシーおよびアクセスコントロールリスト (ACL) の両方のオプションをサポートしています。Amazon S3 では、policy および acl サブリソースにアクセス許可情報を格納します。

詳細については、「Amazon S3 での Identity and Access Management」を参照してください。

レプリケーション

レプリケーションは、異なる AWS リージョンまたは同一リージョンにあるバケット間でオブジェクトを自動的に非同期コピーする機能です。詳細については、「レプリケーション」を参照してください。

requestPayment

デフォルトでは、バケットを作成した AWS アカウント (バケット所有者) に、バケットからのダウンロードの料金をお支払いいただきます。バケット所有者は、このサブリソースを使用して、ダウンロードをリクエストするユーザーにダウンロードの料金が課金されるように指定できます。Amazon S3 は、このサブリソースを管理するための API も提供します。

詳細については、「リクエスタ支払いバケット」を参照してください。

タグ付け

バケットにコスト配分タグを追加して、AWS コストを分類して追跡できます。Amazon S3 では、バケットのタグを保存、管理するために、tagging サブリソースを提供しています。タグを使用してバケットに適用すると、AWS によって、使用率とコストがタグごとに集計されたコスト配分レポートが生成されます。

詳細については、「S3 バケットの請求および使用状況レポート」を参照してください。

Transfer Acceleration

Transfer Acceleration を使用すると、クライアントと S3 バケットの間で、長距離にわたるファイル転送を高速、簡単、安全に行えるようになります。Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションを利用しています。

詳細については、「Amazon S3 Transfer Acceleration」を参照してください。

バージョニング

バージョニングは、誤って上書き、削除した場合の回復に役立ちます。

誤って削除または上書きされたオブジェクトを回復するためのベストプラクティスとしてバージョニングをお勧めします。

詳細については、「バージョニングの使用」を参照してください。

website

静的ウェブサイトホスティング用にバケットを設定できます。Amazon S3 では、website サブリソースを作成することによって、この設定を格納します。

詳細については、「Amazon S3 での静的ウェブサイトのホスティング」を参照してください。