无法将文件上传到我的S3存储桶

时间:2018-05-13 02:16:38

标签: amazon-web-services amazon-s3

我最近创建了一个AWS免费套餐帐户,并使用在heroku中部署的rails进行生产,为实验项目创建了一个S3存储桶。但是我收到一个错误,告诉他们出了问题。

通过我的heroku日志,我收到了这样的描述: -

<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-east-2'</Message><Region>us-east-2</Region><RequestId>08B714808971C8B8</RequestId><HostId>lLQ+li2yctuI/sTI5KQ74icopSLsLVp8gqGFoP8KZG9wEnX6somkKj22cA8UBmOmDuDJhmljy/o=</HostId></Error>

在创建存储桶时,我将我的S3位置放到美国东部(俄亥俄州)而不是美国标准(我认为)。是因为这个吗?

我如何解决此错误?有没有办法改变我的S3桶的属性?如果不是,我应该建立一个新的存储桶并设置一个允许访问该存储桶的新策略吗?

如果您对此问题还有什么需要,请告诉我

2 个答案:

答案 0 :(得分:1)

AWS服务的首选身份验证机制(称为签名版本4)为每个用户(每个区域)中的每个服务创建不同的安全凭据。签署请求时,会使用特定于该用户,日期,区域和服务的签名密钥对其进行签名。

the region 'us-east-1' is wrong; expecting 'us-east-2'

此错误表示使用us-east-1的凭据向us-east-2发送了请求。

错误的“区域”在这里指的是凭据的区域。

您应该能够在代码中specify the correct region并解决问题。由于遗留原因,S3与大多数AWS服务略有不同,因为如果您在代码中指定了错误的区域(或者默认区域与存储区域不同),那么您的请求仍会自动路由到正确的区域...但凭据不匹配。 (大多数其他服务不会自动路由到正确的区域,因此如果您的代码使用的区域不正确,请求通常会以不同的方式失败。)

否则,您需要在us-east-1中创建一个新存储桶,因为存储区不能在区域之间移动。

如果删除旧存储桶,则可以为新存储桶保留相同的存储桶名称,但是在删除存储桶的时间与服务允许重复使用的时间之间通常会有几分钟的延迟创建新存储桶的名称相同,因为存储区目录是全局资源,目录更改(存储区删除)需要一些时间才能传播到所有区域。在删除存储桶之前,它必须为空。

答案 1 :(得分:0)

是的,你为你的问题找到了解决办法。只需在正确的区域创建一个存储桶并使用它。如果您希望它与原始存储桶一样被调用,则需要在us-east-2上删除它,然后在us-east-1中创建它,因为存储桶名称是全局唯一的。