【问题标题】:Prevent direct download of audio files from amazon s3防止从 amazon s3 直接下载音频文件
【发布时间】:2013-02-25 13:17:23
【问题描述】:

我将音频文件存储在 Amazon S3 中,可以从基于 Web 的音乐播放器应用程序和移动应用程序访问这些文件。即使未登录的用户也应该能够访问音乐。但是我不希望人们使用该链接来下载内容。这可以在 s3 中完成吗?

谢谢

【问题讨论】:

  • 让我看看我是否明白了:您有一个网络应用程序可以访问音乐并将其流式传输到您的客户(浏览器、应用程序等)?如果是这样,您可以在 S3 上将内容设为私有,并让您的应用程序通过您的 AWS/Secret 密钥访问它。

标签: amazon-web-services amazon-s3


【解决方案1】:

您可以根据 HTTP 引荐来源网址限制访问。它不是防弹的(Referrer 可能被欺骗),但它会阻止随意下载。

您使用存储桶策略来限制 Referrer 的可能值。

这个页面上有一个例子(向下滚动一点)http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

这是他们的例子:

{
  "Version":"2008-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originated from www.example.com and example.com",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{
          "aws:Referer":[
            "http://www.example.com/*",
            "http://example.com/*"
          ]
        }
      }
    }
  ]
}

您还可以使用过期的签名 URL - 这会阻止人们从其他网站链接到您的内容。

【讨论】:

    【解决方案2】:

    想到一个场景:

    当您的音乐播放器应用想要播放某些内容时,它必须向您的后端询问 MP3 的 URL。您的后端可以生成将“Expires”参数 [1] 设置为 10 秒后的 URL。

    这样一来,你后端返回的 URL 只能使用 10 秒,这对于音乐播放器从 S3 启动下载来说应该绰绰有余了。

    当然,如果用户在 10 秒的窗口中看到某种 HTTP 嗅探器中的 URL 并开始下载,他/她就可以下载该文件。

    但没有万无一失的方法可以保护用户免于接触其设备访问的内容。如果内容被传送到设备上,总有一种方法可以让足够技术的人亲身体验它。

    附言请注意,如果您的 MP3 播放器支持搜索(尤其是通过发送另一个 HTTP 范围请求进行搜索),则您必须从后端重新获取带有刷新的“过期”参数的新 URL。

    [1]http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html

    【讨论】:

      【解决方案3】:

      我也遇到过这个要求,并且对如何实现这个有更新的答案。

      在您的存储桶的“权限”选项卡上,选择“存储桶策略”按钮并填写以下代码:

      {
          "Version": "2012-10-17",
          "Id": "Policy1542209806458",
          "Statement": [
              {
                  "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
                  "Effect": "Deny",
                  "Principal": "*",
                  "Action": "s3:*",
                  "Resource": "arn:aws:s3:::your-bucket-arn/*",
                  "Condition": {
                      "StringNotLike": {
                          "aws:Referer": [
                              "http://yourdomain.com/*"
                          ]
                      }
                  }
              }
          ]
      }
      

      这将允许向来自您的域的引荐来源请求。请注意设置您的 Resource 字段并更改允许的 aws:Referer 列表。

      这仍然可以被欺骗,但它是直接链接 S3 对象的简单障碍。

      【讨论】:

        猜你喜欢
        • 2011-08-01
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 2020-05-29
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多