I die Datenverarbeitungspipeline vonZugang boto3 durch AWS Lambda unter Verwendung
S3 + SNS +
Lambda konstruiert verwendenbecasue S3 nicht notificaiton aus seinem Speicherbereich senden, so habe ich Verwendung von SNS zu senden S3-Benachrichtigung an Lambda in einer anderen Region.
Die Funktion Lambda codiert mit
from __future__ import print_function
import boto3
def lambda_handler (event, context):
input_file_bucket = event["Records"][0]["s3"]["bucket"]["name"]
input_file_key = event["Records"][0]["s3"]["object"]["key"]
input_file_name = input_file_bucket+"/"+input_file_key
s3=boto3.resource("s3")
obj = s3.Object(bucket_name=input_file_bucket, key=input_file_key)
response = obj.get()
return event #echo first key valuesdf
wenn ich speichern und Test lief, bekam ich folgende Fehlermeldung
{
"stackTrace": [
[
"/var/task/lambda_function.py",
20,
"lambda_handler",
"response = obj.get()"
],
[
"/var/runtime/boto3/resources/factory.py",
394,
"do_action",
"response = action(self, *args, **kwargs)"
],
[
"/var/runtime/boto3/resources/action.py",
77,
"__call__",
"response = getattr(parent.meta.client, operation_name)(**params)"
],
[
"/var/runtime/botocore/client.py",
310,
"_api_call",
"return self._make_api_call(operation_name, kwargs)"
],
[
"/var/runtime/botocore/client.py",
395,
"_make_api_call",
"raise ClientError(parsed_response, operation_name)"
]
],
"errorType": "ClientError",
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied"
}
ich die Lambda-Rolle konfiguriert mit
full S3 access
und Set Eimer-Politik auf meinem Zielbehälter
everyone can do anything(list, delete, etc.)
Es scheint, dass ich Politik nicht gut eingestellt habe.
Das ist ziemlich vage. Könnten Sie vielleicht darauf hinweisen, wie man dieses Problem angehen könnte? –
Zwei Möglichkeiten 1. S3-Objekt-Level-Berechtigung zum Lesen ist verweigert 2. Die Rolle Lambda hat keine Berechtigung zum Lesen/Lesen S3-Objekte – omuthu
Für mich half Hinzufügen von 's3: GetObject' zu der Richtlinie. –