ウェブサイトアクセスのアクセス許可の設定 - Amazon Simple Storage Service

ウェブサイトアクセスのアクセス許可の設定

バケットを静的ウェブサイトとして設定する場合、このウェブサイトを公開するときは、パブリック読み取りアクセスを許可できます。バケットをパブリックに読み取り可能にするには、バケットのパブリックアクセスブロック設定を無効にし、パブリック読み取りアクセスを許可するバケットポリシーを記述する必要があります。バケットにバケット所有者が所有していないオブジェクトが含まれている場合は、すべてのユーザーに読み取りアクセスを許可するオブジェクトアクセスコントロールリスト (ACL) の追加が必要になる場合があります。

注記

ウェブサイトエンドポイント上に、ユーザーがリクエストしたオブジェクトが存在しない場合は、Amazon S3 から HTTP レスポンスコード 404 (Not Found) が返されます。オブジェクトが存在するが、そのオブジェクトの読み取りアクセス許可が付与されていない場合は、ウェブサイトエンドポイントから HTTP レスポンスコード 403 (Access Denied) が返されます。ユーザーはこのレスポンスコードを見て、特定のオブジェクトが存在するかどうかを推測できます。この動作を希望しない場合は、バケットのウェブサイトのサポートを有効にしないでください。

ステップ 1: パブリックアクセスブロック設定を編集する

既存のバケットをパブリックアクセスを持つ静的ウェブサイトとして設定する場合は、そのバケットのパブリックアクセスブロック設定を編集する必要があります。アカウントレベルのパブリックアクセスブロックの設定も編集する必要があります。Amazon S3 は、バケットレベルとアカウントレベルのパブリックアクセスブロックの設定の最も制限的な組み合わせを適用します。

たとえば、バケットのパブリックアクセスを許可するが、アカウントレベルですべてのパブリックアクセスをブロックする場合、Amazon S3 はバケットへのパブリックアクセスを引き続きブロックします。このシナリオでは、バケットレベルとアカウントレベルのパブリックアクセスブロックの設定を編集する必要があります。詳細については、「Amazon S3 パブリックアクセスブロックの使用」を参照してください。

デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下の手順を使用して、パブリックアクセスブロック設定を編集できます。

警告

このステップを完了する前に、「Amazon S3 パブリックアクセスブロック」を確認し、パブリックアクセスの許可に伴うリスクを了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 静的ウェブサイトとして設定されたバケットの名前を選択します。

  3. [Permissions] を選択します。

  4. [Edit] を選択します。

  5. [Block all public access (すべてのパブリックアクセスをブロックする)] をクリアし、[保存] を選択します。

    警告

    このステップを完了する前に、「Amazon S3 パブリックアクセスブロック」を確認し、パブリックアクセスの許可に伴うリスクを了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

  6. 確認ボックスで、confirm, を入力し、[確認] を選択します。

    [S3 バケット] で、バケットの [アクセス] が [Objects can be public (オブジェクトは公開可能)] に更新されます。これで、バケットポリシーを追加して、バケット内のオブジェクトをパブリックに読み取り可能にすることができます。アクセス がまだ Bucket and objects not public (バケットとオブジェクトはパブリックではありません) と表示される場合は、バケットポリシーを追加する前に、アカウントのパブリックアクセスブロックの設定を編集する必要があります。

ステップ 2: バケットポリシーを追加する

バケット内のオブジェクトをパブリックに読み取り可能にするには、すべてのユーザーに s3:GetObject アクセス許可を付与するバケットポリシーを作成する必要があります。

S3 のパブリックアクセスブロック設定を編集した後で、バケットへのパブリック読み取りアクセスを許可するバケットポリシーを追加できます。パブリック読み取りアクセスを許可すると、インターネット上のだれでもバケットにアクセスできるようになります。

重要

次のポリシーは、単なる例として、バケットのコンテンツへのフルアクセスを許可します。このステップに進む前に、「Amazon S3 バケットのファイルを保護するにはどうすればよいですか?」を確認して、S3 バケット内のファイルを保護するためのベストプラクティスと、パブリックアクセスの許可に伴うリスクを理解してください。

  1. [バケット] で、バケットの名前を選択します。

  2. [Permissions] を選択します。

  3. [バケットポリシー] を選択します。

  4. ウェブサイトのパブリック読み取りアクセスを許可するには、次のバケットポリシーをコピーし、[Bucket policy editor (バケットポリシーエディター)] に貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::example.com/*" ] } ] }
  5. Resource を更新してバケット名を含めます。

    前のバケットポリシーの例では、example.com がバケット名です。このバケットポリシーを独自のバケットで使用するには、バケット名に合わせてこの名前を更新する必要があります。

  6. [Save] を選択します。

    バケットにパブリックアクセスが許可されていることを示す警告が表示されます。[バケットポリシー] に、パブリックラベルが表示されます。

    Policy has invalid resource というエラーが表示された場合は、バケットポリシー内のバケット名がバケット名と一致していることを確認します。バケットポリシーの追加については、「S3 バケットポリシーを追加するにはどうすればよいですか?」を参照してください。

    [Error - Access denied (エラー - アクセスが拒否されました)] という警告が表示され、バケットポリシーエディターでバケットポリシーの保存が許可されていない場合は、アカウントレベルおよびバケットレベルのパブリックアクセスブロック設定をチェックして、バケットへのパブリックアクセスを許可していることを確認します。

オブジェクトアクセスコントロールリスト

バケットポリシーを使用して、オブジェクトに対するアクセス許可を付与できます。ただし、バケットポリシーは、バケット所有者が所有するオブジェクトにのみ適用されます。バケットに、バケット所有者として所有していないオブジェクトが含まれる場合は、バケット所有者は、オブジェクトのアクセスコントロールリスト (ACL) を使用して、それらのオブジェクトへのパブリック読み取りアクセス許可を付与する必要があります。

ACL を使用してオブジェクトを公開で読み取り可能にするには、次の許可要素に示すように、AllUsers グループに READ アクセス許可を付与します。この許可要素をオブジェクト ACL に追加します。ACL の管理の詳細については、「ACL によるアクセス管理」を参照してください。

<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant>