Amazon S3 无法通过 Cloudfront 上传文件

2024-05-06

我想通过 Cloudfront 使用签名 URL 将文件上传到 S3。 Cloudfront 行为中允许 HTTP PUT。 桶策略

             {
        "Sid": "2",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1C2T5UJU07REZ"
        },
        "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject"
        ],
        "Resource": "arn:aws:s3:::testback/*"
    }

CORS 配置中允许 HTTP PUT。 Cloudfront用户也有读、写权限。 当我尝试上传带有签名 URL 的文件时。

curl -v -X PUT -F [email protected] /cdn-cgi/l/email-protection  http://my-host.cloudfront.net/hello.txt?Expires=1514764800&Signature=MySig&Key-Pair-Id=My-KeyPair

我有一个错误:

InvalidRequest不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。 5D5DEF3D06F4583C8rBCpTUzYwm1ccc8IfkNtUnkuLxr3RZ2n7xn1j+VvP5dpG+3NMpHKPiNQ5tKpJjVliZ9UBI52vk=

Log:

2017-06-19 03:23:08 FRA54 726 My-IP 放置
my-host.cloudfront.net /hello.txt 400 -
卷曲/7.50.1
过期=1514764800&Signature=My-Sig&Key-Pair-Id=My-KeyPair - 错误MMHwKFzGuBzrlgP0yV71elcwEp2RVBAwJRJD1A5rO4Na6UmeKvcZPQ==
my-host.cloudfront.net http 838 0.235 - --
错误 HTTP/1.1

另外,GET、DELETE 也可以正常工作。


来自 CloudFront 文档:

如果您使用源访问身份,并且您的存储桶位于需要签名版本 4 进行身份验证的区域之一,请注意以下事项:

DELETE, GET, HEAD, OPTIONS, and PATCH无条件支持请求。

如果您想提交PUT请求 CloudFront 将对象上传到您的 Amazon S3 存储桶时,您必须添加x-amz-content-sha256请求的标头,标头值必须包含请求正文的 SHA256 哈希值。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-origin-access-identity-signature-version-4 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-origin-access-identity-signature-version-4

您需要将对象主体的 SHA256 的十六进制表示形式添加到x-amz-content-sha256请求标头。

CloudFront 会在 a 中包含此标头似乎出乎意料PUT作为内部切换到 V4 签名算法的神奇触发器...但由于上传是强制性的,没有它,V4 签名将无效,所以也许它甚至不会尝试 V4(CloudFront 早于 Signature V4) )。对于其他操作,V4 不需要修改用户代理行为,但是对于PUT,因此,在没有 V2 的情况下,CloudFront 将 V2 作为默认值是有意义的,即使这是错误的,这样现有代码就不会在已经运行的地方出现问题。无论如何,这似乎应该是您的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Amazon S3 无法通过 Cloudfront 上传文件 的相关文章

随机推荐