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

Lambda unterstützt ressourcenbasierte Berechtigungsrichtlinien für Lambda-Funktionen und -Ebenen. Mit ressourcenbasierten Richtlinien können Sie anderen AWS Konten oder Organisationen Nutzungsberechtigungen pro Ressource erteilen. Sie verwenden auch eine ressourcenbasierte Richtlinie, um einem AWS Dienst zu ermöglichen, Ihre Funktion in Ihrem Namen aufzurufen.

Für Lambda-Funktionen können Sie eine Kontoberechtigung erteilen, um eine Funktion aufzurufen oder zu verwalten. Außerdem können Sie eine einzelne ressourcenbasierte Richtlinie verwenden, um einer gesamten Organisation Berechtigungen in AWS Organizations zu erteilen. Sie können ressourcenbasierte Richtlinien auch verwenden, um einem AWS Dienst, der eine Funktion als Reaktion auf Aktivitäten in Ihrem Konto aufruft, die Aufrufberechtigung zu erteilen.

So zeigen Sie die ressourcenbasierte Richtlinie einer Funktion an
  1. Öffnen Sie die Seite Funktionen 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 Ressourcenbasierte Richtlinie und wählen Sie dann Richtliniendokument anzeigen aus. Die ressourcenbasierte Richtlinie zeigt die Berechtigungen, die angewendet werden, wenn ein anderes Konto oder ein anderer AWS Dienst versucht, auf die Funktion zuzugreifen. Das folgende Beispiel zeigt eine Anweisung, mit der Amazon S3 eine Funktion mit dem Namen my-function für einen Bucket mit dem Namen DOC-EXAMPLE-BUCKET im Konto 123456789012 aufrufen kann.

    Beispiel Ressourcenbasierte Richtlinie
    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-s3-my-function", "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:::DOC-EXAMPLE-BUCKET" } } } ] }

Für Lambda-Ebenen können Sie nur eine ressourcenbasierte Richtlinie für eine bestimmte Ebenen-Version anstelle der gesamten Ebene verwenden. Zusätzlich zu den Richtlinien, die Berechtigungen für ein einzelnes Konto oder alle Konten erteilen, können Sie für Ebenen auch die Berechtigung für alle Konten in einer Organisation erteilen.

Anmerkung

Sie können ressourcenbasierte Richtlinien für Lambda-Ressourcen nur im Rahmen der AddPermissionund AddLayerVersionPermissionAPI-Aktionen aktualisieren. Derzeit können Sie keine Richtlinien für Ihre Lambda-Ressourcen in JSON erstellen oder Bedingungen verwenden, die mit keinen Parametern für diese Aktionen verknüpft sind.

Ressourcenbasierte Richtlinien gelten für einzelne Funktionen, Versionen, Aliasnamen oder Ebenenversionen. Sie gewähren die Berechtigung für einen oder mehrere Services bzw. Konten. Bei vertrauenswürdigen Konten, die Zugriff auf mehrere Ressourcen haben sollen, oder für die Verwendung von API-Aktionen, die ressourcenbasierte Richtlinien nicht unterstützen, können Sie kontoübergreifenden Rollen verwenden.

Unterstützte API-Aktionen

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

Funktionszugriff auf AWS Dienste gewähren

Wenn Sie einen AWS Dienst verwenden, um Ihre Funktion aufzurufen, erteilen Sie die Erlaubnis in einer Erklärung zu einer ressourcenbasierten Richtlinie. Sie können die Anweisung auf die gesamte Funktion anwenden, die aufgerufen oder verwaltet werden soll, 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.

Fügen Sie eine Anweisung mit dem Befehl add-permission hinzu. Die einfachste ressourcenbasierte Richtlinienanweisung ermöglicht es einem Service, eine Funktion aufzurufen. Der folgende Befehl gewährt die Amazon-SNS-Berechtigung zum Aufrufen einer Funktion namens my-function:

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"}

Auf diese Weise kann Amazon SNS die API lambda:Invoke für die Funktion aufrufen, ohne das Amazon-SNS-Thema einzuschränken, durch das der Aufruf ausgelöst wird. Um sicherzustellen, dass Ihre Funktion nur von einer bestimmten Ressource aufgerufen wird, geben Sie den Amazon-Ressourcennamen (ARN) der Ressource mit der Option source-arn an. Der folgende Befehl erlaubt Amazon SNS nur das Aufrufen der Funktion für Abonnements für ein Thema namens my-topic.

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

