Amazon s3 只能从我的域/服务器访问amazon s3视频文件?

Amazon s3 只能从我的域/服务器访问amazon s3视频文件?,amazon-s3,Amazon S3,现在,我知道我不能阻止别人下载我的视频和分享,但我更愿意这样做,这样人们就不会直接将粘贴链接复制到我的bucket上。因此,有没有办法使我的bucket只能从发出请求的服务器/域访问 如果有帮助的话,我正在使用jwplayer,它从包含所有链接的xml播放列表加载。这个播放列表绝对可以从任何地方打开和查看,这是我希望轻松复制和粘贴的来源 我不想屏蔽URL,因为这意味着我的bucket对每个人都是可读的。可能有人会找到我的bucket的url和文件名,并将所有内容连接在一起 这是可能的,它允许您定

现在,我知道我不能阻止别人下载我的视频和分享,但我更愿意这样做,这样人们就不会直接将粘贴链接复制到我的bucket上。因此,有没有办法使我的bucket只能从发出请求的服务器/域访问

如果有帮助的话,我正在使用jwplayer,它从包含所有链接的xml播放列表加载。这个播放列表绝对可以从任何地方打开和查看,这是我希望轻松复制和粘贴的来源

我不想屏蔽URL,因为这意味着我的bucket对每个人都是可读的。可能有人会找到我的bucket的url和文件名,并将所有内容连接在一起

这是可能的,它允许您定义Amazon S3资源的访问权限-有几个示例演示了该功能,其中您还可以找到一个限制访问特定IP地址的示例:

此语句向任何用户授予执行任何S3操作的权限 在指定存储桶中的对象上。但是,必须提出请求 源自条件中指定的IP地址范围

根据您的用例的具体情况,用于此目的的bucket策略可能如下所示:

{
    "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" 
                } 
            } 
        } 
    ]
}
如图所示,参数
IPAddress
NotIpAddress
aws:sourceIp
值在中表示,从而实现了组成所需范围的相应灵活性


最后,您可能希望查看推荐的,选择类型S3 Bucket Policy,并探索可用的操作和条件,以便最终为您的用例组成更具针对性的策略-的文档对此进行了详细解释。

您可以保护您的Bucket,默认情况下是这样的。(这意味着你只能访问其中的对象)然后你可以从你的网站向AmazonS3请求文件,并给它一个时间限制,用户可以看到它

//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');
这将自动为您提供一个url,该url包含与之关联的参数,该参数仅在1分钟内可访问。你可以在你的网站中将其作为你的来源,然后他们在1分钟后无法将其复制并粘贴到浏览器中


您可以在

上了解更多信息,如果您的服务器要访问您的存储桶,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将允许该请求。

限制对特定HTTP引用的访问

假设您有一个域名为(www.example.com或example.com)的网站,该网站的照片和视频链接存储在您的Amazon S3 bucket examplebucket中。默认情况下,所有AmazonS3资源都是私有的,因此只有创建资源的AWS帐户才能访问它们。要允许从您的网站读取这些对象,您可以添加一个bucket策略,该策略允许s3:GetObject权限,并且使用aws:referer键的条件是get请求必须来自特定的网页。以下策略使用aws:Referer条件键指定StringLike条件


对于现在遇到这个问题的每个人,请注意,Amazon已经更改了bucket策略的JSON格式,现在要求单独列出每个允许/拒绝的IP或域。请参见下面的示例

无论如何,我强烈建议使用,以确保您的格式是正确的

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": "*"
    }
  ]
}

谢谢Steffen,只是想知道,我可以用域名来代替ip地址吗?原来我必须每月付费才能为我的共享主机获得一个唯一的ip…@Ali:恐怕这是不可用的(尽管这确实是一个明显的用例);我已经更新了答案的最后几段,内容涉及aws:sourceIp使用的CIDR表示法以及其他可用和可通过的条件-前者可能允许您指定提供商可能使用的所有IP地址块(如果有文档记录),从而大大减少了热链接面。当然,这是否可行取决于您的用例和环境(即提供者)。有关特定于域的权限,请参阅arulraj.net的答案。我知道这是两年后的事了,但这条评论是通过我的搜索得到的,所以我想我会更新它。这可以在桶级别上完成吗?e、 g.为存储桶中的所有文件获取一个签名url,该url将在XX之后过期,而不需要在运行时为每个url请求该url?如果任何人通过设置Referer标头发送请求,那么我认为在这种情况下,他将轻松下载视频。