Amazon S3 バケットの一部のオブジェクトにパブリック読み取りアクセス権を付与するにはどうすればよいですか?
Amazon Simple Storage Service (Amazon S3) バケットの一部のオブジェクトを公開して読み取り可能にしたいと考えています。ただし、同じバケット内にある他のオブジェクトに対するアクセス許可を変更したくはありません。
簡単な説明
次のいずれかの方法で、パブリック読み取りアクセスを許可します。
- Amazon S3 コンソールを使用してオブジェクトのアクセスコントロールリスト (ACL) を更新する
- AWS コマンドラインインターフェイス (AWS CLI) を使用してオブジェクトの ACL を更新する
- 特定のオブジェクトタグへのパブリック読み取りアクセスを許可するバケットポリシーを使用する
- 特定のプレフィックスへのパブリック読み取りアクセスを許可するバケットポリシーを使用する
重要: バケットとオブジェクト ACL によるパブリックアクセスの許可は、S3 オブジェクト所有権が Bucket Owner Enforcedに設定されているバケットでは機能しません。ほとんどの場合、オブジェクトやバケットにアクセス権限を付与するために ACL は不要です。代わりに、AWS ID アクセスと管理 (IAM) ポリシーと S3 バケットポリシーを使用して、オブジェクトとバケットにアクセス許可を付与してください。
デフォルトでは、新しいバケット、アクセスポイント、オブジェクトはパブリックアクセスを許可していません。アカウント内のすべてのバケットでブロックパブリックアクセスを有効にすると、「バケットとオブジェクトは公開されていません」というメッセージが表示されます。詳細については、「アカウントのパブリックアクセスブロック設定」を参照してください。
解決策
**重要:**始める前に、アカウントレベルまたはバケットレベルでパブリックアクセスをブロックする設定がないことを確認してください。設定によってオブジェクトの公開が妨げられることがあってはなりません。デフォルトでは、新しい S3 バケットのパブリックアクセスブロック設定は True に設定されています。
Amazon S3 コンソールを使用してオブジェクトの ACL を更新する
複数のオブジェクトを同時に公開するには、以下のステップに従います。
**警告:**複数のオブジェクトを公開すると、複数のオブジェクトに対してこのアクションを一度に元に戻すことはできません。パブリックアクセスを削除するには、Amazon S3 コンソールの各オブジェクトに移動する必要があります。次に、オブジェクトの [権限] タブから **[パブリックアクセス]**を変更します。付与したパブリックアクセスを元に戻す、すべてのオブジェクトに対して行う必要があります。公開する前に、オブジェクトのリストを注意深く確認してください。
1. Amazon S3 コンソールを開きます。
2. バケットのリストから、更新するオブジェクトを含むバケットを選択します。
3. オブジェクトを含むフォルダに移動します。
4. オブジェクトリストから、公開するオブジェクトをすべて選択します。
5. [アクション] を選択し、**[公開する]**を選択します。
6. [公開にする] ダイアログボックスで、オブジェクトのリストが正しいことを確認します。
7. **[公開する]**を選択します。
個々のオブジェクトをパブリックにするには、前のプロセスを繰り返すか、以下の手順を実行します。
1. Amazon S3 コンソールから、更新するオブジェクトを含むバケットを選択します。
2. オブジェクトを含むフォルダに移動します。
3. オブジェクト名のリンクを選択してオブジェクトを開きます。
4. **[権限]**タブを選択します。
5. [編集] を選択します。
6. 「全員」セクションで、[読み取ったオブジェクト] を選択します。
7. **[このオブジェクトに対するこれらの変更の影響を理解しました]**を選択します。
8. **[変更を保存]**を選択します。
AWS CLI を使用してオブジェクトの ACL を更新する
Amazon S3 に既に保存されているオブジェクトの場合、このコマンドを実行して、パブリック読み取りアクセス用に ACL を更新できます。
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
または、次のコマンドを実行して、AWS アカウントの所有者にオブジェクトのフルコントロールを付与し、その他のユーザーには読み取り専用アクセスを許可します。
注:****--grant-full-control の値には、アカウントの正規ユーザー IDを入力します。
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers
特定のオブジェクトタグへのパブリック読み取りアクセスを許可するバケットポリシーを使用する
重要: 始める前に、必ず S3 オブジェクトタギングの料金を確認してください。
まず、特定のタグを持つすべてのオブジェクトへのパブリック読み取りアクセスを許可するバケットポリシーを追加します。たとえば、次のポリシーでは、キーと値のペア public=yes でタグ付けされたすべてのオブジェクトへのパブリック読み取りアクセスを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/public": "yes" } } } ] }
次に、一般公開したいオブジェクトにタグを追加します。Amazon S3 コンソールを使用してオブジェクトタグを追加または管理できます。または、AWS CLI を使用することもできます。
オブジェクトに既存のタグがあるかどうかを確認するには、次の AWS CLI コマンドを実行します。
aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
既存のタグがないオブジェクトにタグを追加するには、次のコマンドを実行します。
**警告:**このコマンドは、既存のオブジェクトタグをすべて上書きします。
aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'
既存のタグがあるオブジェクトにタグを追加するには、次のコマンドを実行します。新しいオブジェクトタグと、残しておきたい既存のタグを必ず含めてください。
aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'
オブジェクトタグを追加したら、次のコマンドを実行してすべてのオブジェクトのタグを確認します。
aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
特定のプレフィックスへのパブリック読み取りアクセスを許可するバケットポリシーを使用する
**警告:**次のバケットポリシーは、特定のプレフィックスの下にあるすべてのオブジェクトへのパブリック読み取りアクセスを許可します。このバケットポリシーを使用する前に、ユースケースがプレフィックス内のパブリックに読み取り可能なすべてのオブジェクトをサポートしていることを確認します。このポリシーでは、プレフィックスへのリストアクセスは許可されません。ユーザーは、オブジェクトパスがわかっている場合にのみオブジェクトにアクセスできます。プレフィックスに存在しないオブジェクトにアクセスすると、ユーザーは 403 エラーを受け取ります。
特定のオブジェクトプレフィックスへのパブリック読み取りアクセスを許可するには、次のようなバケットポリシーを追加します。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"] } ] }
次に、パブリック読み取りアクセスを持つプレフィックスにオブジェクトをコピーします。次のようなコマンドを実行して、プレフィックスにオブジェクトをコピーできます。
aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject
注: オブジェクトのプレフィックスによっては、パブリックに読み取りアクセスを許可するためにオブジェクトをコピーする必要はありません。
関連情報
関連するコンテンツ
- 質問済み 5年前lg...
- 質問済み 6年前lg...
- 質問済み 7年前lg...
- AWS公式更新しました 2年前