现在,我知道我无法阻止某人下载我的视频和分享,但我更愿意这样做,以便人们不会将粘贴链接直接复制到我的存储桶中。因此,有没有办法让我的存储桶只能从我的服务器/域发出请求?
如果有帮助,我正在使用jwplayer,它从包含所有链接的xml播放列表加载。这个播放列表绝对可以在任何地方打开和查看,是我希望轻松复制和粘贴的地方。
我不想屏蔽网址,因为这意味着我的存储桶对所有人都可读。可能有人有机会找到我的桶的URL和文件的名称并将所有内容连接在一起......
答案 0 :(得分:7)
这可以通过Using Bucket Policies来实现,它允许您定义Amazon S3资源的访问权限 - 有几个Example Cases for Amazon S3 Bucket Policies说明了这些功能,其中包括我们还将找到限制访问特定IP地址的示例:
此语句向任何用户授予执行任何S3操作的权限 在指定存储桶中的对象上。但是,请求必须 源自条件中指定的IP地址范围。
根据您的用例的具体情况,针对此的存储桶策略可能如下所示:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket/*",
"Condition" : {
"IpAddress" : {
"aws:SourceIp": "192.168.143.0/24"
},
"NotIpAddress" : {
"aws:SourceIp": "192.168.143.188/32"
}
}
}
]
}
如图所示,参数aws:sourceIp
和IPAddress
的{{1}}值在CIDR notation中表示,从而为组成所需范围提供了相应的灵活性。
最后,您可能需要查看推荐的AWS Policy Generator,选择类型 S3 Bucket Policy 并浏览可用的操作和条件最终为您的用例撰写更具针对性的策略 - Conditions的文档详细解释了这一点。
答案 1 :(得分:6)
如果您的服务器要访问您的存储桶,IP地址将有所帮助。但JWPlayer来自客户端。所以请求直接从jwplayer(浏览器)到s3 bucket url,而不是通过你的服务器。在这种情况下,“推荐人桶政策”将帮助您。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::yourbucketname/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://yoursitename.com/*",
"http://*.yoursitename.com/*"
]
}
}
}
]
}
所以现在s3将允许该请求仅来自您的网站。
答案 2 :(得分:1)
您可以保护您的存储桶,默认情况下是这样。 (意味着您只能访问其中的对象)然后,您可以从您的网站请求Amazon S3中的文件,并为其提供用户可以看到的时间限制。
//set time so that users can see file for 1 minute. then it is protected again.
$response = $s3->get_object_url(YOUR_A3_BUCKET, PATH/TO/FILE, '1 minutes');
这将自动为您提供一个与其关联的参数的网址,该网址只能在1分钟内访问。您可以将其用作网站中的来源,然后在1分钟后无法将其复制并粘贴到浏览器中。
了解详情答案 3 :(得分:0)
限制对特定HTTP引荐来源的访问
假设您有一个域名网站(www.example.com或example.com),其中包含存储在您的Amazon S3存储桶中的照片和视频的链接,examplebucket。默认情况下,所有Amazon S3资源都是私有的,因此只有创建资源的AWS账户才能访问它们。要允许从您的网站对这些对象进行读访问,您可以使用aws:referer键添加一个允许s3:GetObject权限的存储桶策略,该条件允许get请求必须来自特定网页。以下策略使用aws:Referer条件键指定StringLike条件。
http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html
答案 4 :(得分:0)
对于现在遇到这个问题的每个人,请注意亚马逊已经更改了存储桶策略的 JSON 格式,现在要求单独列出每个允许/拒绝的 IP 或域。请参阅下面的示例。
无论哪种方式,我都强烈建议您使用 AWS Policy Generator 来确保您的格式正确。
AWS S3 存储桶策略 - 仅允许从多个 IP 访问
{
"Id": "Policy1618636210012",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1618635877058",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/folder/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "333.444.555.666"
}
},
"Principal": "*"
},
{
"Sid": "Stmt1618636151833",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/folder/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "222.333.444.555"
}
},
"Principal": "*"
},
{
"Sid": "Stmt1618636203591",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/folder/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "111.222.333.444"
}
},
"Principal": "*"
}
]
}