我们正在使用亚马逊s3来管理图片和视频。我们能够成功整合它,并在我们的网站上正确加载视频和图像。
例如网址 https://s3.ap-south-1.amazonaws.com/prod/image/20160810065109.png https://s3.ap-south-1.amazonaws.com/prod/video/43443.mp4
我们希望限制用户直接在浏览器中使用上述链接进行下载或播放。我知道我们可以允许几个IP访问亚马逊s3网址。我们有andriod应用程序,获取这些亚马逊s3网址。因此IP限制不起作用。亚马逊s3是否提供此限制的任何其他机制并允许?请提供建议。如果我们有一个实施的例子,那就太好了。
答案 0 :(得分:5)
最合适的解决方案是使用Amazon S3 Pre-Signed URL。
默认情况下,Amazon S3中的所有对象都是私有的。然后,您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:
Pre-Signed URL 可用于授予对S3对象的访问权限,作为"覆盖"访问控制。通过附加到期时间和签名,可以通过URL访问通常的私有对象。这是一种在不需要Web服务器的情况下提供私有内容的好方法。
如果您的目标是仅在使用预签名网址的位置投放内容,则:
这样,访问对象的唯一方法是使用预签名URL(具有签名)。不需要存储桶策略。
应用程序的责任适当验证用户,以确定是否允许他们访问S3中的对象。如果他们被授予访问权限,那么您的应用程序应为对象生成预签名URL作为经过身份验证的链接。这些网址仅对有限的持续时间有效。
最好通过使用后端应用(可能在Amazon EC2或AWS Lambda上运行)执行身份验证然后生成URL来实现。然后,您的Android应用可以使用网址访问S3中的内容。