如何通过Bucket Policy限制Amazon S3存储桶PUT上传的对象大小
如何通过S3 Bucket Policy限制PUT上传的对象大小?
嘿,这个问题我熟!你说得没错,确实要靠Condition Block来实现,对应的条件键是s3:content-length-range——这就是AWS专门用来匹配上传对象大小的工具,它会检查HTTP请求里的Content-Length头部(也就是你要上传的对象实际字节数)。
核心思路
我们可以通过拒绝不符合大小要求的PutObject请求来实现限制:当用户上传的对象大小超出你设定的范围时,Bucket Policy会直接拒绝这次上传操作。
完整示例Policy
假设你想限制上传的对象必须在1MB(1048576字节)到10MB(10485760字节)之间,对应的Bucket Policy如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "ContentLengthRange": { "s3:content-length-range": ["1048576", "10485760"] } } } ] }
关键部分解释
Version: 固定用2012-10-17,这是AWS当前推荐的Policy版本,功能最完善。Effect: Deny: 表示当后续条件满足时,拒绝对应的操作(这里就是拒绝不符合大小要求的上传)。Principal: *: 针对所有访问该桶的用户/角色。如果你只想限制特定IAM身份,可以替换成对应的ARN,比如arn:aws:iam::123456789012:user/your-specific-user。Action: s3:PutObject: 明确要限制的是上传对象的操作。Resource: 把your-bucket-name换成你的实际桶名,/*表示覆盖桶内所有对象。Condition: 这里用ContentLengthRange运算符,配合s3:content-length-range键,数组里的两个值分别是允许的最小和最大字节数。当上传对象的大小不在这个范围内时,就会触发Deny规则。
灵活调整规则
如果你只需要单方向的限制,比如:
只限制最大大小(比如不能超过10MB):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "NumericGreaterThan": { "s3:content-length-range": "10485760" } } } ] }这样只要上传对象超过10MB,就会被拒绝。
只限制最小大小(比如至少1MB):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-bucket-name/*", "Condition": { "NumericLessThan": { "s3:content-length-range": "1048576" } } } ] }
额外注意点
不用担心有人篡改Content-Length头部来绕过限制——S3会自动验证实际上传的字节数和请求头部的Content-Length是否一致,如果不一致,上传会直接失败,不会存储到桶里。
内容的提问来源于stack exchange,提问作者user2344448
相关产品推荐
相关产品推荐

