AWS S3仅允许将存储桶中的图像显示在特定的IP地址上

时间:2018-09-06 16:07:42

标签: php amazon-web-services amazon-s3 ip

我一直在使用AWS PHP SDK进行一些工作,并且能够将对象上传到存储桶(基础知识)。

我使用此存储的主要目的是使用它将一组相关文件捆绑在一起,其中一个是缩略图,并且这些文件组已显示在站点成员区域的网格中。 / p>

我不想公开S3 URL,但是我希望文件在服务器IP地址上时可以查看/下载。

我尝试使用策略生成器,但不确定这是否是实现我要实现的目标的正确方法?

我应该使用S3 URL来使缩略图显示在后端吗?还是应该使用SDK的GetObject函数?

由于我目前不确定我应该朝哪个方向前进,因此不胜感激。

谢谢, 凯恩

1 个答案:

答案 0 :(得分:2)

您可以使用存储桶策略来仅允许来自特定IP的访问,如this example所示:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      } 
    } 
  ]
}

确保您指定服务器用来访问S3的公共IP。在上面的示例中,54.240.143.0/24是CIDR块而不是IP地址。如果您要过滤特定的IP(例如53.22.121.12),请添加/ 32掩码,例如:53.22.121.12/32

我个人更喜欢在权限UI中将存储桶策略编辑为JSON,但是您也可以使用策略生成器。

我建议您使用GetObject将内容从S3检索到应用程序。在这种情况下,您可以使S3存储桶仅对您的应用服务器开放,而不对公众开放。