微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

节点 S3 对象存储 Linode

如何解决节点 S3 对象存储 Linode

我正在尝试使用 aws-sdk 来访问我的 linode S3 兼容存储桶,但是我尝试的所有方法都不起作用。不确定正确的端点应该是什么?出于测试目的,我的存储桶设置为公共读/写。

const s3 = new S3({
  endpoint: "https://linodeobjects.com",region: eu-central-1,accesKeyId: <accesKey>,secretAccessKey: <secretKey>,});

const params = {
  Bucket: bucketName,Key: "someKey",Expires: 60,};

const uploadURL = await s3.getSignedUrlPromise("putObject",params);

我得到的错误

code: 'CredentialsError',time: 2021-07-15T08:29:50.000Z,retryable: true,originalError: {
    message: 'Could not load credentials from any providers',code: 'CredentialsError',originalError: {
      message: 'EC2 Metadata roleName request returned error',code: 'TimeoutError',time: 2021-07-15T08:29:49.999Z,originalError: [Object]
    }
  }
}

解决方法

执行此代码的环境的凭据似乎有问题,而不是存储桶权限本身。

URL 的预签名是一项完全在本地完成的操作。它使用本地凭证(即访问密钥 ID 和秘密访问密钥)为 URL 创建 sigv4 签名。这也意味着用于签署 URL 的凭据是否有效仅在使用 URL 时检查,而不是在签署 URL 本身时检查。

该错误仅表明,从 SDK 尝试查找凭据的所有方式(更多信息 here)中,它无法找到可用于对 URL 进行签名的凭据。

这可能不相关,但根据文档,端点应如下所示:The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like 'https://{service}.{region}.amazonaws.com' or an Endpoint object. 在上面的代码示例中,情况并非如此。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。