View a markdown version of this page

Arbeiten mit ressourcenbasierten Richtlinien in Lambda - 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.

Arbeiten mit ressourcenbasierten Richtlinien in Lambda

Mit ressourcenbasierten Berechtigungsrichtlinien können Sie anderen AWS-Konten Benutzern und Organisationen AWS-Services Zugriff auf Ihre Lambda Event Functions gewähren. Eine ressourcenbasierte Richtlinie ist ein JSON-Dokument, das eine oder mehrere Anweisungen enthält. Jede Anweisung definiert Folgendes:

  • Principal: Die Entität, der Sie Berechtigungen erteilen möchten (eine andere AWS-Service, eine IAM-Rolle oder ein anderer Benutzer oder eine andere AWS-Konto)

  • Action: Eine Liste der API-Aktionen, die Sie für den angegebenen Prinzipal zulassen oder verweigern möchten

  • Effect: Ob Sie dem Prinzipal die Nutzung der ausgewählten API-Aktionen gestatten oder verweigern möchten

  • Resource: Die Lambda-Funktion, die Version oder der Alias, für die die Anweisung gelten soll (Sie können auch ein Platzhalterzeichen verwenden, um alle Versionen und Aliase Ihrer Funktion anzugeben)

Sie können auch optionale Elemente wie Sid (eine Anweisungs-ID) und Condition (logische Bedingungen für eine detaillierte Zugriffskontrolle) verwenden. Eine vollständige Liste der unterstützten Richtlinienelemente finden Sie in der Referenz zu den IAM-JSON-Richtlinienelementen im AWS Identity and Access Management Benutzerhandbuch.

Hinzufügen ressourcenbasierter Berechtigungen zu einer Event-Funktion

Sie können Ihrer Lambda-Funktion mit zwei Methoden ressourcenbasierte Berechtigungen hinzufügen:

  • Vollständige JSON-Richtlinie — Verwenden Sie die Lambda-Konsole oder die PutResourcePolicyAPI-Aktion AWS CLI, um ein vollständiges JSON-Richtliniendokument hinzuzufügen. Mit einer vollständigen JSON-Richtlinie können Sie die gesamte Palette der globalen IAM-Bedingungsschlüssel verwenden, mehrere Anweisungen mit mehreren Prinzipalen hinzufügen und explizite Anweisungen erstellen. Deny Die maximale Größe für eine auf JSON-Ressourcen basierende Richtlinie beträgt 20 KB.

  • Individuelle Berechtigungen — Verwenden Sie die Konsole oder die AddPermissionAPI-Aktion, um einzelne Allow Anweisungen hinzuzufügen. Individuelle Berechtigungen unterstützen nur einen begrenzten Satz von Bedingungsschlüsseln (aws:SourceArnaws:SourceAccount, undaws:PrincipalOrgID).

Wir empfehlen Ihnen, vollständige JSON-Richtlinien zu definieren, um Ihrer Funktion ressourcenbasierte Berechtigungen hinzuzufügen. Die Erstellung einer vollständigen JSON-Richtlinie bietet Ihnen mehr Flexibilität und eine detaillierte Kontrolle über Ihre Berechtigungen.

Wichtig

Durch die Verwendung werden alle vorhandenen ressourcenbasierten Richtlinien für die Ressource put-resource-policy ersetzt. Wenn für die Ressource bereits Berechtigungen definiert sindadd-permission, werden diese put-resource-policy überschrieben. Dient get-resource-policy zum Abrufen der vorhandenen Richtlinie, bevor Sie Änderungen vornehmen.

Erforderliche Berechtigungen

Um die DeleteResourcePolicy API-Aktionen PutResourcePolicyGetResourcePolicy, und verwenden zu können, benötigen Sie die folgenden IAM-Berechtigungen:

