Amazon Simple Storage Service (Amazon S3) バケット内のオブジェクトへのパブリック読み取りアクセスを、バケットポリシーまたはオブジェクトアクセスコントロールリスト (ACL) を適用して許可しようとしています。ただし、アクセス許可が不十分であるか、アクセスが拒否されたというエラーが表示されます。
簡単な説明
次のバケットポリシーを使用して、バケット内のオブジェクトへのパブリック読み取りアクセス権を付与するとしましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example-bucket/*"
]
}
]
}
以下の理由により、「アクセス許可が不十分です (Insufficient Permissions)」またはアクセスが拒否されました (Access Denied) エラーが発生する可能性があります。
- Amazon S3 バケットのバケットポリシー (bucket policy)を更新または作成するための s3:PutBucketPolicy へのアクセス許可がありません。
- オブジェクトの ACL を変更するための s3:PutObjectAcl へのアクセス許可がありません。
- S3 バケットポリシーまたはオブジェクト ACL が、S3 パブリックアクセスのブロック (Block Public Access) 設定と矛盾しています。
解決方法
必要なアクセス許可を付与する
使用する AWS ID およびアクセス管理、IAM (AWS identity and Access Management) のユーザーまたはロールに次のアクセス許可があることを確認してください。
- s3:PutBucketPolicy では S3 バケットのバケットポリシーを作成または更新します
- s3:PutObjectAcl では、パブリック読み取りアクセスを許可するためにオブジェクトのACLを更新します
パブリックアクセスのブロック設定を更新します
デフォルトでは、バケット、オブジェクト、および関連するサブリソースなどの、すべての Amazon S3 リソースはプライベートであり、パブリックへのアクセス許可はありません。アクセスポイント、バケット、アカウント用のパブリックアクセスのブロック設定は、Amazon S3 リソースへのパブリックアクセスを管理するのに役立ちます。これらの設定は S3 バケットポリシーとオブジェクト ACL を上書きするため、これらのリソースへのパブリックアクセスを制限することができます。設定したバケットポリシーまたはオブジェクト ACL が、パブリックアクセスのブロック設定と競合する場合、パブリック読み取りアクセスを許可するバケットポリシーを作成することはできません。また、S3 は、アクセス許可も拒否することで、バケットポリシーまたはオブジェクト ACL を変更してパブリックの読み取りアクセスを許可します。
Amazon S3 パブリックアクセスのブロック設定では、バケットとオブジェクトへのパブリックアクセスをブロックする 4 つの設定を利用できます。これらの独立した設定を任意の組み合わせで使用できます。
- BlockPublicAcls - 新規の ACL を使用して付与されたパブリックアクセスをブロックします。 Amazon S3 は、新規に追加されたバケットまたはオブジェクトに適用するパブリックアクセス許可をブロックします。S3 は、既存のバケットおよびオブジェクトに対する新規のパブリックアクセス ACL の作成も拒否します。この設定では ACL を使用する S3 リソースへのパブリックアクセスを許可するような既存のアクセス許可は変更されません。
- **IgnorePublicAcls - 任意の ACL を使用して付与されたパブリックアクセスをブロックします。**Amazon S3 は、バケットとオブジェクトへのパブリックアクセスを許可するすべての ACL を無視します。
- **BlockPublicPolicy - 新しいパブリックバケットまたはアクセスポイントポリシーを使用して付与されたパブリックアクセスをブロックします。**Amazon S3 は、バケットおよびオブジェクトへのパブリックアクセスを許可する新規のバケットとアクセスポイントポリシーの使用をブロックします。この設定では、S3 リソースへのパブリックアクセスを許可するような既存のポリシーは変更されません。
- **RestrictPublicBuckets - パブリックバケットまたはアクセスポイントポリシーを使用して付与されたパブリックおよびクロスアカウントアクセスをブロックします。**Amazon S3 は、バケットとオブジェクトへのパブリックアクセスを許可するようなポリシーを持つバケットまたはアクセスポイントのパブリックおよびクロスアカウントアクセスを無視します。
詳細については、「Amazon S3 ブロックパブリックアクセス - アカウントとバケットの保護の別のレイヤー」を参照してください。
ユースケースに基づいて、S3 ブロックパブリックアクセス設定を忘れずに更新するようにしましょう。
注記:
- ACL を使用してオブジェクトへのパブリック読み取りアクセスを許可する場合は、次の「パブリックアクセスのブロック」設定をオフにします。
- S3 バケットポリシーを使用してオブジェクトへのパブリック読み取りアクセスを許可する場合は、次の「パブリックアクセスのブロック」設定をオフにします。
- バケット ACL またはオブジェクト ACL を使用して、S3 Object Ownership が バケット所有者の適用 (Bucket Owner Enforced) に設定されているバケットにパブリック読み取りアクセスを許可することはできません。この場合、ポリシーを使用して、バケットとバケット内のオブジェクトへのアクセスを許可する必要があります。ACL を設定または更新する要求が失敗し、 AccessControlListNotSupported (アクセス制御リストがサポートされていません) というエラーメッセージが表示されます。ACL の読み取り要求は引き続きサポートされます。
アカウント内のすべての S3 バケットに対して Block Public Access 設定ををオンにした場合は、バケットとオブジェクトはパブリックではありませんというメッセージが表示されます。詳細については、アカウントのパブリックアクセスブロック設定の構成を参照してください。
**重要:**オブジェクトへのパブリック読み取りアクセスを許可すると、インターネット上のすべてのユーザーがこれらのオブジェクトにアクセスできます。これが望ましくない場合は、S3 バケットがパブリックにアクセス可能になっていないことを確認してください。詳細については、Amazon S3 セキュリティのベストプラクティスを参照してください。
関連情報
Amazon S3 バケット内の一部のオブジェクトへのパブリック読み取りアクセスを許可するにはどうすれば良いですか?