代码之家  ›  专栏  ›  技术社区  ›  Pavan Vasan

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

  •  1
  • Pavan Vasan  · 技术社区  · 7 年前

    我最近创建了一个AWS免费层帐户,并为一个实验项目创建了一个S3 bucket,该项目使用heroku中部署的rails进行生产。但我在告诉你出了什么问题时出错了。

    通过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>
    

    在创建bucket时,我将S3位置放在了美国东部(俄亥俄州),而不是美国标准(我想)。是因为这个吗?

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

    关于这个问题,如果你还有什么需要我帮忙的,请告诉我

    2 回复  |  直到 7 年前
        1
  •  4
  •   Michael - sqlbot    7 年前

    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中创建一个新的存储桶,因为存储桶不能在区域之间移动。

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

        2
  •  0
  •   dpwr    7 年前

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