Amazon Simple Storage Service (Amazon S3) バケットに特定のファイルタイプのみを保存するために、バケットがそれらのファイルタイプのみを受け入れるようにアップロードに制限を設けたいと考えています。
解決策
以下のアクションを許可または拒否するステートメントをバケットポリシーに追加します:
- s3:PutObject アクションに、目的のファイルタイプの拡張子を持つオブジェクトのみを許可します。
- 目的のファイルタイプの拡張子を持たないオブジェクトに対する s3:PutObject アクションを明示的に拒否します。
注: この明示的な拒否ステートメントにより、Amazon S3 リソースへのフルアクセス権限を持つユーザーに file-type の要件が適用されます。
例えば、以下のバケットポリシーでは、exampleuser に対して、.jpg、.png、または .gif のファイル拡張子を持つオブジェクトにのみ s3:PutObject アクションを許可します:
警告: この例のバケットポリシーには、明示的な拒否ステートメントが含まれています。指定された条件を満たしていない場合、バケットポリシーを設定したユーザーでもバケットへのアクセスが拒否される可能性があります。そのため、バケットポリシーを保存する前に注意して確認してください。誤ってバケットをロックしてしまった場合は、「誤って全ユーザーの Amazon S3 バケットへのアクセスを拒否してしまいました。アクセスを回復するにはどうしたらいいですか?」を参照してください。
{
"Version": "2012-10-17",
"Id": "Policy1464968545158",
"Statement": [
{
"Sid": "Stmt1464968483619",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/exampleuser"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
]
},
{
"Sid": "Stmt1464968483619",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"NotResource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.png",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.gif"
]
}
]
}
注:
- 最初の Principal の値には、アップロード権限を付与するユーザーの Amazon リソースネーム (ARN) のリストを指定します。
- Resource と NotResource の値については、DOC-EXAMPLE-BUCKET をバケットの名前に置き換えてください。
- バケットポリシーでリソースを指定する場合、バケットポリシーの評価では大文字と小文字が区別されます。NotResource の arn:aws:s3:::DOC-EXAMPLE-BUCKET/*.jpg に対して s3:PutObject アクションを拒否するバケットポリシーでは、my_image.jpg はアップロードできます。しかし、my_image.JPG をアップロードしようとすると、Amazon S3 はアクセス拒否エラーを返します。