【问题标题】:CredentialsError: Could not load credentials from ChainableTemporaryCredentials in AWS-SDK v2 for JavascriptCredentialsError:无法从适用于 Javascript 的 AWS-SDK v2 中的 ChainableTemporaryCredentials 加载凭证
【发布时间】: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

【问题讨论】:

    标签: aws-sdk aws-sdk-js assume-role


    【解决方案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 进行验证。这就解释了我所看到的奇怪行为。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2023-04-07
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多