当前位置: 首页 > 知识库问答 >
问题:

Boto3 generate_presigned_url,SignatureDoesNotMatch错误

柳项明
2023-03-14
client_s3 = boto3.client(
    's3',
    # Hard coded strings as credentials, not recommended.
    aws_access_key_id='XXX',
    aws_secret_access_key='XXX',
    region_name='us-east-2',
    # EDIT: Previously, I used signature_version='v4' here, but as a user here pointed out, this might not work. Regardless, I tried 's3v4' prior to trying 'v4' and neither worked for me.
    config=Config(signature_version='s3v4')
)

url = client_s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'BUCKET_NAME',
        'Key': 'CORRECT_KEY'
    }
)

当所有使用的参数看起来都是正确的时,是什么造成了这个错误?我如何解决它?

共有1个答案

戎元忠
2023-03-14

boto3的文档中明确提到,该选项应该类似于config=config(Signature_version='s3v4')v4不起作用。

这是boto3文档的一个示例。

import boto3
from botocore.client import Config

# Get the service client with sigv4 configured
s3 = boto3.client('s3', config=Config(signature_version='s3v4'))

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='get_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    }
)

顺便说一句,US-EAST-2只允许签名Verion4,所以您不需要指定它。看这个。

 类似资料:
  • 我正在使用AWS Javascript SDK将文件放入我的S3。下面的代码旨在将用户头像上载到S3。我现在要硬编码accessKeyId和secretAccessKey,并从web表单获取文件和密钥上传。 上面的代码给了我一个SignatureDoesNotMatch的错误返回,我对此感到困惑,因为我以为我是让API执行签名,而它的早期版本(不幸的是,我无法复制)没有给我这个错误。

  • 我正在制作一个面部跟踪视频()。它将返回作业id。我已经设置了所有部分。这里我的问题是,我无法使用从SQS获取消息。甚至也不工作。它给出了以下错误。 https://sqs.us-east-1.amazonaws.com上的列表队列;AWS HTTP错误:客户端错误:导致响应: 此请求的规范字符串应为“POST/…”。。。。。。。 代码如下所示。AWS PHP SDK版本3.64。11 提前感谢!

  • 我得到一个AWS错误代码:SignatureDoesNotMatch,状态代码:403时,试图通过亚马逊SES发送邮件。 我已经确认我正在使用通过https://console.aws.amazon.com/iam/home?#users创建的正确凭据,错误仍然存在。 我假设我在iam/home上创建的凭据实际上是全局的,但我不知道我进一步做错了什么。整个错误是: AWS错误代码:Signatur

  • 我在使用aws ses时遇到SignatureDesNotMatch错误。我使用GMT日期和HMAC SHA256的安全密钥创建签名密钥,然后将其转换为Base64。 签名=base64(HMAC SHA256(日期,安全密钥)); 网址:https://email.us-west-2.amazonaws.com?Action=SendEmail 输入标题为x-amz-date: Thu,30 J

  • 我正在尝试通过超文本标记语言表单将图像上传到AWS S3存储桶。 但是,提交表单会导致错误“SignatureDoesNotMatch”和消息“我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。” 我检查了一些关于同一主题的现有问题,但他们的答案并没有解决问题。 我到底做错了什么?

  • 我正试图生成一个预先签名的URL,其中包含文档中可用的确切代码: https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/examples-s3-presign.html 但我有一个错误: 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。 知道文档代码为什么不起作用吗?这似乎与AWS签名V4有关。我不知道