ウェブサイトアクセスのアクセス許可の設定
バケットを静的ウェブサイトとして設定する場合、このウェブサイトを公開するときは、パブリック読み取りアクセスを許可できます。バケットをパブリックに読み取り可能にするには、バケットのパブリックアクセスブロック設定を無効にし、パブリック読み取りアクセスを許可するバケットポリシーを記述する必要があります。バケットにバケット所有者が所有していないオブジェクトが含まれている場合は、すべてのユーザーに読み取りアクセスを許可するオブジェクトアクセスコントロールリスト (ACL) の追加が必要になる場合があります。
バケットのパブリックアクセスのブロック設定を無効にするのではなく、ウェブサイトを公開したい場合は、Amazon CloudFront ディストリビューションを作成して、静的ウェブサイトを提供できます。詳細については、Amazon CloudFront によるウェブサイトの高速化 および「Amazon Route 53 デベロッパーガイド」の「Amazon CloudFront ディストリビューションを使用して静的ウェブサイトを提供する」を参照してください。
注記
ウェブサイトエンドポイント上に、ユーザーがリクエストしたオブジェクトが存在しない場合は、Amazon S3 から HTTP レスポンスコード 404 (Not Found)
が返されます。オブジェクトが存在するが、そのオブジェクトの読み取りアクセス許可が付与されていない場合は、ウェブサイトエンドポイントから HTTP レスポンスコード 403 (Access Denied)
が返されます。ユーザーはこのレスポンスコードを見て、特定のオブジェクトが存在するかどうかを推測できます。この動作を希望しない場合は、バケットのウェブサイトのサポートを有効にしないでください。
ステップ 1: S3 のパブリックアクセスのブロック設定を編集する
既存のバケットをパブリックアクセスを持つ静的ウェブサイトとして設定する場合は、そのバケットのパブリックアクセスのブロック設定を編集する必要があります。また、アカウントレベルでパブリックアクセスのブロック設定を編集する必要がある場合もあります。Amazon S3 は、アクセスポイントレベル、バケットレベル、アカウントレベルのパブリックアクセスのブロック設定で最も制限の厳しい組み合わせを適用します。
例えば、バケットのパブリックアクセスを許可し、アカウントレベルですべてのパブリックアクセスをブロックした場合、Amazon S3 はバケットへのパブリックアクセスを引き続きブロックします。このシナリオでは、バケットレベルとアカウントレベルのパブリックアクセスのブロック設定を編集する必要があります。詳細については、「Amazon S3 ストレージへのパブリックアクセスのブロック」を参照してください。
デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下のステップを使用して、パブリックアクセスブロック設定を編集できます。
警告
このステップを完了する前に「Amazon S3 ストレージへのパブリックアクセスのブロック」を読んで、パブリックアクセスを許可することに伴うリスクを理解し、了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。
-
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
静的ウェブサイトとして設定されたバケットの名前を選択します。
-
[Permissions (アクセス許可)] を選択します。
-
[ブロックパブリックアクセス (バケット設定)] で [編集] を選択します。
-
[Block all public access (すべてのパブリックアクセスをブロックする)] をクリアし、[Save changes (変更の保存)] を選択します。
Amazon S3 で、バケットのブロックパブリックアクセス設定がオフになります。パブリックな静的ウェブサイトを作成するには、バケットポリシーを追加する前に、アカウントのブロックパブリックアクセス設定を編集する必要があります。アカウントのブロックパブリックアクセス設定が現在有効になっている場合は、[ブロックパブリックアクセス (バケット設定)] の下にメモが表示されます。
ステップ 2: バケットポリシーを追加する
バケット内のオブジェクトをパブリックに読み取り可能にするには、すべてのユーザーに s3:GetObject
アクセス許可を付与するバケットポリシーを作成する必要があります。
S3 のパブリックアクセスブロック設定を編集した後で、バケットへのパブリック読み取りアクセスを許可するバケットポリシーを追加できます。パブリック読み取りアクセスを許可すると、インターネット上のだれでもバケットにアクセスできるようになります。
重要
次のポリシーは、単なる例として、バケットのコンテンツへのフルアクセスを許可します。このステップに進む前に、「Amazon S3 バケット内のファイルを保護するにはどうすればよいですか?
-
[バケット] で、バケットの名前を選択します。
-
[Permissions (アクセス許可)] を選択します。
-
[Bucket Policy (バケットポリシー)] で [編集] を選択します。
-
ウェブサイトのパブリック読み取りアクセスを許可するには、次のバケットポリシーをコピーし、[Bucket policy editor (バケットポリシーエディター)] に貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::
Bucket-Name
/*" ] } ] } -
Resource
をバケット名に更新します。前述のバケットポリシーの例では、
Bucket-Name
はバケット名のプレースホルダーです。このバケットポリシーを独自のバケットで使用するには、バケット名に合わせてこの名前を更新する必要があります。 -
[Save changes] (変更の保存) をクリックします。
バケットポリシーが正常に追加されたことを示すメッセージが表示されます。
Policy has invalid resource
というエラーが表示された場合は、バケットポリシー内のバケット名がバケット名と一致していることを確認します。バケットポリシーの追加については、「S3 バケットポリシーを追加する方法」を参照してください。エラーメッセージが表示され、バケットポリシーを保存できない場合は、アカウントとバケットの [パブリックアクセスをブロックする] 設定をチェックして、バケットへのパブリックアクセスを許可していることを確認します。
オブジェクトアクセスコントロールリスト
バケットポリシーを使用して、オブジェクトに対するアクセス許可を付与できます。ただし、バケットポリシーは、バケット所有者が所有するオブジェクトにのみ適用されます。バケットに、バケット所有者として所有していないオブジェクトが含まれる場合は、バケット所有者は、オブジェクトのアクセスコントロールリスト (ACL) を使用して、それらのオブジェクトへのパブリック読み取りアクセス許可を付与する必要があります。
S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされる新しいオブジェクト所有権を制御し、ACL を無効にするのに使用できます。デフォルトでは、オブジェクト所有権はバケット所有者の強制設定に設定され、すべての ACL は無効になります。ACL を無効にすると、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。
Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。オブジェクトごとに個別に制御する必要がある通常ではない状況を除き、ACL は無効にしておくことをお勧めします。ACL を無効にすると、誰がオブジェクトをバケットにアップロードしたかに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスを制御できます。詳細については、「オブジェクトの所有権の制御とバケットの ACL の無効化。」を参照してください。
重要
バケットが S3 オブジェクト所有権のバケット所有者強制設定を使用している場合、ポリシーを使用してバケットとバケット中のオブジェクトへのアクセスを許可する必要があります。バケット所有者強制設定が有効になっている場合、アクセスコントロールリスト (ACL) の設定または ACL の更新は失敗し、AccessControlListNotSupported
エラーコードが返されます。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>