2014-10-09 14 views
31

Hei!AWS Credenziali mancanti quando provo a inviare qualcosa al mio S3 Bucket (Node.js)

Ho riscontrato questo problema da ieri e ho problemi a trovare una soluzione.

sto cercando di inviare quarantina al mio secchio S3, ma questo messaggio appare nella mia console quando provo:

{ [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' } } } 

E questo è il mio codice:

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

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

Le credenziali sono corretta. Qualcuno sa cosa può essere? Ho cercato ma non trovo da nessuna parte la soluzione.


mie credenziali (finti):

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

EDIT:

Per informazioni, tutto il codice:

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"); 
    } 
}); 

Nuovo 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 } 
+0

si può aggiungere il config.json file (nascondi le credenziali reali)? – xShirase

+0

fatto! @xShirase –

+0

Una cosa interessante, sto usando sns per mandarmi una mail quando le cose vengono inviate al mio bucket (il mio backup). Mi sta mandando lo stesso errore. Come può accedere agli sn se le credenziali sono sbagliate? –

risposta

40

Prova hardcoding tuoi params e vedere se si ottiene di nuovo l'errore:

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. 
}); 

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"); 
    } 
}); 

Good resource here

+0

ok, la prossima prova vedere risposta – xShirase

+4

Ho ancora ricevuto questo errore usando i tasti corretti. Altre idee? – mylord

+1

Per me dice che XMLHttpRequest non può caricare https://mybucketnamehere.s3.amazonaws.com/mykey.txt. La risposta alla richiesta di verifica preliminare non supera il controllo del controllo accessi: Nessuna intestazione 'Access-Control-Allow-Allow-Origin' è presente sulla risorsa richiesta. L''http: // mypage_on_localhost' di origine non è quindi consentito l'accesso. La risposta aveva codice di stato HTTP 403. Ho impostato CORS per consentire questo dominio. Qualche idea? – trainoasis

1

ho cercato sopra opzione e anche che non ha funzionato, così ho creato nuovo oggetto di configurazione e questo sotto codice funzionava

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

tipo di sconfitte lo scopo anche se – the0ther

+0

Funziona, cattiva è una cattiva idea per le credenziali dell'hardcode, considera che 'aws-sdk' guarderà anche alle variabili di ambiente, altrimenti usa un file. – loretoparisi

46

Ho avuto lo stesso problema fino a quando non ho invertito cati le due linee:

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

a questo:

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

Questa è la soluzione giusta, che evita le credenziali dell'hardcode. – loretoparisi

+0

Sto provando a caricare file su S3. Dopo aver effettuato questa operazione e rimosso la regione nella mia configurazione, come indicato nella risposta correntemente contrassegnata, il caricamento ha funzionato. Grazie @Hugh McKee! –

+0

Sembra folle che questa sia la soluzione, ma lo ha fatto per me –

0

ho avuto un problema simile quando si cerca di caricare il file di configurazione da qualsiasi luogo diverso da quello della directory principale.

ho potuto caricare il file json nativamente in nodo, quindi basta passare l'oggetto che è stato analizzato per AWS.config.update()

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

ho avuto lo stesso errore. Ma ho trovato il problema. Stavo usando il nome della variabile di ambiente sbagliato. Da NodeJS a S3, ho bisogno di utilizzare i seguenti nomi di variabili:

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

Una volta ho corretto i nomi delle variabili, semplicemente funzionato benissimo. saluti, Dipankar

5

Provare a cambiare l'utente nel mio file di configurazione aws da un utente specifico a [predefinito].

$nano .aws/credentials 

[default] 
aws_access_key_id = xyz 
aws_secret_access_key = xyz 

Se non si dispone di questo file, creare e ottenere le chiavi o generare nuovo da AWS chiavi utente IAM.

7

Il vostro problema è solo che si chiama quelle due righe nell'ordine sbagliato:

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

si dovrebbe chiamare

var s3 = new AWS.S3(); 

dopo aver caricato le credenziali

+1

Questo ha risolto il mio problema. In realtà, durante il runtime viene generato il percorso del file di configurazione aws, quindi l'istruzione loadFromPath viene eseguita dopo la nuova chiamata AWS.S3(), quindi il problema è arrivato. –

+1

Questa è esattamente la risposta corretta. Mi ha aiutato anche io, grazie! – Tom

+0

Sono felice che questo abbia risolto il tuo problema :) –

Problemi correlati