2

我正在尝试使用具有指定生存时间的查询字符串来限制对存储在 S3 存储桶中的文件资源的访问,(如此处所述http://birkoff.net/blog/amazon-s3-query-string-authentication-using -php/ ) 为我的存储桶的别名。例如,在 Route53 中,我有一个别名类型的 A 记录,securefiles.mysite.com指向 S3 别名securefiles.mysite.com.s3-website-ap-southeast-2.amazonaws.com

这适用于使用标准 S3 地址寻址的文件: securefiles.mysite.com.s3-ap-southeast-2.amazonaws.com/privateresource.png?biglongquerystringsecurefiles.mysite.com.s3.amazonaws.com /privateresource.png?biglongquerystring 但是当我尝试使用较短的 securefiles.mysite.com/privateresource.png?biglongquerystring链接它时,它会失败并显示 403,访问被拒绝消息。

为了调查,我编辑了存储桶策略以允许所有用户访问所有存储桶资源

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "PublicReadGetObject",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::securefiles.mysite.com/*"
    }
]

}

查询字符串现在适用于较短的地址,但它不再受到保护,因为所有用户现在都可以访问。

我还尝试对我的存储桶“不启用网站托管”,这对于完整的 S3 地址 Securefiles.mysite.com.s3.amazonaws.com/privateresource.png?biglongquerystring 再次正常工作, 在寻址时失败,出现 404 NoSuchWebsiteConfiguration较短的securefiles.mysite.com/privateresource.png?biglongquerystring

关于如何安全地将 S3 存储桶中的文件从 Route53 A 记录寻址到我的 S3 存储桶别名的任何想法?

4

1 回答 1

0

我执行了以下任务:

  • 在 Amazon S3 中创建了一个名为images.my-domain.com
  • 将文件上传到存储桶
  • 在 Amazon Route 53 中创建了一个记录集(一条记录,别名 = 是,别名目标 = s3-website-ap-southeast-2.amazonaws.com-- 是的,我也在悉尼)

测试 1 - 直接访问:单击 Amazon S3 ( s3-ap-southeast-2.amazonaws.com/images.my-domain.com/picture.jpg)中的对象链接AccessDenied按预期返回,因为该对象没有权限。

测试 2 - 直接预签名 URL:在 S3 中的对象上使用预签名 URL(通过BucketExplorer创建)(使用普通 S3 URL)成功提供了对对象的访问。这是可以预料的。

测试 3 - 别名访问:访问 Amazon S3 中的对象链接,但将其更改为直接使用域名 ( images.my-domain.com/picture.jpg)AccessDenied按预期返回。

测试 4 - 使用预签名 URL 的别名访问:通过带有预签名 URL 的静态网站 URL 访问失败。这与您遇到的问题一致。

因此,我同意似乎不可能将预签名 URL 与 Route 53 别名一起用于静态 S3 网站。

然后,我使用 Amazon S3 静态网站 URL 对其进行了进一步测试:

Tst 5 - S3 带有预签名 URL 的静态网站 URL:该测试尝试通过静态网站 URL( images.my-domain.com.s3-website-ap-southeast-2.amazonaws.com/picture.jpg) 和签名访问私有文件。这也回来了AccessDenied

因此,问题似乎不在于 Route 53 URL。相反,预签名 URL 似乎无法通过静态网站 URL 工作。由于 Route 53 使用静态 URL,因此也失败了。

于 2014-12-07T06:52:37.090 回答