Lambda-Ausführungsrolle
Die Ausführungsrolle einer Lambda-Funktion ist eine AWS Identity and Access Management (IAM)-Rolle, die der Funktion die Berechtigung erteilt, auf AWS-Services und -Ressourcen zuzugreifen. Sie können zum Beispiel eine Ausführungsrolle für die Entwicklung mit der Berechtigung zum Senden von Protokollen an Amazon CloudWatch und zum Hochladen von Ablaufverfolgungsdaten zu AWS X-Ray erstellen. Diese Seite enthält Informationen zum Erstellen, Anzeigen und Verwalten der Ausführungsrolle einer Lambda-Funktion.
Sie geben eine Ausführungsrolle an, wenn Sie eine Funktion erstellen. Wenn Sie Ihre Funktion aufrufen, stellt Lambda Ihrer Funktion automatisch temporäre Anmeldeinformationen zur Verfügung, indem es diese Rolle übernimmt. Sie müssen nicht sts:AssumeRole
aufrufen in Ihrem Funktionscode.
Damit Lambda Ihre Ausführungsrolle ordnungsgemäß übernehmen kann, muss in der Vertrauensrichtlinie der Rolle der Lambda-Service-Prinzipal (lambda.amazonaws.com
) als vertrauenswürdiger Service angegeben sein.
So zeigen Sie die Ausführungsrolle einer Funktion an
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie den Namen einer Funktion aus.
-
Wählen Sie Configuration (Konfiguration) und anschließend Permissions (Berechtigungen) aus.
-
Zeigen Sie unter Resource summary (Ressourcenübersicht) die Services und Ressourcen an, auf die die Funktion zugreifen kann.
-
Wählen Sie einen Service aus dem Dropdown-Menü aus, um die Berechtigungen für diesen Service anzuzeigen.
Sie können Berechtigungen jederzeit zur Ausführungsrolle einer Funktion hinzufügen bzw. daraus entfernen oder Ihre Funktion so konfigurieren, dass sie eine andere Rolle verwendet. Fügen Sie Berechtigungen für alle Services hinzu, die Ihre Funktion mit dem AWS SDK aufruft, sowie für Services, die Lambda nutzt, um optionale Funktionen zu aktivieren.
Wenn Sie Ihrer Funktion Berechtigungen hinzufügen, aktualisieren Sie auch den Code oder die Konfiguration der Funktion. Dies zwingt ausgeführte Instances Ihrer Funktion, die veraltete Anmeldeinformationen haben, anzuhalten und ersetzt zu werden.
Themen
- Erstellen einer Ausführungsrolle in der IAM-Konsole
- Gewähren Sie den Zugriff auf Ihre Lambda-Ausführungsrolle mit den geringsten Berechtigungen
- Verwalten von Rollen mit der IAM-API
- Sitzungsdauer für temporäre Sicherheitsanmeldeinformationen
- AWS-verwaltete Richtlinien für Lambda-Funktionen
- Arbeiten mit Anmeldeinformationen für die Lambda-Ausführungsumgebung
Erstellen einer Ausführungsrolle in der IAM-Konsole
Standardmäßig erstellt Lambda beim Erstellen einer Funktion in der Lambda-Konsole eine Ausführungsrolle mit minimalen Berechtigungen. Sie können eine Ausführungsrolle auch in der IAM-Konsole erstellen.
So erstellen Sie eine Ausführungsrolle in der IAM-Konsole
-
Öffnen Sie die Seite Roles (Rollen)
in der IAM-Konsole. -
Wählen Sie Create role (Rolle erstellen) aus.
-
Wählen Sie unter Anwendungsfall Lambda aus.
-
Wählen Sie Next (Weiter).
-
Wählen Sie die AWS-verwalteten Richtlinien AWSLambdaBasicExecutionRole und AWSXRayDaemonWriteAccess aus.
-
Wählen Sie Next (Weiter).
-
Geben Sie einen Role name (Rollennamen) ein und klicken Sie auf Create Role (Rolle erstellen).
Detaillierte Anweisungen finden Sie unter Erstellen einer Rolle für einen AWS-Service (Konsole) im IAM-Benutzerhandbuch.
Gewähren Sie den Zugriff auf Ihre Lambda-Ausführungsrolle mit den geringsten Berechtigungen
Wenn Sie während der Entwicklungsphase zum ersten Mal eine IAM-Rolle für Ihre Lambda-Funktion erstellen, können Sie manchmal Berechtigungen erteilen, die über das erforderliche Maß hinausgehen. Bevor Sie Ihre Funktion in der Produktionsumgebung veröffentlichen, sollten Sie als bewährte Methode die Richtlinie so anpassen, dass sie nur die erforderlichen Berechtigungen enthält. Weitere Informationen finden Sie unter Anwenden von Berechtigungen mit geringsten Berechtigungen im IAM-Benutzerhandbuch.
Verwenden Sie IAM Access Analyzer, um die erforderlichen Berechtigungen für die IAM-Ausführungsrollenrichtlinie zu identifizieren. IAM Access Analyzer überprüft Ihre AWS CloudTrail-Protokolle über den von Ihnen angegebenen Zeitraum und generiert eine Richtlinienvorlage nur mit den Berechtigungen, die die Funktion während dieser Zeit verwendet hat. Sie können die Vorlage verwenden, um eine verwaltete Richtlinie mit definierten Berechtigungen zu erstellen und sie dann an die IAM-Rolle anzuhängen. Auf diese Weise gewähren Sie nur die Berechtigungen, die die Rolle benötigt, um mit AWS-Ressourcen für Ihren spezifischen Anwendungsfall zu interagieren.
Weitere Informationen finden Sie unter Generieren von Richtlinien basierend auf Zugriffsaktivitäten im IAM-Benutzerhandbuch.
Verwalten von Rollen mit der IAM-API
Verwenden Sie den Befehl AWS Command Line Interface, um eine Ausführungsrolle mit der AWS CLI (create-role) zu erstellen. Wenn Sie diesen Befehl verwenden, können Sie die Vertrauensrichtlinie angeben. Über die Vertrauensrichtlinie einer Rolle wird den angegebenen Prinzipalen die Berechtigung gegeben, die Rolle zu übernehmen. Im folgenden Beispiel erteilen Sie dem Lambda-Serviceprinzipal die Berechtigung, Ihre Rolle zu übernehmen. Die Anforderungen für Escape-Anführungszeichen in der JSON-Zeichenfolge können je nach Shell variieren.
aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
Sie können die Vertrauensrichtlinie für die Rolle auch mithilfe einer separaten JSON-Datei definieren. Im folgenden Beispiel ist trust-policy.json
eine Datei im aktuellen Verzeichnis.
Beispiel trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json
Die Ausgabe sollte folgendermaßen aussehen:
{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
Lambda übernimmt automatisch Ihre Ausführungsrolle an, wenn Sie Ihre Funktion aufrufen. Sie sollten vermeiden, sts:AssumeRole
manuell in Ihrem Funktionscode aufzurufen. Wenn Ihr Anwendungsfall erfordert, dass die Rolle sich selbst annimmt, müssen Sie die Rolle selbst als vertrauenswürdigen Prinzipal in die Vertrauensrichtlinie Ihrer Rolle aufnehmen. Weitere Informationen zum Ändern einer Rollenvertrauensrichtlinie finden Sie unter Ändern einer Rollenvertrauensrichtlinie (Konsole) im IAM-Benutzerhandbuch.
Um der Rolle Berechtigungen hinzuzufügen, verwenden Sie den attach-policy-to-role-Befehl. Beginnen Sie mit dem Hinzufügen der AWSLambdaBasicExecutionRole
verwalteten Richtlinie.
aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Sitzungsdauer für temporäre Sicherheitsanmeldeinformationen
Lambda nimmt die mit Ihrer Funktion verknüpfte Ausführungsrolle an, um temporäre Sicherheitsanmeldeinformationen abzurufen, die dann während des Aufrufs einer Funktion als Umgebungsvariablen verfügbar sind. Wenn Sie diese temporären Anmeldeinformationen außerhalb von Lambda verwenden, z. B. um eine vorsignierte Amazon-S3-URL zu erstellen, können Sie die Sitzungsdauer nicht steuern. Die Einstellung für die maximale IAM-Sitzungsdauer gilt nicht für Sitzungen, die von AWS-Services wie Lambda übernommen werden. Verwenden Sie die Aktion sts:AssumeRole, wenn Sie Kontrolle über die Sitzungsdauer benötigen.
AWS-verwaltete Richtlinien für Lambda-Funktionen
Die folgenden AWS-verwalteten Richtlinien bieten Berechtigungen, die für die Nutzung von Lambda-Funktionen erforderlich sind:
Änderung | Beschreibung | Datum |
---|---|---|
AWSLambdaMSKExecutionRole |
|
17. Juni 2022 |
AWSLambdaBasicExecutionRole |
|
14. Februar 2022 |
AWSLambdaDynamoDBExecutionRole |
|
14. Februar 2022 |
AWSLambdaKinesisExecutionRole |
|
14. Februar 2022 |
AWSLambdaMSKExecutionRole |
|
14. Februar 2022 |
AWSLambdaSQSQueueExecutionRole |
|
14. Februar 2022 |
AWSLambdaVPCAccessExecutionRole |
|
14. Februar 2022 |
AWSXRayDaemonWriteAccess |
|
14. Februar 2022 |
CloudWatchLambdaInsightsExecutionRolePolicy |
|
14. Februar 2022 |
AmazonS3ObjectLambdaExecutionRolePolicy |
|
14. Februar 2022 |
Bei einigen Funktionen versucht die Lambda-Konsole, Ihrer Ausführungsrolle in einer vom Kunden verwalteten Richtlinie fehlende Berechtigungen hinzuzufügen. Diese Politiken können zahlreich werden. Fügen Sie der Ausführungsrolle die relevanten AWS-verwalteten Richtlinien hinzu, bevor Sie Funktionen aktivieren, um das Erstellen zusätzlicher Richtlinien zu vermeiden.
Wenn Sie eine Ereignisquellen-Zuweisung zum Aufrufen Ihrer Funktion verwenden, verwendet Lambda die Ausführungsrolle zum Lesen von Ereignisdaten. Zum Beispiel liest eine Ereignisquellen-Zuweisung für Kinesis-Ereignisse aus einem Datenstrom und sendet diese in Batches an Ihre Funktion.
Wenn ein Dienst eine Rolle in Ihrem Konto übernimmt, können Sie die globalen Bedingungskontextschlüssel aws:SourceAccount
und aws:SourceArn
in Ihrer Rollenvertrauensrichtlinie übernehmen, um den Zugriff auf die Rolle nur auf Anforderungen zu beschränken, die von erwarteten Ressourcen generiert werden. Weitere Informationen finden Sie unter Vermeidung des Problems des verwirrten Stellvertreters im dienstübergreifenden Szenario für AWS Security Token Service.
Sie können Ereignisquellen-Zuweisungen mit den folgenden Services verwenden:
Services, aus denen Lambda Ereignisse liest
Zusätzlich zu den AWS-verwalteten Richtlinien stellt die Lambda-Konsole Vorlagen zum Erstellen einer benutzerdefinierten Richtlinie bereit, die Berechtigungen für weitere Anwendungsfälle beinhaltet. Wenn Sie eine Funktion in der Lambda-Konsole erstellen, haben Sie die Wahl, eine neue Ausführungsrolle mit Berechtigungen aus einer oder mehreren Vorlagen zu erstellen. Diese Vorlagen werden auch automatisch angewendet, wenn Sie eine Funktion von einer Vorlage erstellen oder wenn Sie Optionen konfigurieren, die Zugriff auf andere Services erfordern. Beispielvorlagen finden Sie im GitHub-Repository
Arbeiten mit Anmeldeinformationen für die Lambda-Ausführungsumgebung
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 | Action | Grund |
---|---|---|
CloudWatch Logs | 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).
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.
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
{ "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.
Sie können auch lambda:SourceFunctionArn
in Service-Kontrollrichtlinien 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
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] }, "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.