如何让我的 S3 视频只能在特定网站上观看?

问题描述

更新:添加了 CORS 政策(如下),但仍然无法正常工作。请有人帮我找到问题。

我已经为此苦苦挣扎了几个小时。我有一个名为 test-pcrp 的存储桶。我希望此存储分区中的视频只能在我的网站上查看。下面是我的存储桶设置、存储桶策略和 CORS。但是,无论我做什么,网站上都看不到视频。

存储桶设置:
关闭 - 阻止所有公共访问
ON - 阻止对通过新访问控制列表 (ACL) 授予的存储桶和对象的公共访问
ON - 阻止对通过任何访问控制列表 (ACL) 授予的存储桶和对象的公共访问
关闭 - 阻止对通过新公共存储桶或访问点策略授予的存储桶和对象的公共访问
关闭 - 通过任何公共存储桶或访问点策略阻止对存储桶和对象的公共和跨账户访问

政策:

{
    "Version": "2012-10-17","Id": "http referer policy example","Statement": [
        {
            "Sid": "Allow get requests originating from www.dev.pcrprograms.org and dev.pcrprograms.org.","Effect": "Allow","Principal": "*","Action": "s3:Getobject","Resource": "arn:aws:s3:::test-pcrp/*","Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "https://dev.pcrprograms.org/*","http://dev.pcrprograms.org/*"
                    ]
                }
            }
        }
    ]
}

CORS 政策

[
{
"AllowedHeaders": [
"*"
],"AllowedMethods": [
"GET","HEAD"
],"AllowedOrigins": [
"https://dev.pcrprograms.org"
],"ExposeHeaders": [],"MaxAgeSeconds": 3000
}
]

解决方法

您的策略可能不起作用,因为默认情况下 Amazon S3 中的对象是私有的。添加 Deny 政策不会授予访问权限 - 它只会进一步限制访问权限。

然而,使用 referer 来控制访问是不可靠的Referer spoofing 非常简单,不应将其作为一种安全手段。

首选选项是让您的后端生成 Amazon S3 pre-signed URLs,这是有时间限制的 URL,提供对存储在 Amazon S3 中的私有对象的临时访问。