限制S3对象访问仅限于来自特定域的请求

6
我在S3中有视频文件,使用一个简单的播放器通过src属性来加载这些文件。
我希望这些视频只能通过我的网站观看,而不能直接通过S3 URL来访问(这些URL可能会在页面源代码中可见或通过右键单击访问)。
在浏览AWS文档后,似乎我唯一能通过HTTP实现这个功能的方式是将签名和过期日期附加到查询中,但这并不足够。其他访问限制都是针对AWS用户的。
我应该如何解决这个问题或者在服务器/客户端上如何实现这个功能?
1个回答

11

我认为一个桶策略 - 你可以从管理员界面设置 - 可以做到这一点。虽然语法有些变化(例如,您可以构建围绕拒绝允许条件的策略),并且可以过滤特定文件名,但我更喜欢将媒体类型分成不同的桶。

{
"Version": "2008-10-17",
"Id": "Restrict based on HTTP referrer policy",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Deny",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::mybucket/myprefix/*",
        "Condition": {
            "StringNotLike": {
                "aws:Referer": [
                    "http://www.mydomain.com/*",
                    "http://www.subdomain.mydomain.com/*"
                ]
            }
        }
    }
]
}

我认为每个存储桶只能有一个策略,但是您可以在一个策略中拥有多个语句。最简单的编辑策略的方法是通过AWS管理控制台或类似http://s3browser.com/working-with-amazon-s3-bucket-policies.php的工具进行操作。 - Offbeatmammal
2
有没有办法在移动应用程序上执行相同的操作? 即仅当请求来自我的Android移动应用时 - S3才应允许GET请求 - 否则不允许。 - Jasper
@Jasper - 我可能会单独提出这个问题,以便获得更多的关注。 - Offbeatmammal
@Offbeatmammal > 这是很好的建议,尽管过于热心和好意的人可能会立即将其标记为离题、非编程问题等 :) - Jasper
@Offbeatmammal,您能详细解释一下如何在移动应用程序中实现吗?我看到了您分享的链接,但不确定UserAgent如何帮助解决这个问题。 - Nirav Gandhi
显示剩余2条评论

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