Использование aws-sdk без учетных данных

#amazon-web-services #amazon-s3 #aws-sdk

Вопрос:

У меня есть корзина s3, которая настроена так, чтобы разрешать публиковать список для публики. Когда я это сделаю:

 aws s3 ls s3://bucket_name/prefix/ --no-sign-request
 

Мне удается успешно перечислить ведро. Я хотел бы перечислить его в приложении, которое использует aws-sdk для Node.js. Вот, я действительно:

 import AWS from 'aws-sdk';
const s3 = new AWS.S3();
s3.listObjectsV2({Bucket: bucket_name, Prefix: prefix, Delimiter: "/"}, ...
 

но я получаю ошибку:

 message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
2021-09-17T12:40:33.459881 00:00 app[web.1]:   code: 'CredentialsError',
2021-09-17T12:40:33.459881 00:00 app[web.1]:   errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459882 00:00 app[web.1]:   syscall: 'connect',...
2021-09-17T12:40:33.459883 00:00 app[web.1]:   time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459884 00:00 app[web.1]:   originalError: 
2021-09-17T12:40:33.459884 00:00 app[web.1]:    { message: 'Could not load credentials from any providers',
2021-09-17T12:40:33.459884 00:00 app[web.1]:      code: 'CredentialsError',
2021-09-17T12:40:33.459884 00:00 app[web.1]:      errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459885 00:00 app[web.1]:      syscall: 'connect',...
2021-09-17T12:40:33.459886 00:00 app[web.1]:      time: 2021-09-17T12:40:33.459Z,
2021-09-17T12:40:33.459886 00:00 app[web.1]:      originalError: 
2021-09-17T12:40:33.459886 00:00 app[web.1]:       { message: 'EC2 Metadata roleName request returned error',
2021-09-17T12:40:33.459887 00:00 app[web.1]:         code: 'ECONNREFUSED',
2021-09-17T12:40:33.459887 00:00 app[web.1]:         errno: 'ECONNREFUSED',
2021-09-17T12:40:33.459888 00:00 app[web.1]:         syscall: 'connect',... }
 

Похоже, что SDK пытается получить учетные данные, даже если ресурс доступен без них. Можно ли отметить запрос, который будет сделан, не запрашивая учетные данные?

Ответ №1:

Чтобы SDK не требовал учетных данных, вам необходимо использовать этот makeUnauthenticatedRequest метод для совершения любых вызовов. Это позволяет вам вызвать «операцию над сервисом с заданными входными параметрами без каких-либо аутентификационных данных».

 var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});
s3 = new AWS.S3();

s3.makeUnauthenticatedRequest(
    'listObjects', 
    { Bucket : '-example-bucket-name-', }, 
    function(err, data) {
        if (err) {
            console.log("Error", err);
        } else {
            console.log("Success", data);
        }
    }
);
 

Более старые версии SDK могли выполнять то же самое, вызывая send() после вызова removeListener validate sign слушателей и.