Warum erhalte ich die Fehlermeldung „Zugriff verweigert“, wenn ich eine Lambda-Funktion verwende, um Dateien in einen Amazon S3-Bucket in einem anderen AWS-Konto hochzuladen?
Ich erhalte die Fehlermeldung „Zugriff verweigert“, wenn ich eine AWS Lambda-Funktion verwende, um Dateien in einen Amazon Simple Storage Service (Amazon S3)-Bucket hochzuladen. Der Amazon S3-Bucket befindet sich in einem anderen AWS-Konto.
Kurzbeschreibung
Wenn die Berechtigungen zwischen einer Lambda-Funktion und einem Amazon S3-Bucket unvollständig oder falsch sind, gibt Lambda den Fehler Zugriff verweigert zurück.
Gehen Sie wie folgt vor, um Berechtigungen zwischen einer Lambda-Funktion in einem Konto (Konto 1) und einem S3-Bucket in einem anderen Konto (Konto 2) einzurichten:
1.(In Konto 1) Erstellen Sie eine Lambda-Ausführungsrolle, die es der Lambda-Funktion ermöglicht, Objekte auf Amazon S3 hochzuladen.
2.(In Konto 2) Ändern Sie die Bucket-Richtlinie des S3-Buckets, damit die Lambda-Funktion Objekte in den Bucket hochladen kann.
Auflösung
**Wichtig:**Die folgende Lösung erfordert eine Lambda-Funktion in einem AWS-Konto und einen S3-Bucket in einem anderen Konto.
Beispielcode für eine Lambda-Funktion, die Dateien in einen S3-Bucket hochlädt (Python-Version 3.8)
import json import boto3 s3 = boto3.client('s3') def lambda_handler(event,context): bucket = 'AccountBBucketName' transactionToUpload = {} transactionToUpload['transactionId'] = '12345' transactionToUpload['type'] = 'PURCHASE' transactionToUpload['amount'] = 20 transactionToUpload['customerId'] = 'CID-1111' filename = 'CID-1111'+'.json' uploadByteStream = bytes(json.dumps(transactionToUpload).encode('UTF-8')) s3.put_object(Bucket=bucket, Key=filename, Body=uploadByteStream, ACL='bucket-owner-full-control') print("Put Complete")
**Hinweis:**Bevor Sie die Bucket-Owner-Full-Control-ACL in der Upload-Anfrage übergeben, vergewissern Sie sich, dass die ACLs für den Bucket nicht deaktiviert sind. Dies erfolgt in den Einstellungen für den Besitz des S3-Buckets. Weitere Informationen finden Sie unter Steuern des Eigentums an Objekten und Deaktivieren von ACLs für Ihren Bucket.
(In Konto 1) Erstellen Sie eine Lambda-Ausführungsrolle, die es der Lambda-Funktion ermöglicht, Objekte auf Amazon S3 hochzuladen.
1.Erstellen Sie eine AWS Identity and Access Management (IAM)-Rolle für Ihre Lambda-Funktion.
2.Kopieren Sie den Amazon-Ressourcennamen (ARN) der IAM-Rolle.
**Hinweis:**Sie müssen den ARN der IAM-Rolle abrufen, bevor Sie die Bucket-Richtlinie des S3-Buckets aktualisieren können. Eine Möglichkeit, den ARN der IAM-Rolle abzurufen, besteht darin, den Befehl get-role der AWS CLI (AWS Command Line Interface) auszuführen. Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.
3.Hängen Sie der IAM-Rolle eine Richtlinie an, die Berechtigung zum Hochladen von Objekten (s3:PutObject) in den Bucket in Konto 2 gewährt.
Beispiel für eine IAM-Richtlinie, die einer IAM-Rolle s3:PutObject- und s3:PutObjectAcl-Berechtigungen gewährt
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::AccountBBucketName/*" } ] }
4.Ändern Sie die Ausführungsrolle Ihrer Lambda-Funktion in die IAM-Rolle, die Sie erstellt haben. Anweisungen finden Sie unter Lambda-Funktionsoptionen konfigurieren.
(In Konto 2) Ändern Sie die Bucket-Richtlinie des S3-Buckets, damit die Lambda-Funktion Objekte in den Bucket hochladen kann.
Aktualisieren Sie die Bucket-Richtlinie, sodass sie den ARN der Lambda-Ausführungsrolle als Principal angibt, der Zugriff auf die Aktion ** s3:PutObject** hat.
Beispiel für eine S3-Bucket-Richtlinie, die es einer Lambda-Funktion ermöglicht, Objekte in den Bucket hochzuladen
**Hinweis:**Die folgende Richtlinie gewährt der Ausführungsrolle der Lambda-Funktion auch die Berechtigung für s3:PutObjectAcl.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA:role/AccountARole" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::AccountBBucketName/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
Verwandte Informationen
Wie behebe ich Fehler vom Typ „403 Zugriff verweigert“ in Amazon S3?
Ähnliche Videos
Relevanter Inhalt
- Warum erhalte ich die Fehlermeldung „403 Forbidden“, wenn ich Dateien in Amazon S3 hochladen möchte?AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr