View a markdown version of this page

Gewähren des Zugriffs auf die Lambda-Funktion AWS-Services - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Gewähren des Zugriffs auf die Lambda-Funktion AWS-Services

Wenn Sie einen AWS Dienst verwenden, um Ihre Funktion aufzurufen, gewähren Sie die Erlaubnis in einer Erklärung zu einer ressourcenbasierten Richtlinie. Sie können die Anweisung auf die gesamte Funktion anwenden oder die Anweisung auf eine einzelne Version oder einen einzelnen Alias beschränken.

Anmerkung

Wenn Sie Ihrer Funktion mit der Lambda-Konsole einen Auslöser hinzufügen, aktualisiert die Konsole die ressourcenbasierte Richtlinie der Funktion, damit der Service sie aufrufen kann. Um Berechtigungen für andere Konten oder Services zu erteilen, die in der Lambda-Konsole nicht verfügbar sind, verwenden Sie die AWS CLI-CLI.

Wir empfehlen die Verwendung, um eine vollständige JSON-Richtlinie put-resource-policy zu definieren. Mit put-resource-policy können Sie Ablehnungsanweisungen hinzufügen, die gesamte Palette der IAM-Bedingungsschlüssel verwenden und alle Berechtigungen in einem einzigen Dokument verwalten. Sie können es auch verwendenadd-permission, um einzelne Anweisungen für einfache Anwendungsfälle hinzuzufügen.

Wichtig

Durch Verwenden werden alle vorhandenen ressourcenbasierten Richtlinien für die Ressource put-resource-policy ersetzt. Wenn für die Ressource bereits Berechtigungen mit definiert sindadd-permission, put-resource-policy werden diese überschrieben. Wird verwendetget-resource-policy, um die vorhandene Richtlinie abzurufen, bevor Änderungen vorgenommen werden.

Verwendung einer vollständigen JSON-Richtlinie (empfohlen)

Die folgende Beispielrichtlinie gewährt Amazon Simple Notification Service die Erlaubnis, eine benannte Funktion aufzurufenmy-function, jedoch nur für ein bestimmtes Thema. Außerdem werden Aufrufe zu einem bestimmten Thema verweigert.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-sns-my-topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:my-topic" } } }, { "Sid": "deny-sns-other-topic", "Effect": "Deny", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic" } } } ] }

Speichern Sie die Richtlinie in einer Datei mit dem Namen policy.json und wenden Sie sie an mit: put-resource-policy

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

Für Amazon S3 ist die Quelle ein Bucket, dessen ARN keine Konto-ID enthält. Es ist möglich, dass Sie einen Bucket löschen und ein anderes Konto einen Bucket mit demselben Namen erstellt. Verwenden Sie den aws:SourceAccount Bedingungsschlüssel, um sicherzustellen, dass nur Ressourcen in Ihrem Konto die Funktion aufrufen können:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::my-bucket" } } } ] }

Mithilfe von AddPermission

Für einfache Anwendungsfälle können Sie es verwenden, add-permission um einzelne Anweisungen hinzuzufügen. Mit dem folgenden Befehl wird Amazon Simple Notification Service die Erlaubnis erteilt, eine Funktion mit dem Namen my-function aufzurufen:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

Die Ausgabe sollte folgendermaßen aussehen:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
Anmerkung

Wenn Sie add-permission danach aufrufenput-resource-policy, wird die neue Anweisung an die bestehende JSON-Richtlinie angehängt.

Verwenden Sie die folgende Option, um Aufrufe auf eine bestimmte Ressource zu beschränken: source-arn

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

Verwenden Sie für Amazon S3 die source-account Option mit Ihrer Konto-ID:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012