【问题标题】:Amazon S3 Bucket policy, allow only one domain to access filesAmazon S3 Bucket 策略,只允许一个域访问文件
【发布时间】:2015-10-19 05:28:40
【问题描述】:

我有一个 S3 存储桶,里面有一个文件。我只希望某个域能够访问该文件。我在桶上尝试了一些策略,但都不起作用,这个来自AWS documentation

{
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Allow get requests originated from www.example.com and example.com",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://www.phpfiddle.org/*",
                        "http://phpfiddle.org/*"
                    ]
                }
            }
        }
    ]
}

为了测试该文件,我在 phpfiddle.org 上托管了一个代码并拥有此代码。但我无法通过直接从浏览器访问或通过 phpfiddle 代码访问此文件。

<?php 
    $myfile = file_get_contents("https://s3-us-west-2.amazonaws.com/my-bucket-name/some-file.txt");
    echo $myfile;
    ?>

这里是文件的权限,bucket本身也有同样的权限+上面的策略。

这只是一个示例链接,并非实际可用的链接。

【问题讨论】:

    标签: amazon-web-services amazon-s3 same-origin-policy


    【解决方案1】:

    限制对特定 HTTP 引荐来源网址的访问存储桶策略仅允许从您的域中的页面访问您的文件(HTTP 引荐来源网址是您的域)。

    假设您有一个域名(www.example.com 或 example.com)网站,其中包含指向存储在 S3 存储桶 examplebucket 中的照片和视频的链接。

    您无法从浏览器直接访问您的文件(直接在浏览器中输入文件 URL)。您需要从您域中的任何页面创建链接/图像/视频标签。

    如果您想从 S3 发送file_get_contents,您需要创建一个新策略以允许您的服务器 IP(请参阅example)。将 IP 地址更改为您的服务器 IP。

    另一种解决方案是使用AWS SDK for PHP 将文件下载到本地。您也可以generate a pre-signed URL 允许您的客户在有限的时间内直接从 S3 下载。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 2013-08-12
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 2017-06-08
      相关资源
      最近更新 更多