AWS Missing credentials when I try send something to my S3 Bucket (Node.js)
node.jsAmazon Web-ServicesAmazon S3node.js Problem Overview
I'm having this issue since yesterday, and I'm having trouble for find a solution.
I'm trying to send somethings to my S3 bucket, but this message appear in my console when I try:
{ [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' } } }
And this is my code:
var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json');
s3.putObject(params, function(err) {
if(err) {
console.log(err);
}
else {
console.log("Succes");
}
});
The credentials are correct. Does anyone know what can be? I've searching but I not find anywhere the solution.
My credentials(fake):
{
"accessKeyId": "BLALBLALBLALLBLALB",
"secretAccessKey": "BLABLALBLALBLALBLLALBLALLBLALB",
"region": "sa-east-1",
"apiVersions": {
"s3": "2006-03-01",
"ses": "2010-12-01"
}
}
EDIT:
For help, all the code:
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");
}
});
New 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 }
node.js Solutions
Solution 1 - node.js
Try hardcoding your params and see if you get the error again :
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");
}
});
Solution 2 - node.js
I had the same problem until I reversed the two lines:
var s3 = new AWS.S3();
AWS.config.loadFromPath('./AwsConfig.json');
to this:
AWS.config.loadFromPath('./AwsConfig.json');
var s3 = new AWS.S3();
Solution 3 - node.js
I was having the same error. But I found the issue. I was using wrong Environment variable name. From NodeJS to S3, I need to use the following variable names:
process.env.AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXX';
process.env.AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
process.env.AWS_REGION = 'us-east-1';
Once I corrected the variable names, it just ran fine. regards, Dipankar
Solution 4 - node.js
Try changing the user in my aws config file from a specific user to [default].
$nano .aws/credentials
[default]
aws_access_key_id = xyz
aws_secret_access_key = xyz
If you do not have this file, create it and get your keys or generate new one from aws iam user keys.
Solution 5 - node.js
I tried above option and even that did not work, so I created new config object and this below code worked
AWS.config = new AWS.Config();
AWS.config.accessKeyId = "AccessKey";
AWS.config.secretAccessKey = "SecretAccessKey";
Solution 6 - node.js
I had a similar issue when trying to load the config file from anywhere other than the root directory.
I was able to load the json file natively in node, then just pass the object that was parsed to AWS.config.update()
import AWS from 'aws-sdk'
import config from '../aws.json'
AWS.config.update(config);
Solution 7 - node.js
This resolved my issue .
-
Used the sample code from the Cognito Console and added it to the of the document.
-
Enabled Unauthenticated access on the identity pool.
Most important
-
Fixed the Trust Relationship policy in the unauth role so the Cognito Service could assume the role.
-
Do not hard code credential in the file .