Подтвердить что ты не робот

AWS Отсутствует учетные данные, когда я пытаюсь отправить что-то в свой S3 Bucket (Node.js)

Hei!

У меня проблема со вчерашнего дня, и у меня возникли проблемы с поиском решения.

Я пытаюсь отправить что-то в свой ведро S3, но это сообщение появляется на моей консоли, когда я пытаюсь:

{ [CredentialsError: Missing credentials in config]
  message: 'Missing credentials in config',
  code: 'CredentialsError',
  errno: 'Unknown system errno 64',
  syscall: 'connect',
  time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
  originalError: 
   { message: 'Could not load credentials from any providers',
     code: 'CredentialsError',
     errno: 'Unknown system errno 64',
     syscall: 'connect',
     time: Thu Oct 09 2014 14:03:56 GMT-0300 (BRT),
     originalError: 
      { code: 'Unknown system errno 64',
        errno: 'Unknown system errno 64',
        syscall: 'connect',
        message: 'connect Unknown system errno 64' } } }

И это мой код:

var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json'); 

    s3.putObject(params, function(err) {
        if(err) {
            console.log(err);
        }
        else {
            console.log("Succes");
        }
});

Учетные данные верны. Кто-нибудь знает, что может быть? Я искал, но не нашел решения.


Мои учетные данные (подделка):

{
    "accessKeyId": "BLALBLALBLALLBLALB",
    "secretAccessKey": "BLABLALBLALBLALBLLALBLALLBLALB",
    "region": "sa-east-1",
    "apiVersions": {
      "s3": "2006-03-01",
      "ses": "2010-12-01"
    }
}

EDIT:

Для справки, весь код:

var fs = require('fs');
var AWS = require('aws-sdk');


var s3 = new AWS.S3();
AWS.config.loadFromPath('./MYPATH.json'); //this is my path to the aws credentials.


var params = {
        Bucket: 'testing-dev-2222',
        Key: file,
        Body: fs.createReadStream(file)
    };

s3.putObject(params, function(err) {
    if(err) {
        console.log(err);
    }
    else {
        console.log("Success");
    }
});

Новое err:

Error uploading data:  { [PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.]
  message: 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.',
  code: 'PermanentRedirect',
  time: Thu Oct 09 2014 14:50:02 GMT-0300 (BRT),
  statusCode: 301,
  retryable: false }
4b9b3361

Ответ 1

Попробуйте жестко запрограммировать свои параметры и посмотрите, не получите ли вы ошибку снова:

AWS.config.update({
    accessKeyId: "YOURKEY",
    secretAccessKey: "YOURSECRET",
    "region": "sa-east-1"   <- If you want send something to your bucket, you need take off this settings, because the S3 are global. 
}); // for simplicity. In prod, use loadConfigFromFile, or env variables

var s3 = new AWS.S3();
var params = {
    Bucket: 'makersquest',
    Key: 'mykey.txt',
    Body: "HelloWorld"
};
s3.putObject(params, function (err, res) {
    if (perr) {
        console.log("Error uploading data: ", err);
    } else {
        console.log("Successfully uploaded data to myBucket/myKey");
    }
});

Хороший ресурс здесь

Ответ 2

У меня была такая же проблема, пока я не перевернул две строки:

var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json'); 

:

AWS.config.loadFromPath('./AwsConfig.json'); 
var s3 = new AWS.S3();

Ответ 3

Ваша проблема в том, что вы вызываете эти две строки в неправильном порядке:

var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json'); 

вам следует позвонить

var s3 = new AWS.S3();

после загрузки ваших учетных данных

Ответ 4

У меня была такая же ошибка. Но я нашел проблему. Я использовал неправильное имя переменной среды. От NodeJS до S3 мне нужно использовать следующие имена переменных:

process.env.AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXX';
process.env.AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
process.env.AWS_REGION = 'us-east-1';

Как только я исправил имена переменных, он просто прошел нормально. С уважением, Dipankar

Ответ 5

Попробуйте изменить пользователя в моем конфигурационном файле aws от определенного пользователя до [по умолчанию].

$nano .aws/credentials

[default]
aws_access_key_id = xyz
aws_secret_access_key = xyz

Если у вас нет этого файла, создайте его и получите свои ключи или создайте новый из пользовательских ключей aws iam.

Ответ 6

Я попробовал вариант выше, и даже это не сработало, поэтому я создал новый объект конфигурации, и этот ниже код работал

 AWS.config = new AWS.Config();
 AWS.config.accessKeyId = "AccessKey";
 AWS.config.secretAccessKey = "SecretAccessKey";

Ответ 7

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

Мне удалось загрузить json файл изначально в node, а затем просто передать объект, который был разобран на AWS.config.update()

import AWS from 'aws-sdk'
import config from '../aws.json' 
AWS.config.update(config);

Ответ 8

Это решило мою проблему.

  1. Использовал пример кода из консоли Cognito и добавил его в документ.

  2. Включен доступ без аутентификации в пуле удостоверений.

Самое важное

  1. Исправлена политика доверительных отношений в роли unauth, чтобы служба Cognito могла взять на себя эту роль.

  2. Не используйте жесткий код учетных данных в файле.