我们计算的请求签名与您提供的签名不匹配 - AWS

Posted

技术标签:

【中文标题】我们计算的请求签名与您提供的签名不匹配 - AWS【英文标题】:The request signature we calculated does not match the signature you provided - AWS 【发布时间】:2015-10-17 21:45:10 【问题描述】:

我在尝试访问我在 S3 上的一个文件时收到以下错误:

<Error>
    <Code>SignatureDoesNotMatch</Code>
    <Message>
        The request signature we calculated does not match the signature you provided. Check your key and signing method.
    </Message>
</Error>

图像在我的网站上正常显示,但通过我的 API 访问它会出现上述错误。知道为什么会这样吗?

S3 设置:

AWS_ACCESS_KEY_ID = 'key here'
AWS_SECRET_ACCESS_KEY = 'key here'

AWS_STORAGE_BUCKET_NAME = 'bucket name'
AWS_CLOUDFRONT_DOMAIN = 'something.cloudfront.net'

STATICFILES_STORAGE = 'oby.s3utils.StaticRootS3BotoStorage'
STATIC_S3_PATH = 'media/'
DEFAULT_FILE_STORAGE = 'oby.s3utils.MediaRootS3BotoStorage'
DEFAULT_S3_PATH = 'static/'

S3_URL = '//.s3.amazonaws.com/'.format(AWS_STORAGE_BUCKET_NAME)
MEDIA_ROOT = 'this is fine'
STATIC_ROOT = 'this is fine'
MEDIA_URL = '///'.format(AWS_CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
STATIC_URL = '///'.format(AWS_CLOUDFRONT_DOMAIN, DEFAULT_S3_PATH)

AWS_PRELOAD_METADATA = False

提前感谢您的任何帮助!

【问题讨论】:

“通过我的 API 访问它会出现上述错误”是什么意思?请举例说明您正在使用的网址。如果您列举您正在使用的库,也会很有帮助。 @matagus 我正在为我的 API 使用 Django Rest 框架。当我说我无法从我的 API 访问它时,我的意思是它显示图像的 S3 url。例如,url 看起来像:bucket.s3.amazonaws.com/s3/...。当我转到该链接时,我得到了错误。但是,如果我转到我网站上显示图像的页面,它会完美显示。这有意义吗? 【参考方案1】:

可能有多种原因。一个常见问题是客户端上的系统时间。如果距离“真实”时间太远,可能会发生此错误。

【讨论】:

有没有办法让它们在时间上更接近? 使用ntp。查找操作系统的命令行并运行一次。然后再次尝试 aws 命令

以上是关于我们计算的请求签名与您提供的签名不匹配 - AWS的主要内容,如果未能解决你的问题,请参考以下文章

我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法

AWS S3 - 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法

AWSSecretsManagerException:我们计算的请求签名与您提供的签名不匹配

为啥会提示“我们计算的请求签名与您提供的签名不匹配”。对于 GET 但不是 PUT 对于 OpenSearch?

使用 Amazon API MWS 进行签名查询

Amazon S3 - 如何修复“我们计算的请求签名与签名不匹配”错误?