CredentialsError:无法从适用于 Javascript 的 AWS-SDK v2 中的 ChainableTemporaryCredentials 加载凭证

Posted

技术标签:

【中文标题】CredentialsError:无法从适用于 Javascript 的 AWS-SDK v2 中的 ChainableTemporaryCredentials 加载凭证【英文标题】:CredentialsError: Could not load credentials from ChainableTemporaryCredentials in AWS-SDK v2 for Javascript 【发布时间】:2022-01-10 16:35:22 【问题描述】:

我正在尝试在 AWS-SDK v2 中为 javascript 设置临时凭证:

const aws = require('aws-sdk')

aws.config = new aws.Config(
  credentials: new aws.ChainableTemporaryCredentials(
    params: 
      RoleArn: roleArn, // Defined earlier
      RoleSessionName: sessionName, // Defined earlier
      DurationSeconds: 15 * 60
    ,
    masterCredentials: new aws.Credentials(
      accessKeyId: accessKeyId, // Defined earlier
      secretAccessKey: awsSecretAccessKey // Defined earlier
    )
  ),
  region: 'us-east-1',
  signatureVersion: 'v4'
)

aws.config.getCredentials(function (err) 
  if (err) console.log(err.stack)
  else console.log('Access key:', aws.config.credentials.accessKeyId)
)

但是,在调用 getCredentials 时,我不断收到以下错误: CredentialsError: Could not load credentials from ChainableTemporaryCredentials

请注意,如果我将credentials 参数设置为主凭据而不是临时凭据,则效果很好,如下所示:

aws.config = new aws.Config(
  credentials: new aws.Credentials(
    accessKeyId: accessKeyId, // Defined earlier
    secretAccessKey: awsSecretAccessKey // Defined earlier
  ),
  region: 'us-east-1',
  signatureVersion: 'v4'
)

有谁知道是什么导致了这个问题?这是我引用的文档: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ChainableTemporaryCredentials.html

【问题讨论】:

【参考方案1】:

我终于能够找出这个错误的原因。

让我找出错误原因的原因是我打印了完整的错误,而不仅仅是最近的错误。错误的属性之一是:

originalError: 
          message: 'The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.',
          code: 'SignatureDoesNotMatch',
          time: 2021-12-11T19:49:52.395Z,
          requestId: '402e4c32-7989-4287-a6a9-628bfc93f60f',
          statusCode: 403,
          retryable: false,
          retryDelay: 39.60145242362791
        

所以我意识到问题在于我提供的硕士证书不正确!

实际上我一直都知道这些凭据不正确,但出于单元测试的目的,只要我不提供临时凭据,它似乎就可以很好地处理这些不正确的凭据。但现在我了解到,如果您使用临时凭证,getCredentials 函数会通过 AWS 验证凭证,但在使用 just 主凭证时不会通过 AWS 进行验证。这就解释了我所看到的奇怪行为。

【讨论】:

以上是关于CredentialsError:无法从适用于 Javascript 的 AWS-SDK v2 中的 ChainableTemporaryCredentials 加载凭证的主要内容,如果未能解决你的问题,请参考以下文章

CredentialsError:nodejs aws-sdk 中的配置中缺少凭据

无法从 Flutter Web 读取 Firestore 中的数据(适用于 iOS 和 android)

适用于 Windows 7 的 Git 无法从 github 克隆存储库

GDAL warp 太多点无法转换。它适用于相似的图像和来源

NamedPipeServerStream无法在Windows 10上运行(适用于Windows 7)

适用于 Windows 的 ClickHouse MYSQL 驱动程序无法正常工作