Zugriff verweigert auf aws lambda-Funktion bei getObject von S3-bucket
Ich bin mit dem Standard-code für eine lambda-Funktion:
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
//console.log('Received event:', JSON.stringify(event, null, 2));
//Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
console.log(err);
var message = "Error getting object " + key + " from bucket " + bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
context.fail(message);
} else {
console.log('CONTENT TYPE:', data.ContentType);
context.succeed(data.ContentType);
}
});
};
Aber ich erhalten die Fehlermeldung Zugriff verweigert:
2016-02-24T14:21:21.503Z kvyo1midvc2r69gm Loading function
START RequestId: baf9049b-db01-11e5-bc34-791df91353a9 Version: $LATEST
2016-02-24T14:21:22.500Z baf9049b-db01-11e5-bc34-791df91353a9 { [AccessDenied: Access Denied] message: 'Access Denied', code: 'AccessDenied', region: null, time: Wed Feb 24 2016 14:21:22 GMT+0000 (UTC), requestId: '215CD9BB4094E209', extendedRequestId: '0kDBEyMiJYbMApEqJuAtKct2SKLI7Z7tCBVyW6QJsYwMHROvtCEDynbGSsBdqbwFcX+YrSlGnsg=', statusCode: 403, retryable: false, retryDelay: 30 }
2016-02-24T14:21:22.539Z baf9049b-db01-11e5-bc34-791df91353a9 Error getting object {"originalFilename":"c12eaadf3d3b46d9b5ded6c078534c11","versions":[{"Size":1024,"Crop":null,"Max":false,"Rotate":0}]} from bucket xmovo.originalimages.develop. Make sure they exist and your bucket is in the same region as this function.
2016-02-24T14:21:22.539Z baf9049b-db01-11e5-bc34-791df91353a9
{
"errorMessage": "Error getting object {\"originalFilename\":\"c12eaadf3d3b46d9b5ded6c078534c11\",\"versions\":[{\"Size\":1024,\"Crop\":null,\"Max\":false,\"Rotate\":0}]} from bucket xmovo.originalimages.develop. Make sure they exist and your bucket is in the same region as this function."
}
END RequestId: baf9049b-db01-11e5-bc34-791df91353a9
REPORT RequestId: baf9049b-db01-11e5-bc34-791df91353a9 Duration: 723.44 ms Billed Duration: 800 ms Memory Size: 128 MB Max Memory Used: 34 MB
Meine lambda-Funktion und mein S3 bucket in der gleichen region 'UNS Standart' und 'us-east-1"), die die gleichen
IAM-Berechtigungen sind ok für lambda-Funktion, wodurch die GetObject-Aktion(es wird mit dem Assistenten, erstellen die lambda-Funktion)
mit allen, die zu überprüfen ich habe keine Ahnung, warum ich noch immer die Fehlermeldung "Zugriff Verweigert"
Vielen Dank im Voraus
- [zwei Jahre in die Zukunft] keinen Bezug zu Ihrem Thema der Politik, sollten Sie erwägen, die Aktualisierung Ihrer asynchronen JavaScript-code für die Verwendung der neueren, einfacheren Versprechen/async/await-Modell. Sehen Sie die letzten code-Beispiel zu aws.amazon.com/blogs/compute/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf Ihre log-Ausgabe, ich kann sehen, dass die
key
variable enthält die folgende Zeichenfolge:Ich vermute, das Sie bestimmt, dass die variable die Zeichenfolge enthalten
"c12eaadf3d3b46d9b5ded6c078534c11"
.S3 gibt einen 403-Fehler Antwort, wenn Sie keinen Zugriff haben, oder wenn der Schlüssel nicht existiert. Rückkehr "Zugriff verweigert" - in beiden Fällen ist ein Sicherheits-feature, um Angreifer daran zu hindern herauszufinden, welche Tasten tatsächlich vorhanden sind in Ihrem Eimer.
Ich glaube, Sie brauchen, um Sie zu ändern:
etwas wie dies:
Überprüfen Sie die IAM Berechtigungen der Rolle, die Sie verwenden möchten, vielleicht gibt es
deny
Berechtigungen obenallow
Berechtigungen.