java - AWS S3:我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法
问题描述
我正在尝试使用环境变量中提供的访问密钥和机密从 S3 下载 CSV 文件。以下是我基于调试的发现。
- 我的一个文件夹名称以
/
导致此问题的开头,其他文件夹和文件正在工作文件。 - AWS 控制台不允许您创建名称以 . 开头的文件夹
/
。但是,成本使用报告可以包含/
在报告路径前缀中,该前缀在 S3 存储桶中创建该文件夹。 - 我可以通过
/
在文件夹名称前附加一个来使用 CLI 下载文件。我还检查了 Java SDK 代码,它也做同样的事情,但它没有工作。 - 我能够列出文件,但是当我尝试获取 s3Object 时它给出了
SignatureDoesNotMatch
错误。
我尝试了所有可能的解决方案,但它最终无法从 AWS JAVA SDK 工作,但它正在使用 AWS CLI。
有人可以为我提供任何指针或参考吗?我尝试了互联网上给出的一些解决方案,但对我没有任何作用。
低于错误
com.amazonaws.services.s3.model.AmazonS3Exception:
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。(服务:Amazon S3;状态代码:403;错误代码:SignatureDoesNotMatch;请求 ID:A2C6F2F49F230E18;S3 扩展请求 ID:xxxxxxxx),S3 扩展请求 ID:yyyyyyyyyyyy
注意:我正在使用带有 JAVA SDK 版本 1.11.510 的 Spring Boot 应用程序。
解决方案
调试了两天,发现Spring boot版本有问题。
在更新 Spring Boot 版本2.1.0.RELEASE后,我使用的是Spring Boot 版本2.1.3.RELEASE,它就像一个魅力。
注意:此问题仅发生在少数以“/”开头的 S3 文件夹中。
仅供参考: https ://github.com/aws/aws-sdk-java/issues/1919#issuecomment-471451804
从 AWS AWS 控制台查找
不允许创建名称以“/”开头的文件夹,但是成本使用报告可以在路径前缀中包含“/”。
推荐阅读
- html - 包含 h3 和使用空格的部分的 Flexbox 在 Safari 中不起作用
- node.js - Express.js 应用程序在没有 PM2 重新启动的情况下停止
- azure-data-factory-2 - 分页规则 - 发出下一个请求的 HTTP 响应标头
- v-select - Vuetify,js - 是否可以默认打开 v-select?有这样的选择吗?
- c++11 - c++11中如何约束参数包类型?以及如何在cpp中实现模板?
- python - get user from established mysql connection
- sas - SAS: divide table by another table
- javascript - 无法读取 gulp 中未定义的属性“watch”
- uml - 如何绘制表示同一类继承树中方法之间调用的UML图?
- django - 在 pycharm 上安装 Django 时出错