2016-07-19 22 views
0

Ich versuche, ein Lambda zu erhalten, um eine Datei aus einem S3-Bucket mit dem s3-get-object Blueprint in Reaktion auf Datei post Ereignisse zu lesen.Lambda S3-Berechtigung in s3-Get-Objekt-Blaupause verweigert

Selbst wenn der Eimer voll Zugang der Öffentlichkeit und vollständige Berechtigungen verfügt:

{ 
"Version": "2012-10-17", 
"Id": "Policy1468930000031", 
"Statement": [ 
    { 
     "Sid": "Stmt1468929998580", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::xlp-uploads/*" 
    } 
    ] 
} 

Und die Lambda-Rolle verfügt über vollen S3 und Lambda-Zugang, bekomme ich immer noch Access Denied wenn Sie den Beispielcode ausgeführt wird.

Dies ist der Lambda-Code im Bauplan:

'use strict'; 
console.log('Loading function'); 

let aws = require('aws-sdk'); 
let s3 = new aws.S3({ apiVersion: '2006-03-01' }); 

exports.handler = (event, context, callback) => { 
    //console.log('Received event:', JSON.stringify(event, null, 2)); 

    // Get the object from the event and show its content type 
    const bucket = event.Records[0].s3.bucket.name; 
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); 
    const params = { 
     Bucket: bucket, 
     Key: key 
    }; 
    s3.getObject(params, (err, data) => { 
     if (err) { 
      console.log(err); 
      const 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); 
      callback(message); 
     } else { 
      console.log('CONTENT TYPE:', data.ContentType); 
      callback(null, data.ContentType); 
     } 
    }); 
}; 

Und der Fehler ist:

{ [AccessDenied: Access Denied] 
    message: 'Access Denied', 
    code: 'AccessDenied', 
    region: null, 
    time: Tue Jul 19 2016 12:27:28 GMT+0000 (UTC), 
+0

Versuchen Sie diese Antwort und sehen Sie, ob es für Sie funktioniert, Sie müssen nur eine Zeile im Lambda-Code ersetzen. http://stackoverflow.com/questions/35605622/access-denied-on-aws-lambda-function-when-getobject-from-s3-bucket/35608375#35608375 – error2007s

Antwort

0

ich heraus, das Problem dachte.

Ich versuchte zunächst, die Datei an S3 mit der REST-API zu senden, aber die Datei landet im Bucket ohne Berechtigungen und erbt nicht die Berechtigungen des Buckets.

Ich wechselte zu einer POST-Anfrage, die ACL-Parameter akzeptiert und gibt die Datei Berechtigungen an Ort und Stelle.