Verwendung der Quellfunktion ARN zur Steuerung des Funktionszugriffsverhaltens - AWS Lambda

Verwendung der Quellfunktion ARN zur Steuerung des Funktionszugriffsverhaltens

Es ist üblich, dass Ihr Lambda-Funktionscode API-Anorderungen an andere AWS-Services stellt. Um diese Anforderungen zu stellen, generiert Lambda einen kurzlebigen Satz von Anmeldeinformationen, indem es die Ausführungsrolle Ihrer Funktion übernimmt. Diese Anmeldeinformationen sind während des Aufrufs Ihrer Funktion als Umgebungsvariablen verfügbar. Wenn Sie mit AWS-SDKs arbeiten, müssen Sie die Anmeldeinformationen für das SDK nicht direkt im Code angeben. Standardmäßig überprüft die Kette der Anbieter von Anmeldeinformationen nacheinander jeden Ort, an dem Sie Anmeldeinformationen festlegen können, und wählt die erste verfügbare aus – in der Regel die Umgebungsvariablen (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY und AWS_SESSION_TOKEN).

Lambda fügt den Quellfunktions-ARN in den Kontext der Anmeldeinformationen ein, wenn die Anfrage eine AWS-API-Anfrage ist, die aus Ihrer Ausführungsumgebung stammt. Lambda fügt auch den Quellfunktions-ARN für die folgenden AWS-API-Anfragen ein, die Lambda in Ihrem Namen außerhalb Ihrer Ausführungsumgebung durchführt:

Service Aktion Grund
CloudWatch-Protokolle CreateLogGroup, CreateLogStream, PutLogEvents

So speichern Sie Protokolle in einer CloudWatch-Logs-Protokollgruppe

X-Ray PutTraceSegments

So senden Sie Verfolgungsdaten an X-Ray

Amazon EFS ClientMount

So stellen Sie eine Verbindung zwischen Ihrer Funktion und einem Amazon Elastic File System (Amazon EFS) Dateisystem her

Andere AWS-API-Aufrufe, die Lambda außerhalb Ihrer Ausführungsumgebung in Ihrem Namen unter Verwendung derselben Ausführungsrolle durchführt, enthalten den Quellfunktions-ARN nicht. Beispiele für solche API-Aufrufe außerhalb der Ausführungsumgebung sind:

  • Aufrufen von AWS Key Management Service (AWS KMS) zum automatischen Verschlüsseln und Entschlüsseln Ihrer Umgebungsvariablen.

  • Aufrufe von Amazon Elastic Compute Cloud (Amazon EC2) zum Erstellen von Elastic-Network-Schnittstellen (ENIs) für eine VPC-fähige Funktion.

  • Aufrufe von AWS-Services wie Amazon Simple Queue Service (Amazon SQS), um aus einer Ereignisquelle zu lesen, die als Zuordnung von Ereignisquellen eingerichtet ist.

Mit dem ARN der Quellfunktion im Kontext der Anmeldeinformationen können Sie überprüfen, ob ein Aufruf Ihrer Ressource aus dem Code einer bestimmten Lambda-Funktion stammt. Um dies zu überprüfen, verwenden Sie die lambda:SourceFunctionArn-Zustandsschlüssel in einer identitätsbasierten IAM-Richtlinie oder einer Service-Kontrollrichtlinie (SCP).

Anmerkung

Sie können den lambda:SourceFunctionArn-Bedingungsschlüssel nicht in ressourcenbasierten Richtlinien verwenden.

Mit diesem Bedingungsschlüssel in Ihren identitätsbasierten Richtlinien oder SCPs können Sie Sicherheitskontrollen für die API-Aktionen implementieren, die Ihr Funktionscode für andere AWS-Services vornimmt. Dies hat einige wichtige Sicherheitsanwendungen, z. B. um Ihnen zu helfen, die Quelle eines Anmeldeinformationslecks zu identifizieren.

Anmerkung

