繁体   English   中英

AmazonS3Exception:授权 header 格式错误; 该地区是错误的

[英]AmazonS3Exception: The authorization header is malformed; the region is wrong

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

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

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

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

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

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

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

请注意,Windows 文件具有不同的行尾字符 CRLF,这可能会导致 Linux 中的错误。

显然 AWS SDK 认为您的区域是 us-west-2。 不要从您的 windows PC 中复制 .aws 目录,而是从头开始在 linux 框中设置 AWS 配置。

  1. 删除或备份.aws 目录并确保没有~/.aws。
  2. 运行“aws 配置”
$ aws configure
AWS Access Key ID [None]: <YOUR AWS ID>
AWS Secret Access Key [None]: <YOUR KEY>
Default region name [None]: us-east-1      <----- Region
Default output format [None]: json         <----- change to the format you prefer

请通过配置 AWS CLI花费足够的时间来 go 。 如果不了解基础知识以及 AWS 配置的工作原理,您将花费大量时间而无法解决问题。

然后使用 AWS CLI s3 命令从 linux 框中测试您的 S3 存储桶,例如在 S3 存储桶中列出文件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM