使用AWS-SDK JS V3实例化S3类时出现“凭据丢失”错误

时间:2020-06-27 15:42:32

标签: amazon-web-services amazon-s3 aws-sdk aws-sdk-js

在更新版本的aws-sdk javascript v3中从class S3创建S3客户端时,我遇到了错误消息。

我添加了aws config参数,包括在服务级别(实例化S3类时)对用户进行身份验证(假设角色具有调用aws sts的权限)时从getObject获得的凭据以及其他参数。请参阅下面的代码:

const { S3, ... } = require("@aws-sdk/client-s3");

someFunc();
function someFunc(authUserCredentials) {
 ...
 try {

   const { AccessKeyid, SecretKey, SessionToken } = authUserCredentials;
   const s3Client = new S3({
                      signatureVersion: 'v4',
                      accessKeyId: AccessKeyId,
                      secretAccessKey: SecretKey,
                      sessionToken: SessionToken,
                      region: 'us-east-1',
   });

   console.log(s3Client.config);
   ...

 }catch(e) {
     console.error(e);
 }
}

我检查了class S3回购中的aws-sdk-js-v3代码,似乎没有必要使用“凭据”构造函数config参数。我在做错什么吗?

2 个答案:

答案 0 :(得分:2)

根据constructor的文档,这些参数是有效的。

对于凭据对象,仍存在名为credentials的自变量名称。如果您实例化一个AWS.Credentials对象,则可以将其传递给该参数。

答案 1 :(得分:0)

仅是为了阐明Chris Williams的答案以及@ Waleed93的第二条评论,用于AWS Javascript SDK v2的是:

import S3 from 'aws-sdk/clients/s3';

const AccessKeyId = xxxxx,
      SecretKey = yyyyyyyy,
      SessionToken = zzzzzzzzzz;

const s3Client = new S3({
    apiVersion: '2006-03-01',
    region: 'us-east-1',
    accessKeyId: AccessKeyId,
    secretAccessKey: SecretKey,
    sessionToken: SessionToken
});

对于SDK v3,构造函数不再接受单独的凭据参数,而是将“凭据”对象作为参数。有效的是:

const { S3 } = require('@aws-sdk/client-s3');

const AccessKeyId = xxxxx,
      SecretKey = yyyyyyyy,
      SessionToken = zzzzzzzzzz;

const creds = {
    accessKeyId: AccessKeyId,
    secretAccessKey: SecretKey,
    sessionToken: SessionToken
};

const s3Client = new S3({
    apiVersion: '2006-03-01',
    region: 'us-east-1',
    credentials: creds
});

此更改在AWS开发工具包文档,类参考或SDK版本3的开发人员指南中找不到。

感谢Chris和@ Waleed93找出来。