AWS js sdk — являются ли учетные данные обязательными

#aws-sdk-js

Вопрос:

У меня есть корзина S3 с открытым доступом для чтения. У меня есть веб-приложение, и в нем я хочу использовать AWS SDK JS для выполнения клиентских вызовов для перечисления объектов в корзине.

У меня нет варианта использования учетных данных, но, похоже, при инициализации клиента требуются учетные данные, так как я продолжаю получать ошибку «Отсутствуют учетные данные в конфигурации».

 import S3 from 'aws-sdk/clients/s3';
var s3 = new S3({
    apiVersion: '2006-03-01',
});
// the above initialises without error
var params = {
    Bucket: 'my_bucket',
    Delimiter: '/',
    Prefix: "some-path/"
}
// throws Missing credentials in config
s3.listObjects(params, function (err, data) {
    if(err)throw err;
    console.log(data);
});
 

Поэтому мои вопросы таковы:

  1. Требуются ли учетные данные, и если нет, то как моя конфигурация неверна?
  2. Если требуются учетные данные, как бы я настроил их для вызовов на стороне клиента в общедоступную корзину.

Заранее спасибо,

Ответ №1:

Хорошо, так что, по-видимому, требуются учетные данные. Это кажется мне немного странным при использовании SDK для общедоступных вызовов, которые не требуют аутентификации?

http://docs.amazonaws.cn/en_us/AWSJavaScriptSDK/guide/browser-configuring.html#Configuring_the_SDK_in_the_Browser

Ответ №2:

Учетные данные определенно требуются, fwiw, вот как я это делаю для простого тестирования:

 
import { config as env } from 'https://deno.land/x/dotenv/mod.ts' // https://github.com/pietvanzoen/deno-dotenv
import { S3Client, ListObjectsV2Command } from 'https://cdn.skypack.dev/@aws-sdk/client-s3' // https://github.com/aws/aws-sdk-js-v3

const {AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY} = env()

// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/modules/credentials.html
const credentials = {
    accessKeyId: AWS_ACCESS_KEY_ID,
    secretAccessKey: AWS_SECRET_ACCESS_KEY,
}

// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/s3clientconfig.html
const config = {
    region: 'us-east-1',
    credentials,
}

// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/s3client.html
const client = new S3Client(config)

export async function list() {
    // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/listobjectsv2commandinput.html
    const input = {
        Bucket: 'my_bucket'
    }

    // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/command.html
    const cmd = new ListObjectsV2Command(input)
    
    // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/listobjectsv2command.html
    return await client.send(cmd)
}