Zugriff Verweigert mit boto3 durch aws Lambda
Ich benutze die Daten-Verarbeitung-pipeline konstruiert, die
S3 + SNS + Lambda -
becasue S3 kann nicht senden notificaiton aus seinem Speicher region, so machte ich Gebrauch von SNS zum senden von S3-Benachrichtigung, um die Lambda in einer anderen region.
Die lambda-Funktion 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 lief, speichern und testen, bekam ich die 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"
}
Konfigurierte ich die lambda-Rolle mit
full S3 access
- und set-Eimer-Richtlinie auf mein Ziel-Eimer
everyone can do anything(list, delete, etc.)
Scheint es, dass ich noch nicht die Richtlinie festlegen.
InformationsquelleAutor Hello lad | 2015-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möglichkeit, die spezifischen S3-Objekt, das Sie suchen, ist mit eingeschränkten Berechtigungen
Zwei Möglichkeiten 1. S3-Objekt-Ebene die Erlaubnis für das Lesen verweigert wird, 2. Die Rolle befestigt lambda nicht über die Berechtigung zum erhalten/Lesen-S3-Objekte
Bei mir half das hinzufügen von
s3:GetObject
auf die Politik.Ich hatte zu schreiben, ein Eimer, der Politik den Zugriff zu gewähren. Ich hatte, um zu Eimer Politik: ` { "Version": "2012-10-17", "Statement": [ { "Sid": "Alle", "Effect": "Allow", "AUFTRAGGEBER": { "AWS": [ "arn:aws:iam::<userid>:Benutzer/<username>" ] }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::<Ressource-name>/*" } ] } `
InformationsquelleAutor omuthu
Ich hatte ein ähnliches problem, ich löste es, indem Sie die entsprechende Richtlinie auf meinen Benutzer.
IAM -> Benutzer -> Benutzer -> Berechtigungen -> Befestigen Politik.
Auch sicher, dass Sie die richtigen access key und secret access key, können Sie dies mit Hilfe AmazonCLI.
InformationsquelleAutor Amri
Hinzufügen Amri Antwort, wenn Ihr Eimer ist privat und Sie haben die Zugangsdaten, die Sie verwenden können, die boto3.AUFTRAGGEBER:
*Für diese Datei: s3://bucket/a/b/c/einige.text-Bucket "Eimer" und die Taste " a/b/c/einige.text'
manchmal macht es Sinn. lassen Sie uns sagen, Sie müssen kopieren zwischen Eimern mit unterschiedlichen Berechtigungen.
InformationsquelleAutor Tal Joffe
Omuthu s Antwort eigentlich richtig erkannt, mein problem, aber es hat nicht bieten eine Lösung, so dass ich dachte, ich würde das tun.
Es ist möglich, dass, wenn Sie setup Ihre Berechtigungen im IAM, dass es so etwas wie dieses:
Leider nicht richtig. Sie müssen, um die Objekt-Berechtigungen für die Objekte in den Eimer. Es muss also so Aussehen:
Hinweis: die zweite ARN mit der
/*
am Ende.InformationsquelleAutor Rob Rose
Ich hatte ähnliches problem, war der Unterschied der Eimer war verschlüsselt KMS-Schlüssel.
Behoben mit:
IAM -> Verschlüsselungs-Schlüssel -> YOUR_AWS_KMS_KEY -> zu Ihrer Police oder-Konto
InformationsquelleAutor MiaeKim