【问题标题】:Amazon s3 prevent opening media url in browser亚马逊 s3 阻止在浏览器中打开媒体网址
【发布时间】:2016-10-03 05:06:36
【问题描述】:

我们使用 Amazon 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 网址。我们有安卓应用程序,获取这些亚马逊 s3 网址。所以IP限制不起作用。 amazon s3 是否为此限制提供任何其他机制并允许?请告知。如果我们有一个实现的例子,那就太好了。

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

    最合适的解决方案是使用Amazon S3 Pre-Signed URL

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

    • 单个对象的访问控制列表权限
    • 存储桶策略(根据路径、IP 地址、引荐来源网址等授予广泛的访问权限)
    • IAM 用户和组(向具有 AWS 凭证的用户授予权限)
    • 预签名 URL

    Pre-Signed URL 可用于授予对 S3 对象的访问权限,作为“覆盖”访问控制的一种方式。通过附加到期时间和签名,可以通过 URL 访问通常私有的对象。这是无需网络服务器即可提供私人内容的好方法。

    如果您的目标是仅在使用预签名 URL 的情况下提供内容,那么:

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

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

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

    最好让后端应用程序(可能在 Amazon EC2 或 AWS Lambda 上运行)执行身份验证,然后生成 URL。然后,您的 Android 应用可以使用这些 URL 访问 S3 中的内容。

    【讨论】:

    • 您好约翰,感谢您的详细回复。让我看看。
    • 我们可以使用 PHP 生成预签名的 url 吗?
    • 我对预签名网址有疑问。预签名的网址将在 3 分钟后过期。说我有视频。用户访问视频播放页面,但没有点击播放按钮。 5分钟后(预签名的url可能会过期)如果用户点击播放按钮,视频会播放吗?
    • 查看 PHP SDK 的 AWS 文档:Amazon S3 Pre-Signed URL in PHP.
    • 您可以指定预签名 URL 的有效期。所以,如果你把它设置为 3 分钟,那么它在 5 分钟后将不起作用。在向 S3 发出请求时,S3 会检查 URL。因此,发出更长的有效期(可能是几年!)或重新发出 URL,以便用户可以访问数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多