Der lambda:SourceFunctionArn-Bedingungsschlüssel unterscheidet sich von den lambda:FunctionArn und aws:SourceArn-Bedingungsschlüsseln. Der lambda:FunctionArn-Bedingungsschlüssel gilt nur für Ereignisquellenzuordnungen und hilft bei der Definition der Funktionen, die Ihre Ereignisquelle aufrufen kann. Der aws:SourceArn-Bedingungsschlüssel gilt nur für Richtlinien, bei denen Ihre Lambda-Funktion die Zielressource ist, und hilft zu definieren, welche anderen AWS-Services und Ressourcen diese Funktion aufrufen können. Der lambda:SourceFunctionArn-Bedingungsschlüssel kann auf jede identitätsbasierte Richtlinie oder jeden SCP angewendet werden, um die spezifischen Lambda-Funktionen zu definieren, die über Berechtigungen zum Festlegen bestimmter AWS-API-Aufrufe an andere Ressourcen verfügen.

Um lambda:SourceFunctionArn in Ihrer Richtlinie zu verwenden, fügen Sie es als Bedingung mit einem der ARN-Bedingungsoperatoren ein. Der Wert des Schlüssels muss ein gültiger ARN sein.

Angenommen, Ihr Lambda-Funktionscode macht einen s3:PutObject-Aufruf, der auf einen bestimmten Amazon-S3-Bucket abzielt. Möglicherweise möchten Sie nur einer bestimmten Lambda-Funktion erlauben, dass s3:PutObject auf diesen Bucket zugreift. In diesem Fall sollte der Ausführungsrolle Ihrer Funktion eine Richtlinie angefügt sein, die wie folgt aussieht:

Beispiel Richtlinie, die einer bestimmten Lambda-Funktion Zugriff auf eine Amazon-S3-Ressource gewährt
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::lambda_bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Diese Richtlinie erlaubt nur s3:PutObject Zugriff wenn die Quelle die Lambda-Funktion mit ARN arn:aws:lambda:us-east-1:123456789012:function:source_lambda ist. Diese Richtlinie erlaubt s3:PutObject keinen Zugriff auf jede andere aufrufende Identität. Dies gilt auch dann, wenn eine andere Funktion oder Entität einen s3:PutObject-Aufruf mit der gleichen Ausführungsrolle tätigt.

Anmerkung

Der Bedingungsschlüssel lambda:SourceFunctionARN unterstützt keine Lambda-Funktionsversionen oder -Funktionsaliase. Wenn Sie den ARN für eine bestimmte Funktionsversion oder einen bestimmten Alias verwenden, ist Ihre Funktion nicht berechtigt, die von Ihnen angegebene Aktion auszuführen. Achten Sie darauf, den unqualifizierten ARN für Ihre Funktion ohne Versions- oder Alias-Suffix zu verwenden.

Sie können lambda:SourceFunctionArn auch in SCPs verwenden. Angenommen, Sie möchten den Zugriff auf Ihren Bucket entweder auf den Code einer einzelnen Lambda-Funktion oder auf Aufrufe aus einer bestimmten Amazon Virtual Private Cloud (VPC) beschränken. Das folgende SCP illustriert dies.

Beispiel Richtlinie, die den Zugriff auf Amazon S3 unter bestimmten Bedingungen verweigert
JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] } } }, { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "ArnNotEqualsIfExists": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Diese Richtlinie verweigert alle S3-Aktionen, sofern sie nicht von einer bestimmten Lambda-Funktion mit ARN arn:aws:lambda:*:123456789012:function:source_lambda stammen, oder sofern sie nicht aus dem angegebenen VPC stammen. Der StringNotEqualsIfExists-Operator weist IAM an, diese Bedingung nur zu verarbeiten, wenn der aws:SourceVpc-Schlüssel in der Anfrage vorhanden ist. In ähnlicher Weise berücksichtigt IAM den ArnNotEqualsIfExists-Operator nur, wenn lambda:SourceFunctionArn vorhanden ist.