amazon-web-services - 如何在 S3 中限制用户上传

标签 amazon-web-services amazon-s3

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

  • 限制单个文件上传大小(比如说 50MB,因为允许视频)
  • 限制文件上传的数量(比如说 1000,只是一个任意数字)

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

    我是否应该更改为可以设置限制的其他存储服务?
    还是有解决我问题的通用方法?
    还是我应该只信任我的用户?

    最佳答案

    在不详细了解您的用例的情况下,很难推荐解决方案。没有一个解决方案,而是解决方案的组合:

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

    相关文章:

    typescript - 支持 NLB 安全组的 AWS CDK

    java - 如何将 .jar 上传到 AWS EC2 并重新启动运行它的 JVM?

    amazon-s3 - Traefik 作为 S3 静态网站的反向代理

    amazon-web-services - 无版本控制的 AWS S3 复制

    amazon-web-services - 如何为 ec2 SpotFleet 实例的 SecurityGroups 定义对象列表

    amazon-web-services - AWS Cloudformation 创建的角色未显示在身份池下拉列表中

    unix - "head"aws s3 查看文件内容的命令

    django - 当所有公共(public)访问都被阻止时,为什么我无法从我的 S3 存储桶中获取图像? 403 Forbidden 但静态文件加载正常

    java - AWS Lambda/Firehose 是否支持 Base64 URL 解码?

    amazon-s3 - cloudFormation 中的多个事件具有相同的 lambda 配置