Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用CloudFront signer和Python Boto客户端生成预签名的PUT URL(如果可能的话)?_Python 3.x_Amazon S3_Boto3_Amazon Cloudfront - Fatal编程技术网

Python 3.x 如何使用CloudFront signer和Python Boto客户端生成预签名的PUT URL(如果可能的话)?

Python 3.x 如何使用CloudFront signer和Python Boto客户端生成预签名的PUT URL(如果可能的话)?,python-3.x,amazon-s3,boto3,amazon-cloudfront,Python 3.x,Amazon S3,Boto3,Amazon Cloudfront,我一直在使用python boto客户端开发S3存储应用程序。客户端请求从服务器为文件预签名上传(预签名放置)和下载(预签名获取)URL 使用boto3 s3会话,可以使用 response=session.generate\u presigned\u url( “放置对象”, Params={ “Bucket”:client.aws_Bucket, “键”:s3_对象, }, ExpiresIn=client.url\u过期, ) 然而,现在我正试图使用boto3的CloudFrontAPI

我一直在使用python boto客户端开发S3存储应用程序。客户端请求从服务器为文件预签名上传(预签名放置)和下载(预签名获取)URL

使用boto3 s3会话,可以使用

response=session.generate\u presigned\u url(
“放置对象”,
Params={
“Bucket”:client.aws_Bucket,
“键”:s3_对象,
},
ExpiresIn=client.url\u过期,
)
然而,现在我正试图使用boto3的CloudFrontAPI实现同样的功能。我随后生成了一个下载URL。(根据文件建议,键在aws控制台中设置)

如果使用s3预签名PUT URL上传,则无法下载通过CloudFront预签名URL生成的文件。它会导致以下错误(某些哈希值已更改以隐藏详细信息):


signaturedesnotmatch
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
删除访问密钥
AWS4-HMAC-SHA256 20200909T010545Z 20200909/us-east-1/s3/AWS4_请求dec845474b8be721379ebb7b43a31ad34c658eaf3c9668a428fc0bc0dff02b63
CD87AD2FC7D6248F8046DBDA7AA3DB8914C8704D2AB4E939AEECABF98C8EA37
41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 0a 32 30 32 30 39 30 39 54 30 30 35 35 5a 0a 32 30 32 30 39 30 39 2f 75 73 2d 65 61 73 74 2d 31 2f 73 33 2 F 61 77 73 34 5f 72 65 71 75 75 73 74 0a 64 65 63 38 34 34 34 34 34 34 34 34 62 62 33 33 33 31 64 33 33 34 63 36 36 35 65 66 66 33 33 36 36 6134 32 38 66 63 30 62 63 30 64 66 66 30 32 62 36 33
获取somefile.png主机:example.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20200909T010545Z主机;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
47 45 54 0a 2f 62 33 64 61 37 62 34 63 30 34 61 39 35 35 31 62 38 38 38 64 30 33 39 31 66 65 30 39 38 33 35 36 37 2f 73 2 E 70 6e 67 0a 68 6f 73 74 3a 62 6f 69 6e 67 2e 70 61 6e 61 65 61 6 C 74 68 2e 61 69 0a 78 2d 61 6d 7a 2d 63 6f 74 65 65 6 E 74 2d 73 61 35 35 35 35 36 3a 65 62 62 62 62 63 34 34 63 316331343961666263383939366662393343434343376165343333336363636363393963636363636363393535353963636363633535353550a782d616d7a2d646174653a32303303033953535353a0a686f73743b782d616d7a25663635336b782d616363636b782d616d7a64636363b782d616d6d7a2d6a646164747474747474746a2d61616164747474747465 0a 65 33 62 30 63 34 32 39 38 66 31 63 31 34 39 61 66 66 34 63 38 39 36 66 62 39 32 34 32 37 61 65 34 34 36 34 39 62 39 33 34 63 34 39 39 39 39 39 39 39 62 38 35 35 35
14670F552B7189A
2xVB5KGGC主机IDPARTJJLHVLD0ZDA7TimwuthxJYYRR/B9g3+RbhPZ7xjoHzKGI=

是否有一种使用CloudFront API生成预签名PUT URL的方法?我找不到任何有用的东西。或者客户端应该总是使用使用s3会话对象生成的预签名PUT URL进行上传吗?

经过几天的查找,我终于注意到了错误。从cloudFront控件来看,策略必须同时包含PutObject和GetObject。这允许使用相同的URL和PUT和GET方法分别上传和下载文件

        "Action": [
            "s3:PutObject",
            "s3:GetObject"
        ]
复制包含密钥的
*.pem
文件、再次下载文件并替换旧文件时,似乎也会出现问题,从而消除了身份验证问题