Ошибка «Учетные данные отсутствуют» при создании экземпляра класса S3 с помощью AWS-SDK JS V3

Я получаю ошибку en при создании клиента S3 из class S3 в более новой версии v3 aws-sdk javascript.

Я добавляю параметры конфигурации aws, включая учетные данные, полученные от aws sts, когда пользователь аутентифицируется (при условии, что роль имеет разрешение на вызов getObject) на уровне обслуживания (при создании экземпляра класса S3) вместе с другими параметрами. Смотрите мой код ниже:

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, и, похоже, не требуется аргумент конфигурации конструктора Credential. Я делаю что-то неправильно?


person Waleed93    schedule 27.06.2020    source источник


Ответы (2)


Согласно документации для конструктора эти аргументы действительны.

По-прежнему существует имя аргумента для объекта Credential с именем credentials. Если вы создаете экземпляр объекта AWS.Credentials, вы можете передать это в этот аргумент.

person Chris Williams    schedule 27.06.2020
comment
Верно. Но как создать объект AWS.Credentials в v3 sdk? Я не вижу для этого API - person Waleed93; 27.06.2020
comment
Вы можете использовать конструктор здесь: docs.aws.amazon .com / AWSJavaScriptSDK / latest / AWS /. Вам потребуется, я думаю, он доступен через require('aws-sdk/global');, но не уверен на 100%. - person Chris Williams; 27.06.2020
comment
Мое плохое, это просто объект. Я добавил значения ключей accessKeyId, secretAccessKey и sessionToken, и это работает. Спасибо! То, что вы предлагаете выше, относится к sdk v2, а не к v3 - person Waleed93; 27.06.2020

Просто чтобы прояснить ответ Криса Уильямса в сочетании со вторым комментарием @ 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. Спасибо Крису и @ Waleed93 за то, что выяснили это.

person JJJSchmidt    schedule 18.12.2020