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.
Endpunktzugriffskontrolle mit Lambda Web Function
Sie können den Zugriff auf Ihre AWS Lambda Web Function-Endpunkte mithilfe der Einstellungen steuern, die AuthType Sie für jeden Endpunkt festgelegt haben. Je nach Authentifizierungstyp können Sie der Web-Funktion auch eine ressourcenbasierte Richtlinie hinzufügen, um zu steuern, wer einen Endpunkt aufrufen kann.
Wenn Sie einen Endpunkt konfigurieren, geben Sie eine der folgenden Optionen an: AuthType
IamAuth-
Bei diesem Authentifizierungstyp verwendet Lambda AWS Identity and Access Management (IAM), um Anfragen auf der Grundlage der Identitätsrichtlinie des Anrufers und der ressourcenbasierten Richtlinie der Webfunktion zu authentifizieren und zu autorisieren. Entweder signiert der Anrufer Anfragen direkt mit AWS Signature Version 4 (Sigv4) oder mit Signature Version 4a (SigV4a) für
MultiRegionEndgeräte, oder Amazon CloudFront signiert in seinem Namen, wenn er den Endpunkt öffnet (siehe). AWS-Service CloudFront Integration Wählen Sie diese Option, wenn Lambda die IAM-based Zugriffskontrolle auf Ihrem Endpunkt durchsetzen soll. ApplicationManaged-
Lambda authentifiziert oder autorisiert keine Anfragen. Jede Anfrage erreicht Ihre Funktion, und Ihr Funktionscode ist für jede Authentifizierung verantwortlich. Wählen Sie diese Option für öffentliche Endpunkte oder wenn Sie die Authentifizierung in Ihrem eigenen Code durchführen.
Die IAM-Aktion zum Aufrufen eines Endpunkts ist. lambda:InvokeWebFunctionEndpoint
Sie legen den Authentifizierungstyp eines Endpunkts mit dem --auth-type Parameter fest, wenn Sie den Endpunkt (create-web-function-endpoint) erstellen, und Sie können ihn später mit ändern. update-web-function-endpoint Informationen zum Befehl create finden Sie unterErstellen eines Endpunkts. Informationen zu den Eigenschaften, die Sie ändern können, finden Sie unterAktualisierung eines Endpunkts.
Verwenden Sie den IamAuthAuthentifizierungstyp
Wenn Sie den IamAuth Authentifizierungstyp wählen, müssen Anrufer jede Anfrage mit SigV4 (SigV4a für MultiRegion Endpunkte) signieren und dürfen den Endpunkt aufrufen. Je nachdem, wer die Anfrage stellt, erteilen Sie diese Berechtigung mit einer ressourcenbasierten Richtlinie für die Webfunktion, einer identitätsbasierten Richtlinie für den Anrufer oder mit beidem.
Befindet sich der Anrufer in derselben AWS-Konto Webfunktion, kann er entweder lambda:InvokeWebFunctionEndpoint über eine identitätsbasierte Richtlinie oder über die ressourcenbasierte Richtlinie der Funktion erteilt werden. Wenn der Anrufer ein anderes Konto hat, benötigt er sowohl eine identitätsbasierte Richtlinie, die die Aktion gewährt, als auch eine ressourcenbasierte Richtlinie für die Funktion, die dies zulässt.
Resource-based Richtlinien sind an die Webfunktion angehängt, aber jede Anweisung kann sich Resource auf einen bestimmten Endpunkt-ARN ARN. Die folgende ressourcenbasierte Richtlinie ermöglicht es der InvokeRole Rolle im Konto222233334444, den Endpunkt von aufzurufen: prod my-function
Beispiel Cross-account ressourcenbasierte Richtlinie
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222233334444:role/InvokeRole" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
Verwenden put-resource-policy Sie zum Anhängen der ressourcenbasierten Richtlinie die Funktion ARN (kein Endpunkt-ARN):
aws lambda-web put-resource-policy \ --resource-arn "arn:aws:lambda:us-east-1:111122223333:web-function/my-function" \ --policy file://policy.json \ --region us-east-1
Sie können die Richtlinie mit get-resource-policy und überprüfen oder entfernen. delete-resource-policy
Eine Webfunktion hat eine ressourcenbasierte Richtlinie und put-resource-policy ersetzt diese. Um eine Anweisung hinzuzufügen, z. B. die CloudFront Anweisung inCloudFront Integration, rufen Sie die aktuelle Richtlinie mit abget-resource-policy, fügen die Anweisung dem zugehörigen Statement Array hinzu und übergeben das zurückgegebene revisionId mit. --revision-id Wenn jemand die Richtlinie geändert hat, nachdem Sie sie gelesen haben, schlägt die Anfrage fehl und ConflictException die Änderung wird nicht überschrieben.
Um das Aufrufen aller Endpunkte einer Funktion zu ermöglichen, verwenden Sie einen Platzhalter im Ressourcen-ARN:
"Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*"
Ersetzen Sie die Region, die Konto-ID und den Funktionsnamen durch Ihre eigenen Werte. Bleib endpoint/* am Ende.
Einem Principal die Erlaubnis zum Aufrufen erteilen
Ein Aufrufer lambda:InvokeWebFunctionEndpoint muss einen Endpunkt aufrufen. Für einen Anrufer mit demselben Konto wie die Web-Funktion ist es ausreichend, dem Anrufer diese Aktion in der identitätsbasierten Richtlinie zuzuweisen. Es ist keine ressourcenbasierte Richtlinie erforderlich. Für einen Anrufer mit einem anderen Konto ist diese identitätsbasierte Richtlinie zusätzlich zu einer ressourcenbasierten Richtlinie für die Funktion erforderlich, die dies zulässt.
Fügen Sie der IAM-Rolle oder dem IAM-Benutzer, der den Endpunkt aufruft, die folgende Richtlinie hinzu:
Beispiel Identity-based Richtlinie zum Aufrufen eines Endpunkts
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
Signieren von Anforderungen
Lambda bietet kein spezielles SDK zum Aufrufen von Endpunkten. Sie senden Standard-HTTP-Anfragen und signieren sie selbst mit SigV4 oder SigV4a, wobei Sie den Dienstnamen verwenden. lambda Beachten Sie Folgendes:
-
Jede signierte Anfrage muss den
X-Amz-Content-SHA256Header enthalten, auch Anfragen ohne Hauptteil. Lambda liest den Anforderungstext nicht, wenn es die Signatur validiert, und verwendet daher diesen Header-Wert als Nutzlast-Hash. Anfragen ohne diesen Wert werden mit abgelehnt.403 Forbidden -
Wenn Sie den Text nicht signieren (z. B. beim Streamen), verwenden Sie den Literalwert
UNSIGNED-PAYLOADfürX-Amz-Content-SHA256. Lambda unterstützt kein Chunked Body Signing. -
Lambda vergleicht den Anforderungstext nicht mit dem
X-Amz-Content-SHA256Wert. Die Signatur deckt den Header-Wert ab, nicht den Hauptinhalt. Wenn Sie einen Schutz der Körperintegrität benötigen, der über TLS hinausgeht, implementieren Sie ihn in Ihrer Anwendung. -
Regionale Endpunkte (
HomeRegion,PerRegion) verwenden SigV4 mit der Region des Endpunkts.MultiRegionEndpunkte verwenden AWS Signature Version 4a (SigV4a), die für eine Reihe von Regionen statt für eine Region signiert. Verwenden Sie das Regions-Set.* -
Wenn eine
IamAuthAnfrage zurückkehrt403 Forbidden, überprüfen Sie, ob die Anfrage mit SigV4 (oder SigV4a) signiert ist, denX-Amz-Content-SHA256Header enthält und nicht abgelaufene Anmeldeinformationen verwendet und ob Ihre Richtlinienlambda:InvokeWebFunctionEndpointauf dem Endpunkt-ARN dies zulassen.
Weitere Informationen zum Signieren von Anfragen finden Sie unter Signieren von API-Anfragen. AWS
Nachdem Lambda die Sigv4- oder SigV4A-Signatur validiert hat, entfernt es den Authorization Header, bevor die Anfrage an Ihre Funktion weitergeleitet wird. Wenn Sie möchten, dass Ihre Funktion den Authorization Header auf einem IamAuth Endpunkt empfängt, senden Sie Anfragen über CloudFront, der sie in Ihrem Namen signiert (siehe). CloudFront Integration
CloudFront Integration
Sie können Amazon CloudFront Origin Access Control (OAC) verwenden, um eine CloudFront Distribution vor einen IamAuth Endpunkt zu stellen. Bei OAC CloudFront signiert jede ursprüngliche Anfrage im Namen des Betrachters, sodass Anrufer Anfragen nicht selbst unterschreiben. CloudFront verwendet den Authorization Header nicht, um die ursprüngliche Anfrage zu signieren, sodass es Ihren Authorization Header an die Funktion weiterleiten kann.
Lambda entfernt jeden Authorization Wert, der selbst eine AWS Signatur ist (ein Wert, der mit beginntAWS4-). Auf diese Weise können Sie die Authentifizierung Ihrer Anwendung (z. B. JWT oder Cookies) beibehalten und gleichzeitig jede ursprüngliche CloudFront Anfrage signieren. Konfigurieren Sie dazu die Distribution so, dass sie den Authorization Header weiterleitet. Weitere Informationen finden Sie unter Beschränken des Zugriffs auf einen AWS Ursprung.
Die Endpunktdomäne bleibt im Internet erreichbar, und Lambda akzeptiert auch direkt signierte Anfragen von jedem Prinzipal, den Ihre Richtlinien zulassen.
Dies setzt voraus, dass der Authentifizierungstyp des Endpunkts IamAuth Erstellen Sie die Origin-Zugriffskontrolle mit Ursprungstyp lambda und Signaturverhaltenalways-amz-auth. CloudFront lehnt andere Signaturverhalten für Webfunktions-Ursprünge ab.
Anmerkung
Lambda authentifiziert keine Anfragen an einen ApplicationManaged Endpunkt und bewertet auch nicht die ressourcenbasierte Richtlinie der Webfunktion für sie. Ein solcher Endpunkt bleibt unter seiner eigenen Domain öffentlich erreichbar, auch wenn er dahinter liegt. CloudFront
Um den Endpunkt aufrufen CloudFront zu können, fügen Sie der Webfunktion eine ressourcenbasierte Richtlinie hinzu, die dem CloudFront Dienstprinzipal (cloudfront.amazonaws.com) die Aktion erteilt. lambda:InvokeWebFunctionEndpoint Verwenden Sie eine aws:SourceArn Bedingung, um nur Ihre spezifische Distribution zuzulassen:
Beispiel Resource-based Richtlinie für CloudFront OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/<distribution-id>" } } } ] }
Verwenden Sie den ApplicationManagedAuthentifizierungstyp
Wenn der Authentifizierungstyp eines Endpunkts lautetApplicationManaged, kann jeder, der die Domäne des Endpunkts besitzt, Ihre Funktion aufrufen. Lambda führt keine Authentifizierung oder Autorisierung durch.
Wählen Sie aus, ApplicationManaged wann Ihr Endpunkt öffentlich erreichbar sein soll, um beispielsweise Anfragen direkt von einem Webbrowser aus zu bearbeiten. Sie können es auch wählen, wenn Sie die Authentifizierung in Ihrem eigenen Code abwickeln, z. B. OAuth 2.0, OpenID Connect oder einem benutzerdefinierten Token-Schema.
Mit diesem Authentifizierungstyp:
-
Lambda ermöglicht es allen Aufrufern, den Endpunkt aufzurufen. Es bewertet keine ressourcenbasierte Richtlinie für diese Anfragen.
-
Lambda leitet den
AuthorizationHeader des Aufrufers an Ihre Funktion weiter, sodass Ihr Code ihn validieren kann. Wenn der Header eine AWS Signature Version 4 (Sigv4) -Signatur enthält, entfernt Lambda sie zusammen mit allenX-Amz-Security-TokenHeadern, sodass AWS Anmeldeinformationen nicht an Ihren Funktionscode übergeben werden. -
Ihre Funktion ist für die gesamte Authentifizierung und Autorisierung verantwortlich.
Anmerkung
Bei ApplicationManaged Endpunkten bewertet Lambda die ressourcenbasierte Richtlinie der Webfunktion für Aufrufanforderungen nicht. Sie können eine ressourcenbasierte Richtlinie nicht verwenden, um einzuschränken, wer einen Endpunkt aufruft. ApplicationManaged Um den Aufruf einzuschränken, verwenden Sie stattdessen. IamAuth Die ressourcenbasierte Richtlinie gilt weiterhin für Verwaltungsaktionen. Beispielsweise kann sie einem anderen Konto die Erlaubnis erteilen, den Endpunkt zu aktualisieren. Weitere Informationen finden Sie unter Resource-based Richtlinien.
Governance und Zugriffskontrolle
Sie können steuern, wer Endpunkte konfigurieren kann.
Lambda unterstützt die folgenden IAM-Aktionen für die Verwaltung von Endpunkten:
-
lambda:CreateWebFunction— Erstellen Sie eine Webfunktion und konfigurieren Sie ihren anfänglichen Endpunkt, einschließlich ihres.AuthType -
lambda:CreateWebFunctionEndpoint— Erstellen Sie einen Endpunkt und legen Sie seinen festAuthType. -
lambda:UpdateWebFunctionEndpoint— Aktualisiere einen Endpunkt, einschließlich seinesAuthType. -
lambda:GetWebFunctionEndpoint— Zeigt die Konfiguration eines Endpunkts an. -
lambda:ListWebFunctionEndpoints— Listet die Endpunkte einer Webfunktion auf. -
lambda:DeleteWebFunctionEndpoint— Löscht einen Endpunkt.
Verwenden Sie einen Bedingungsschlüssel, um eine Aktion auf der Grundlage eines Authentifizierungstyps zuzulassen oder abzulehnen. lambda:Request/WebFunctionAuthTypegilt für CreateWebFunctionCreateWebFunctionEndpoint, undUpdateWebFunctionEndpoint. lambda:Resource/WebFunctionAuthTypegilt für InvokeWebFunctionEndpoint (auf IamAuth Endpunkten), UpdateWebFunctionEndpointGetWebFunctionEndpoint, undDeleteWebFunctionEndpoint. Details hierzu finden Sie unter Bedingungsschlüssel.
Einschränkung öffentlicher Endpunkte in einer Organisation
Wenn Sie eine AWS Organisation verwalten und Entwickler daran hindern möchten, öffentliche Endpunkte zu erstellen, verwenden Sie eine Service Control Policy (SCP), die die Erstellung oder Aktualisierung von Endpunkten mit dem Authentifizierungstyp verweigert. ApplicationManaged Verwenden Sie den lambda:Request/WebFunctionAuthType Bedingungsschlüssel, der den Authentifizierungstyp in der Anfrage widerspiegelt:
Beispiel SCP verweigert öffentliche Endpunkte
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateWebFunction", "lambda:CreateWebFunctionEndpoint", "lambda:UpdateWebFunctionEndpoint" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:Request/WebFunctionAuthType": "ApplicationManaged" } } } ] }
Die Richtlinie schließt ein, lambda:CreateWebFunction weil bei diesem Vorgang der erste Endpunkt anhand des Endpunkts der Anfrage erstellt wird. endpointConfig Wenn diese Richtlinie aktiviert ist, aws lambda-web deploy schlägt der Fehler mit der Meldung „Zugriff verweigert“ fehl, sofern der Entwickler nichts hinzufügt--auth-type IamAuth. Standardmäßig erstellt der Befehl einen ApplicationManaged Endpunkt.
Bedingungsschlüssel
Für eine differenzierte Zugriffskontrolle unterstützt Lambda die folgenden Bedingungskontextschlüssel:
-
lambda:Request/WebFunctionAuthType— Der in einer Anfrage angegebene Authentifizierungstyp. Verfügbar währendCreateWebFunctionCreateWebFunctionEndpoint, undUpdateWebFunctionEndpoint. Verwenden Sie es, um zu steuern, welche Authentifizierungstypen konfiguriert werden können. -
lambda:Resource/WebFunctionAuthType— Der aktuell auf einem Endpunkt konfigurierte Authentifizierungstyp mit den WertenIamAuthundApplicationManaged. Verfügbar währendInvokeWebFunctionEndpointUpdateWebFunctionEndpoint,DeleteWebFunctionEndpoint, undGetWebFunctionEndpoint. DennInvokeWebFunctionEndpointLambda wertet den Schlüssel nur aufIamAuthEndpunkten aus, da Anfragen anApplicationManagedEndpunkte nicht mit IAM autorisiert sind. -
aws:ResourceTag/${TagKey}— Filtert den Zugriff anhand der Tags in der Webfunktion. Endpunkte und Revisionen erben die Tags der übergeordneten Funktion, sodass Sie ABAC verwenden können, um den Aufrufzugriff zu kontrollieren.
Beispiel Erlauben Sie den Aufruf nur auf Endpunkten einer markierten Funktion
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/*/endpoint/prod", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "Production" } } } ] }