【问题标题】:Unable to upload files to my S3 bucket无法将文件上传到我的 S3 存储桶
【发布时间】:2018-05-13 02:16:37
【问题描述】:

我最近创建了一个 AWS 免费套餐帐户,并为一个实验项目创建了一个 S3 存储桶,该项目使用部署在 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>

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

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

如果您对这个问题还有其他需要,请告诉我

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案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 中创建一个新存储桶,因为存储桶无法在区域之间移动。

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

    【讨论】:

    • 嗨,迈克尔,感谢您的回答。我接受了你的想法,然后继续找出如何通过carrierwave指定区域并且它起作用了
    • @NishanthSeshadri 如果答案有助于解决问题,那么不要忘记标记为已接受的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 2018-04-04
      • 2017-10-17
      • 1970-01-01
      • 2020-01-18
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多