API-Aktion Erforderliche Berechtigungen
PutResourcePolicy lambda:PutResourcePolicy, lambda:AddPermission und lambda:RemovePermission
GetResourcePolicy lambda:GetResourcePolicy und lambda:GetPolicy
DeleteResourcePolicy lambda:DeleteResourcePolicy und lambda:RemovePermission
Console
Um eine vollständige, ressourcenbasierte JSON-Richtlinie zu erstellen
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, für die Sie Zugriff gewähren möchten, und wählen Sie dann die Registerkarte Konfiguration.

  3. Wählen Sie Berechtigungen aus.

  4. Wählen Sie im Bereich mit den Resource-based Richtlinienerklärungen die Option Bearbeiten aus. Diese Aktion öffnet den JSON-Richtlinieneditor.

  5. Fügen Sie der Richtlinie Ihrer Funktion Anweisungen hinzu. Sie können API-Aktionen auswählen, Principals verschiedener Typen (Dienste, Konten, IAM-Rollen) hinzufügen und Bedingungsschlüssel hinzufügen, um den Zugriff zu kontrollieren.

  6. Wählen Sie Speichern.

Sie können die ressourcenbasierte Richtlinie Ihrer Funktion auch direkt im Bereich Richtlinie bearbeiten.

AWS CLI
Um eine vollständige ressourcenbasierte JSON-Richtlinie hinzuzufügen

Verwenden Sie den Befehl, um Ihrer Funktion eine vollständige JSON-Richtlinie hinzuzufügen. put-resource-policy AWS CLI

Der folgende Beispielbefehl fügt Ihrer Funktion mithilfe einer Richtlinie, die in einer Datei mit dem Namen policy.json auf Ihrem lokalen Computer definiert ist, eine ressourcenbasierte Richtlinie hinzu. Führen Sie den Befehl in dem Verzeichnis aus, das die Datei enthält. Sie resource-arn können eine Funktionsversion oder einen Alias angeben, oder Sie können die unqualifizierte Funktion ARN verwenden, um die Richtlinie auf die gesamte Funktion anzuwenden.

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

Verwenden Sie die PutResourcePolicyAPI-Aktion, um Ihrer Funktion eine vollständige JSON-Berechtigungsrichtlinie hinzuzufügen. Sie können die Richtlinie einer Funktion auch mithilfe der DeleteResourcePolicyAktion löschen oder mithilfe der GetResourcePolicyAktion die Richtlinie abrufen, die derzeit mit einer Funktion verknüpft ist.

Verwenden Sie die AddPermissionAPI-Aktion, um der Richtlinie einer Funktion individuelle Berechtigungen hinzuzufügen.

Die ressourcenbasierte Richtlinie einer Funktion anzeigen

Console
So zeigen Sie die ressourcenbasierte Richtlinie einer Funktion an
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie eine Funktion aus.

  3. Wählen Sie Konfiguration und anschließend Berechtigungen aus.

  4. Scrollen Sie nach unten zu den Resource-based Richtlinienerklärungen, um die Richtlinie einzusehen.

AWS CLI

Um die ressourcenbasierte Richtlinie einer Funktion anzuzeigen, verwenden Sie den Befehl get-resource-policy. Sie können den unqualifizierten ARN Ihrer Funktion verwenden oder eine Version oder einen Alias angeben.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Sie können auch den get-policy folgenden Befehl verwenden:

aws lambda get-policy \ --function-name my-function \ --output text
Lambda APIs

Verwenden Sie die GetResourcePolicyAPI-Aktion, um die ressourcenbasierte Richtlinie einer Funktion abzurufen. Sie können den unqualifizierten ARN Ihrer Funktion verwenden oder eine Version oder einen Alias-ARN angeben.

Sie können auch die GetPolicyAPI-Aktion verwenden.

Löschen der ressourcenbasierten Richtlinie einer Funktion

Console
Um die ressourcenbasierte Richtlinie einer Funktion zu löschen
  1. Öffnen Sie die Seite Event Functions der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, für die Sie die Berechtigungsrichtlinie löschen möchten.

  3. Wählen Sie die Registerkarte Konfiguration und dann Berechtigungen.

  4. Wählen Sie im Bereich mit den Resource-based Richtlinienerklärungen die Option Löschen aus.

AWS CLI

Um die Richtlinie Ihrer Funktion zu löschen, verwenden Sie den delete-resource-policy Befehl und geben Sie den ARN der Funktion, Version oder des Alias an, aus dem Sie die Richtlinie löschen möchten.

aws lambda delete-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Um einzelne Anweisungen zu entfernen, verwenden Sieremove-permission.

