如何在S3中限制用户上传

Lod*_*jck 6 amazon-s3 amazon-web-services

我正在编写一个将在 AWS 上运行的应用程序。它包含用户上传的图像和视频,我想将这些数据存储在 S3 中。我想知道如何防止一个用户上传千兆字节的数据,因为我会为此付费。我可以:

  • 限制单个文件上传大小(假设 50MB,因为允许视频)
  • 限制文件上传数量(假设1000,只是任意数量)

但如果有人愿意,他可以创建多个帐户并用垃圾填满我的存储空间。我还可以在每次上传之前检查我的存储桶大小,并且仅在我的存储桶容量 < 50GB 时才上传。但这些计算对于一些简单的上传来说非常昂贵。

我是否应该更改为另一个可以设置限制的存储服务?或者有一个通用的方法可以解决我的问题吗?或者我应该相信我的用户?

hel*_*loV 8

如果不详细了解您的用例,就很难推荐解决方案。没有单一的解决方案,而是多种解决方案的组合:

  • 将您的存储桶设为私有 - 不要让任何人直接上传它,而是为每个请求生成一个签名的 S3 URL,有效期很短(比如 5 分钟),并让用户使用签名的 URL 上传他/她的图像
  • 使用AWS Lambda(非常便宜)来监控您的存储桶PutObject。它的工作方式是PutObject在您的存储桶中触发一个 lambda 函数,该函数接收有关对象的一些信息,包括大小和 IP 地址。您可以编写一些简单的 Python/node.js/Java 应用程序来跟踪并将大小和 IP 存储在某些数据库(微型RedisDynamoDB)中。如果您看到来自特定 IP 的上传过多或大量上传,请生成一个IAM策略来动态阻止该 IP,将其附加到您的存储桶并向您发送电子邮件SES
  • 使用 CloudWatch - 您可以让CloudWatchBucketSizeObjectCount超出限制时发送警报
  • 虽然我没有使用过,但您可以设置AWS账单警报,以便您尽快知道您的账单是否超过预设阈值,而不是在账单周期结束时感到惊讶