Einige Services können Funktionen in anderen Konten aufrufen. Wenn Sie einen Quell-ARN angeben, der Ihre Konto-ID enthält, ist das kein Problem. Für Amazon S3 ist die Quelle jedoch ein Bucket, dessen ARN nicht über eine Konto-ID verfügt. Es ist möglich, dass Sie den Bucket löschen und ein anderes Konto einen Bucket mit demselben Namen erstellt. Verwenden Sie die Option source-account mit Ihrer Konto-ID, um sicherzustellen, dass nur Ressourcen in Ihrem Konto die Funktion aufrufen können.

aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id s3-account \ --principal s3.amazonaws.com --source-arn arn:aws:s3:::DOC-EXAMPLE-BUCKET --source-account 123456789012

Gewähren des Funktionszugriffs auf eine Organisation

Um einer Organisation Berechtigungen zu erteilen AWS Organizations, geben Sie die Organisations-ID als. principal-org-id Der folgende AddPermission AWS CLI Befehl gewährt allen Benutzern in der Organisation o-a1b2c3d4e5f Aufrufzugriff.

aws lambda add-permission --function-name example \ --statement-id PrincipalOrgIDExample --action lambda:InvokeFunction \ --principal * --principal-org-id o-a1b2c3d4e5f
Anmerkung

In diesem Befehl ist Principal *. Dies bedeutet, dass alle Benutzer in der Organisation o-a1b2c3d4e5f Berechtigungen für den Funktionsaufruf erhalten. Wenn Sie ein AWS Konto oder eine Rolle als angebenPrincipal, erhält nur dieser Prinzipal die Berechtigungen zum Aufrufen von Funktionen, aber nur, wenn er auch Teil der o-a1b2c3d4e5f Organisation ist.

Dieser Befehl erstellt eine ressourcenbasierte Richtlinie, die wie folgt aussieht:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalOrgIDExample", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:example", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }

Weitere Informationen finden Sie unter aws: PrincipalOrg ID im AWS Identity and Access Management Benutzerhandbuch.

Gewähren des Funktionszugriffs für andere Konten

Um einem anderen AWS Konto Berechtigungen zu gewähren, geben Sie die Konto-ID alsprincipal. Im folgenden Beispiel wird dem Konto 111122223333 die Berechtigung zum Aufrufen von my-function mit dem Alias prod erteilt.

aws lambda add-permission --function-name my-function:prod --statement-id xaccount --action lambda:InvokeFunction \ --principal 111122223333 --output text

Die Ausgabe sollte folgendermaßen aussehen:

{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}

Die ressourcenbasierte Richtlinie erteilt dem anderen Konto die Berechtigung für den Zugriff auf die Funktion, erlaubt den Benutzern in diesem Konto jedoch nicht, ihre Berechtigungen zu überschreiten. Benutzer in dem anderen Konto müssen über die entsprechenden Benutzerberechtigungen verfügen, um die Lambda-API verwenden zu können.

Um den Zugriff auf einen Benutzer oder eine Rolle in einem anderen Konto einzuschränken, geben Sie den vollständigen ARN der Identität als Prinzipal an. Beispiel, arn:aws:iam::123456789012:user/developer.

Der Alias schränkt ein, welche Version das andere Konto aufrufen kann. Dies erfordert, dass das andere Konto den Alias in den ARN der Funktion einschließt.

aws lambda invoke --function-name arn:aws:lambda:us-west-2:123456789012:function:my-function:prod out

Die Ausgabe sollte folgendermaßen aussehen:

{ "StatusCode": 200, "ExecutedVersion": "1" }

Der Funktionsbesitzer kann dann den Alias so aktualisieren, dass er auf eine neue Version verweist, ohne dass der Aufrufer die Methode ändern muss, mit der er Ihre Funktion aufruft. Dadurch wird sichergestellt, dass das andere Konto seinen Code nicht ändern muss, um die neue Version zu verwenden, und nur zum Aufruf der Version der Funktion berechtigt ist, die dem Alias zugeordnet ist.

Sie können kontoübergreifenden Zugriff für die meisten API-Aktionen erteilen, die für eine vorhandene Funktion ausgeführt werden. Beispielsweise könnten Sie Zugriff auf lambda:ListAliases gewähren, damit ein Konto eine Liste der Aliasse abrufen kann, oder lambda:GetFunction, damit es Ihren Funktionscode herunterladen kann. Fügen Sie jede Berechtigung separat hinzu oder verwenden Sie lambda:*, um Zugriff auf alle Aktionen der angegebenen Funktion zu gewähren.

Um anderen Konten Berechtigungen für mehrere Funktionen oder für Aktionen zu erteilen, die nicht für eine Funktion ausgeführt werden, empfehlen wir die Verwendung von IAM-Rollen.

Gewähren des Ebenenzugriffs für andere Konten

Um einem anderen Konto Nutzungsberechtigungen für Ebenen zu erteilen, fügen Sie der Berechtigungsrichtlinie der Ebenenversion mithilfe des Befehls add-layer-version-permission eine Anweisung hinzu. In jeder Anweisung können Sie einem einzelnen Konto, allen Konten oder einer Organisation eine Berechtigung erteilen.

Im folgenden Beispiel wird dem Konto 111122223333 Zugriff auf Version 2 der bash-runtime-Ebene gewährt.

aws lambda add-layer-version-permission --layer-name bash-runtime --statement-id xaccount \ --action lambda:GetLayerVersion --principal 111122223333 --version-number 2 --output text

Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:

e210ffdc-e901-43b0-824b-5fcd0dd26d16 {"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-1:123456789012:layer:bash-runtime:2"}

Berechtigungen gelten nur für eine Version mit einer Ebene. Wiederholen Sie den Vorgang bei jeder Erstellung einer neuen Ebenenversion.

Um Berechtigungen für alle Konten in einer Organisation zu erteilen, verwenden Sie die Option organization-id. Im folgenden Beispiel wird allen Konten in einer Organisation die Berechtigung für die Verwendung von Version 3 einer Ebene erteilt.

aws lambda add-layer-version-permission --layer-name my-layer \ --statement-id engineering-org --version-number 3 --principal '*' \ --action lambda:GetLayerVersion --organization-id o-t194hfs8cz --output text

Die Ausgabe sollte folgendermaßen aussehen:

b0cd9796-d4eb-4564-939f-de7fe0b42236 {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"

Um allen AWS Konten Berechtigungen zu erteilen, verwenden Sie * für den Prinzipal und lassen Sie die Organisations-ID weg. Für mehrere Konten oder Organisationen müssen Sie mehrere Anweisungen hinzufügen.

Bereinigen von ressourcenbasierten Richtlinien

Um die ressourcenbasierte Richtlinie einer Funktion anzuzeigen, verwenden Sie den Befehl get-policy.

aws lambda get-policy --function-name my-function --output text

Die Ausgabe sollte folgendermaßen aussehen:

{"Version":"2012-10-17","Id":"default","Statement":[{"Sid":"sns","Effect":"Allow","Principal":{"Service":"s3.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:lambda*"}}}]} 7c681fc9-b791-4e91-acdf-eb847fdaa0f0

Fügen Sie bei Versionen und Aliassen die Versionsnummer oder den Alias an den Funktionsnamen an.

aws lambda get-policy --function-name my-function:PROD

Um Berechtigungen von Ihrer Funktion zu entfernen, verwenden Sie remove-permission.

aws lambda remove-permission --function-name example --statement-id sns

Verwenden Sie den Befehl get-layer-version-policy, um die Berechtigungen für einen Layer anzuzeigen.

aws lambda get-layer-version-policy --layer-name my-layer --version-number 3 --output text

Die Ausgabe sollte folgendermaßen aussehen:

b0cd9796-d4eb-4564-939f-de7fe0b42236 {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-west-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"

Verwenden Sie remove-layer-version-permission, um Anweisungen aus der Richtlinie zu entfernen.

aws lambda remove-layer-version-permission --layer-name my-layer --version-number 3 --statement-id engineering-org