aws lambda remove-permission \ --function-name example \ --statement-id sns
Lambda APIs

Verwenden Sie die DeleteResourcePolicyAPI-Aktion, um die ressourcenbasierte Richtlinie zu löschen, die einer Funktion, Funktionsversion oder einem Funktionsalias zugeordnet ist.

Verwenden Sie die RemovePermissionAPI-Aktion, um einzelne Anweisungen aus einer Richtlinie zu entfernen.

Aktualisierung vorhandener Richtlinien

Wenn Sie die vorhandenen ressourcenbasierten Berechtigungen einer Funktion aktualisieren, hängt das Verhalten von der verwendeten Methode ab:

  • put-resource-policy/PutResourcePolicy— Ersetzt die gesamte bestehende Richtlinie. Alle zuvor hinzugefügten individuellen Berechtigungen werden überschrieben.

  • add-permission/AddPermission— Fügt der vorhandenen Richtlinie eine Anweisung hinzu, ohne sie zu überschreiben. Wenn Sie add-permission danach aufrufenput-resource-policy, wird die neue Anweisung an die bestehende JSON-Richtlinie angehängt.

Um zu vermeiden, dass bestehende Berechtigungen bei der Verwendung unbeabsichtigt überschrieben werdenput-resource-policy, rufen Sie zuerst die bestehende Richtlinie Ihrer Funktion ab. Die get-resource-policy Ausgabe umfasst ein RevisionId Feld.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Wenn Sie eine neue Richtlinie anhängen, geben Sie den RevisionId Wert zusammen mit dem --revision-id Parameter an, um sicherzustellen, dass Sie die neueste Version aktualisieren. Wenn Sie eine ältere Revisions-ID angeben, aktualisiert Lambda die Richtlinie Ihrer Funktion nicht.

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json \ --revision-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
Anmerkung

Bestehende ressourcenbasierte Richtlinien, die mit erstellt wurden, funktionieren AddPermission weiterhin ohne Änderungen. Für die Verwendung der neuen PutResourcePolicy API sind keine Änderungen an Ihrem Funktionscode erforderlich.

Bewährte Methoden für die Gewährleistung der Sicherheit

Mit ressourcenbasierten JSON-Richtlinien können Sie den Zugriffsmustern mit den geringsten Rechten folgen. Sie können auch die gesetzlichen Anforderungen für explizite Verweigerungen erfüllen. Mit vollständigen JSON-Richtlinien können Sie:

  • Erstellen Sie explizite Deny Anweisungen, um bestimmte Prinzipien oder Bedingungen zu blockieren.

  • Verwenden Sie organisatorische Bedingungen (aws:PrincipalOrgID,aws:PrincipalOrgPaths), um den Zugriff auf Ihre Organizations einzuschränken, ohne einzelne Konten aufzuzählen.

  • Geben Sie mithilfe der gesamten Palette der globalen IAM-Bedingungsschlüssel Zugriffsberechtigungen auf bestimmte Quellkonten oder ARNs ein.

Beispiel für ressourcenbasierte Richtlinien

Beispiel Erteilen einer Genehmigung für Amazon S3 mit einer Ablehnungsaussage

Die folgende Richtlinie gewährt allen Amazon S3 S3-Buckets in einem Konto die Berechtigung, eine Funktion aufzurufen, mit Ausnahme eines Buckets, der ausdrücklich verweigert wurde.

{ "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:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
Beispiel Erteilen von Berechtigungen für Konten in einer Organisation

Mit der folgenden Richtlinie wird allen Mitgliedern einer Organisation AWS-Konten der Zugriff gewährt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
Beispiel Erteilen von Berechtigungen für mehrere IAM-Rollen unter bestimmten Bedingungen

Die folgende Richtlinie gewährt zwei IAM-Rollen die Erlaubnis, die CreateAlias Aktion von einer bestimmten IP-Adresse aus zu verwenden.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
Beispiel Der Zugriff wird verweigert, sofern der Anrufer nicht Teil einer bestimmten Organisation ist
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }

Unterstützte API-Aktionen

Die folgenden Lambda-API-Aktionen unterstützen ressourcenbasierte Richtlinien: