首页 > 解决方案 > AmazonS3Exception:授权标头格式错误;该地区是错误的

问题描述

在 Stackoverlfow 中找到了一些涵盖相同错误的主题,但场景与我的不匹配。有一个 AWS s3 java 客户端程序,在将文件上传到 s3 存储桶时在 Windows 上运行良好。现在尝试在 Linux (Ubuntu) 服务器上运行相同的程序,并收到此错误

com.amazonaws.services.s3.model.AmazonS3Exception:授权标头格式错误;区域“us-east-1”是错误的;期待“eu-west-2”(服务:Amazon S3;状态代码:400;错误代码:AuthorizationHeaderMalformed;请求 ID:

我将 .aws\credentials 文件从我的 Windows 笔记本电脑上传到服务器上的 ~/.aws/ 目录。没有做任何改变。在与 AWS 上的 IAM 进行交叉检查后,我确认我拥有正确的凭证密钥。

这是设置区域 AmazonS3 s3Client 的代码(是的,它是硬编码的);私有静态最终字节[]缓冲区=新字节[4096 * 1024];

public FileUpload() {
    s3Client = AmazonS3ClientBuilder.standard().withRegion("us-east-1").build();
}

我在 AWS 控制台中手动创建了存储桶,它位于 us-east-1 区域。

我需要 ~/.aws 下的配置文件吗?Windows 笔记本电脑上没有

标签: javalinuxamazon-web-servicesamazon-s3

解决方案


我认为这是 AWS 的愚蠢之处之一,它会产生一些误导性的错误。当我在 AWS 控制台中创建存储桶名称时,没有错误表明存储桶名称已存在于另一个区域中,因此我认为一切都很好。所以刚才我删除了存储桶并创建了一个新存储桶,并在存储桶名称中使用了我的部分帐户名称,以确保它在区域之间是唯一的。这次从 Linux 系统上传成功了。所以最终不必对 Linux 服务器上的配置重做任何事情。


推荐阅读