Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

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 リージョンを指定します。バケットの命名についてさらに詳しくは、「バケット命名規則」を参照してください。

バケットには、オブジェクトをいくつでも保存できます。

以下のいずれかの方法でバケットを作成できます。

  • コンソールの使用

  • プログラムで AWS SDK を使用する。

    注記

    必要に応じて、コードから直接 Amazon S3 REST API を呼び出すこともできます。ただし、この方法は、リクエストを認証するためのコードを作成する必要があるため面倒な場合もあります。詳細については、Amazon Simple Storage Service API Referenceの「PUT Bucket」を参照してください。

    AWS SDK を使用する場合は、最初にクライアントを作成し、次にそのクライアントを使用してバケットを作成するリクエストを送信します。 クライアントを作成するときに、AWS リージョンを指定できます。デフォルトのリージョンは、米国東部(バージニア北部) です。次の点に注意してください。

    • 米国東部(バージニア北部) リージョンを指定してクライアントを作成すると、クライアントは以下のエンドポイントを使用して Amazon S3 と通信します。

      s3.amazonaws.com

      注記

      • このクライアントを使用して、2019 年 3 月 20 日までに開始された任意の AWS リージョンにバケットを作成できます。2019 年 3 月 20 日より後に開始されたリージョンにバケットを作成するには、バケットを作成するリージョンに固有のクライアントを作成する必要があります。AWS リージョンを有効または無効にする方法の詳細については、AWS General Reference の「AWS のリージョンとエンドポイント」を参照してください。

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

      バケット作成リクエストでは、次のようになります。

      • リージョンを指定しない場合、Amazon S3 は 米国東部(バージニア北部) リージョンにバケットを作成します。

      • AWS リージョンを指定した場合、Amazon S3 は指定されたリージョンにバケットを作成します。

    • 他の AWS リージョンを指定することによってクライアントを作成する場合、これらのリージョンはそれぞれ、リージョン固有エンドポイントにマッピングされます。

      s3.<region>.amazonaws.com

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

      s3.eu-west-1.amazonaws.com

      この場合、クライアントを使用して eu-west-1 リージョンにのみバケットを作成できます。バケット作成リクエストで他のリージョンを指定すると、Amazon S3 はエラーを返します。

    • デュアルスタックのエンドポイントにアクセスするためにクライアントを作成する場合、AWS リージョンを指定する必要があります。詳細については、「デュアルスタックのエンドポイント」を参照してください。

    利用できる AWS リージョンのリストについては、AWS General Referenceの「リージョンとエンドポイント」を参照してください。

例については、「バケットを作成する例」を参照してください。

アクセス許可について

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 のドメイン名の一部です。例:  

    • http://bucket.s3-aws-region.amazonaws.com

    • http://bucket.s3.amazonaws.com

      注記

      2019 年 3 月 20 日より後に開始されたリージョンで作成されたバケットは、https://bucket.s3.amazonaws.com 命名規則では到達できません。

    仮想ホスト形式の URL では、これらのエンドポイントのいずれかを使用できます。http://bucket.s3.amazonaws.com エンドポイントに対してリクエストを実行する場合、DNS には、バケットが存在するリージョンに直接リクエストをルーティングするのに十分な情報があります。

    詳細については、「バケットの仮想ホスティング」を参照してください。

     

  • パス形式の URL では、バケット名はドメインの一部です。次に例を示します。

    • リージョン固有のエンドポイント、http://s3.aws-region.amazonaws.com/bucket

    • 米国東部 (バージニア北部) リージョンエンドポイント、http://s3.amazonaws.com/bucket

    パス形式の URL では、使用するエンドポイントはバケットが存在するリージョンと一致している必要があります。たとえば、バケットが 南米 (サンパウロ) リージョンにある場合は、http://s3.sa-east-1.amazonaws.com/bucket エンドポイントを使用する必要があります。バケットが米国東部 (バージニア北部) リージョンにある場合は、http://s3.amazonaws.com/bucket エンドポイントを使用する必要があります。

重要

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

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

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

バケット設定オプション

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 サーバーアクセスのログ記録」を参照してください。

オブジェクトのロック

Amazon 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 での静的ウェブサイトのホスティング」を参照してください。