亚马逊旗下云计算平台AWS的S3对象存储功能被开发者和企业广泛使用,S3存储桶可以存储各种文件并设置权限提供公网访问,许多开发者将各类静态文件直接存储在S3中进行远程调用。但这里有个问题,S3存储桶是收取HTTP请求和带宽费用的,收取这部分费用还算是合理,但S3的计费规则里甚至对错误请求也会收费。

早前有一名开发者发现自己的S3存储桶遭到未经授权的人高频访问,随后开发者直接封禁了对应IP/UA的访问,实际访问时将出现403之类的错误。

万万没想到啊,之后竟然还是收到了AWS的巨额账单,因为AWS对HTTP403这类禁止访问的错误请求同样还是收取请求费,也就是说,即便封禁某个IP或UA,这个人继续保持高频恶意请求,就会给开发者产生巨额的费用账单,这可能会让一些开发者一夜破产。

这名开发者针对该问题联系AWS进行处理后,AWS取消了这部分请求费账单,但AWS强调这是合理收费,因为本来账单规则里就没有注明HTTP403是免费请求。

这个问题也引起了诸多开发者和企业的担忧,由于AWSS3存储桶的名称是自定义的,后面的地址则是固定的,因此甚至可以枚举各种存储桶名称故意刷账单,对开发者和企业来说这种问题几乎无法规避,毕竟已经设置403了,设置其他错误代码也无济于事,都是收费的。

到5月13日AWS发布重要的计费公告,宣布自当日起所有区域的个人或企业AWS账户产生的未经授权请求不再收费,包括带宽费也被取消。

还有个额外说明是如果发起请求的是所有者自己,那即便是HTTP403也会计算请求费,所以开发者在配置时最好检查APIKEY,尽可能避免使用自己账户直接调用,否则不小心出现403那还是得计费。

下面是更新后的AWSS3所有不计费的状态码(所有者访问除外):

  • HTTP301

  • HTTP307

  • HTTP400

  • HTTP403

  • HTTP404

  • HTTP405

  • HTTP409

  • HTTP411

  • HTTP412

  • HTTP5XX

  • 另外如果开发者设置了自定义错误文档或者自定义重定向时,所有请求无论什么状态都继续收取请求费和产生的带宽费。