首页 > 解决方案 > 使用 AWS-SDK JS V3 实例化 S3 类时出现“缺少凭据”错误

问题描述

class S3从较新的 aws-sdk javascript v3创建 S3 客户端时出现错误。

我添加了 aws 配置参数,包括从aws sts用户在服务级别(实例化 S3 类时)获得身份验证(假设具有调用权限的角色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);
 }
}

我检查了repo 中的class S3代码,aws-sdk-js-v3似乎不需要“凭据”构造函数配置参数。难道我做错了什么?

标签: amazon-web-servicesamazon-s3aws-sdkaws-sdk-js

解决方案


只是为了澄清 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 文档、类参考或 SDK 版本 3 的开发人员指南中找不到此更改。感谢 Chris 和 @Waleed93 解决这个问题。


推荐阅读