限制Amazon S3下载

7
我正在开发一个iOS应用程序,它将上传小视频到Amazon S3。这些视频将是公开的,用户将能够分享每个视频的URL。我担心流媒体成本(例如,如果一个视频变得非常流行)。每GB带宽约为0.12美元,这可能会很快变得昂贵。
我想为每个视频实现某种下载限制,以防止这种情况发生。一旦每个视频每月下载了一定次数,它就不再是公开的,也不能被下载。
我已经查看了各种文档,但没有找到一个好的方法来实现这一点。我找到的唯一潜在解决方案是定期下载我的S3存储桶的日志文件,并使用这些数据来确定某些视频已被下载的次数。这是我的最佳选择,还是有更好的方法?
谢谢!
1个回答

2
您可以这样做,但需要在您的端上编写一些代码才能使其工作。 方法1是启用详细的S3日志统计信息,然后编写代码来解析那些日志文件,并确定何时已达到限制,然后撤销对该文件的权限,以防止它被再次提供服务。
以下是有关如何启用详细的S3日志记录的信息:

http://docs.aws.amazon.com/AmazonS3/latest/UG/ManagingBucketLogging.html

相对简单,但可能有点不太优雅,您可能会因日志被提供和处理的固有延迟而超过限制,因此在应用程序获得足够信息意识到这一点之前,可能需要20分钟到一小时甚至更长时间。 方法2,在我看来更加优雅,将一个或多个EC2实例放置在您的iOS应用程序和S3之间 - iOS应用程序向EC2实例发出请求,它查找实时统计数据(自己积累的,可能是DynamoDB或RDS),然后返回适当视频的S3 URL或向应用程序返回超限错误。使用此方法,无需撤销S3权限,因为EC2实例充当交通警察,并且可以实时启用/禁用对特定文件的访问 - 如果有必要,您还可以轻松地使用此方法添加实时报告/通知功能,以便您知道何时文件或文件正在病毒传播。

感谢您详细的回答!不幸的是,第二种方法对我们的用例不起作用,因为视频URL将是公共的,并且可以从任何地方访问,而不仅仅是应用程序。因此,我们将无法在每次观看视频时通知端点。我原本想到的是第一种方法,但我同意它远非理想。 - Dimitar08
更新:AWS现在已经(实际上...有一段时间了)改进了指标能力,称为“CloudWatch”。一个非常简单的用法涵盖了这篇文章:http://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-metrics.html - ymz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接