如何获取使用 Cloudfront 上传的 S3 存储桶中的文件?

Posted

技术标签:

【中文标题】如何获取使用 Cloudfront 上传的 S3 存储桶中的文件?【英文标题】:How to get a file in a S3 bucket that was uploaded using Cloudfront? 【发布时间】:2014-07-27 12:31:03 【问题描述】:

我目前正在尝试在现有 S3 存储桶上实现 Cloudfront 上传(POST/PUT 方法)。

我的 Cloudfront 发行版似乎配置良好。 我正在使用 Cloudfront 签名的 url 将我的文件上传到 S3 存储桶中。它工作正常。 文件上传后,我可以使用 Cloudfront 签名的 url 访问它们。也不错。

但我发现我无法使用 AWS 凭证(access_key_id 和 secret_key)访问上传的文件(通过 Cloudfront)。 每次,我尝试这个,我都会收到一个 AccessDenied 错误代码。

我觉得 S3 存储桶策略的配置中缺少某些内容。 这是我当前的 S3 存储桶政策:


    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        
            "Sid": "1",
            "Effect": "Allow",
            "Principal": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXX",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::XXXXX-XXXXXX-XXXX/*"
        
    ]

我错过了什么还是不可能?

【问题讨论】:

你肯定错过了一些东西,虽然与你想要做的事情没有真正的关系。允许 Principal "*" 的 PutObject 是一种难以想象的不安全 配置,而您正在为 GetObject 做同样的事情,因为您称之为“私有”内容?使用该配置,似乎很难说出什么是实际工作(正确)以及什么只是出于您预期之外的原因而盲目允许。 我的错,这不是我的 S3 策略的 Principal 值。请检查我的帖子更新。 本文档解释了我想要做什么:docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…。但我希望实现第 1 点而不执行第 2 点。 【参考方案1】:

我曾经遇到过同样的问题。

尝试将标头“x-amz-acl=bucket-owner-full-control”添加到上传请求中,这样应该可以解决问题。

希望对你有帮助!

【讨论】:

以上是关于如何获取使用 Cloudfront 上传的 S3 存储桶中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 无法通过 Cloudfront 上传文件

S3 + Cloudfront 上的浏览​​器缓存破坏

使用 .htaccess 从 Amazon S3 CloudFront 访问服务器文件

同一 CloudFront 分配中的多个 S3 存储桶

将 Cloudfront 添加到 S3

如何将 CloudFront 和 S3 与备用域一起使用?