亚马逊s3阻止在浏览器中打开媒体网址

Abh*_*ash 2 amazon-s3

我们使用亚马逊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是否提供此限制的任何其他机制并允许?请提供建议.如果我们有一个实施的例子,那将是很好的.

Joh*_*ein 5

最合适的解决方案是使用Amazon S3预签名URL.

默认情况下,Amazon S3中的所有对象都是私有的.然后,您可以添加权限,以便人们可以访问您的对象.这可以通过以下方式完成:

  • 访问控制列出单个对象的权限
  • Bucket Policy(根据路径,IP地址,引荐来源等授予广泛访问权限)
  • IAM用户和组(向具有AWS凭据的用户授予权限)
  • 预签名网址

预签名URL可以用于授权访问S3对象为"覆盖"的访问控制的一种方式.通过附加到期时间和签名,可以通过URL访问通常的私有对象.这是一种在不需要Web服务器的情况下提供私有内容的好方法.

如果您的目标是仅在使用预签名网址的位置投放内容,则:

  • 不要通过上面列出的常规方法分配任何权限(这默认情况下保持私有)
  • 使用预签名URL访问对象

这样,访问对象的唯一方法是使用预签名URL(具有签名).不需要存储桶策略.

应用程序责任对用户进行适当的身份验证,以确定是否允许用户访问S3中的对象.如果他们被授予访问权限,那么您的应用程序应该生成预签名的URL作为对象的经过身份验证的链接.这些网址仅在有限的时间段内有效.

最好通过使用后端应用程序(可能在Amazon EC2或AWS Lambda上运行)执行身份验证然后生成URL来完成此操作.然后,您的Android应用可以使用网址访问S3中的内容.