View a markdown version of this page

Controllo dell'accesso agli endpoint Lambda Web Function - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Controllo dell'accesso agli endpoint Lambda Web Function

È possibile controllare l'accesso agli endpoint AWS Lambda Web Function utilizzando le impostazioni AuthType impostate su ciascun endpoint. A seconda del tipo di autenticazione, è anche possibile allegare alla funzione Web una policy basata sulle risorse per controllare chi può richiamare un endpoint.

Quando si configura un endpoint, si specifica una delle seguenti opzioni: AuthType

IamAuth

Con questo tipo di autenticazione, Lambda utilizza AWS Identity and Access Management (IAM) per autenticare e autorizzare le richieste in base alla politica di identità del chiamante e alla politica basata sulle risorse della funzione Web. Il chiamante firma le richieste direttamente con AWS Signature Version 4 (SigV4) o con Signature Version 4a (SigV4a) per gli MultiRegion endpoint, oppure una soluzione Servizio AWS come CloudFront Amazon che firma per suo conto quando fronteggia l'endpoint (vedi). CloudFront integrazione Scegli questa opzione se desideri che Lambda applichi il controllo degli IAM-based accessi sul tuo endpoint.

ApplicationManaged

Lambda non autentica o autorizza le richieste. Ogni richiesta raggiunge la tua funzione e il codice della funzione è responsabile di qualsiasi autenticazione. Scegliete questa opzione per gli endpoint pubblici o quando gestite l'autenticazione nel vostro codice.

L'azione IAM per richiamare un endpoint è. lambda:InvokeWebFunctionEndpoint

Puoi impostare il tipo di autenticazione di un endpoint con il --auth-type parametro quando crei l'endpoint (create-web-function-endpoint) e puoi modificarlo in seguito con. update-web-function-endpoint Per il comando create, vedi. Creazione di un endpoint Per le proprietà che è possibile modificare, vedereAggiornamento di un endpoint.

Utilizzo del tipo di IamAuthautenticazione

Se si sceglie il tipo di IamAuth autenticazione, i chiamanti devono firmare ogni richiesta con SigV4 (SigV4A per gli endpoint) e devono essere autorizzati a richiamare l'MultiRegionendpoint. A seconda di chi effettua la richiesta, si concede questa autorizzazione con una politica basata sulle risorse sulla funzione Web, una politica basata sull'identità del chiamante o entrambi.

Se il chiamante utilizza la Account AWS stessa funzione Web, può essere concessa lambda:InvokeWebFunctionEndpoint tramite una politica basata sull'identità o una politica basata sulle risorse della funzione. Se il chiamante utilizza un account diverso, ha bisogno sia di una politica basata sull'identità che conceda l'azione sia di una politica basata sulle risorse sulla funzione che lo consente.

Resource-based le politiche sono allegate alla funzione Web, ma ogni istruzione può riferirsi Resource a un ARN di endpoint specifico. La seguente politica basata sulle risorse consente al InvokeRole ruolo in account di richiamare l'endpoint 222233334444 di: prod my-function

Esempio Cross-account politica basata sulle risorse
{ "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" } ] }

Per allegare la policy basata sulle risorse, usa put-resource-policy con la funzione ARN (non un ARN di endpoint):

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

È possibile rivedere o rimuovere la politica con e. get-resource-policy delete-resource-policy

Una funzione Web ha una politica basata sulle risorse e put-resource-policy la sostituisce. Per aggiungere un'istruzione, ad esempio l' CloudFront istruzione inCloudFront integrazione, ottieni la politica corrente conget-resource-policy, aggiungi l'istruzione al relativo Statement array e passa il risultato con. revisionId --revision-id Se qualcuno ha modificato la policy dopo averla letta, la richiesta non va a buon fine e la modifica non viene sovrascritta. ConflictException

Per consentire l'invocazione di tutti gli endpoint di una funzione, usa un carattere jolly nella risorsa ARN:

"Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*"

Sostituisci la regione, l'ID dell'account e il nome della funzione con i tuoi valori. Continua fino endpoint/* alla fine.

Concessione del permesso di invocazione a un preside

Un chiamante deve richiamare un lambda:InvokeWebFunctionEndpoint endpoint. Per un chiamante con lo stesso account della funzione Web, è sufficiente concedere questa azione nella politica basata sull'identità del chiamante. Non è richiesta alcuna politica basata sulle risorse. Per un chiamante con un account diverso, è necessaria questa politica basata sull'identità oltre a una politica basata sulle risorse sulla funzione che le consente.

Allega la seguente policy al ruolo o all'utente IAM che richiamerà l'endpoint:

Esempio Identity-based politica per richiamare un endpoint
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }

Firma delle richieste

Lambda non fornisce un SDK dedicato per richiamare gli endpoint. Puoi inviare richieste HTTP standard e firmarle tu stesso con SigV4 o SigV4a, utilizzando il nome del servizio. lambda Tenere presente quanto segue:

  • Ogni richiesta firmata deve includere l'X-Amz-Content-SHA256intestazione, comprese le richieste senza corpo. Lambda non legge il corpo della richiesta quando convalida la firma, quindi utilizza questo valore di intestazione come hash del payload. Le richieste senza di esso vengono rifiutate con. 403 Forbidden

  • Se non firmi il corpo (ad esempio, durante lo streaming), usa il valore letterale UNSIGNED-PAYLOAD perX-Amz-Content-SHA256. Lambda non supporta la firma del corpo in blocchi.

  • Lambda non confronta il corpo della richiesta con il X-Amz-Content-SHA256 valore. La firma copre il valore dell'intestazione, non il contenuto del corpo. Se hai bisogno di una protezione dell'integrità del corpo oltre a TLS, implementala nella tua applicazione.

  • Gli endpoint regionali (HomeRegion,PerRegion) utilizzano SigV4 con la regione dell'endpoint. MultiRegiongli endpoint utilizzano AWS Signature Version 4a (SigV4a), che firma per un insieme di regioni anziché una regione. Usa il set di regioni. *

  • Se viene restituita una IamAuth richiesta403 Forbidden, verifica che la richiesta sia firmata con SigV4 (o SigV4A), includa l'X-Amz-Content-SHA256intestazione e utilizzi credenziali non scadute e che le tue politiche lo consentano sull'ARN dell'endpoint. lambda:InvokeWebFunctionEndpoint

Per ulteriori informazioni sulla firma delle richieste, consulta Firmare le richieste API. AWS

Dopo aver convalidato la firma SigV4 o SigV4a, Lambda rimuove l'Authorizationintestazione prima di inoltrare la richiesta alla funzione. Se vuoi che la tua funzione riceva l'Authorizationintestazione su un IamAuth endpoint, invia le richieste, che le firmerà per tuo conto (vedi). CloudFront CloudFront integrazione

CloudFront integrazione

Puoi utilizzare Amazon CloudFront Origin Access Control (OAC) per mettere una CloudFront distribuzione davanti a un IamAuth endpoint. Con OAC, CloudFront firma ogni richiesta di origine per conto dello spettatore, in modo che i chiamanti non firmino le richieste da soli. CloudFront non utilizza l'Authorizationintestazione per firmare la richiesta di origine, quindi può passare l'Authorizationintestazione alla funzione.

Lambda rimuove qualsiasi Authorization valore che sia esso stesso una AWS firma (un valore che inizia conAWS4-). In questo modo puoi mantenere l'autenticazione dell'applicazione (ad esempio, JWT o i cookie) mentre CloudFront firmi ogni richiesta di origine. Per fare ciò, configura la distribuzione per inoltrare l'Authorizationintestazione. Per ulteriori informazioni, consulta Limitazione dell'accesso a un' AWS origine.

Il dominio dell'endpoint rimane raggiungibile su Internet e Lambda accetta anche richieste con firma diretta da qualsiasi principale consentito dalle tue policy.

Ciò richiede che il tipo di autenticazione dell'endpoint sia. IamAuth Crea il controllo di accesso all'origine con il tipo di origine lambda e il comportamento always-amz-auth di firma. CloudFront rifiuta altri comportamenti di firma per le origini di Web Function.

Nota

Lambda non autentica le richieste verso un ApplicationManaged endpoint né valuta la politica basata sulle risorse di Web Function per esse. Un endpoint di questo tipo rimane pubblicamente raggiungibile nel proprio dominio, anche in ambienti remoti. CloudFront

CloudFront Per consentire di richiamare l'endpoint, allega alla funzione Web una policy basata sulle risorse che conceda al service principal () l'azione. CloudFront cloudfront.amazonaws.com lambda:InvokeWebFunctionEndpoint Usa una aws:SourceArn condizione per consentire solo la tua distribuzione specifica:

Esempio Resource-based politica per 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>" } } } ] }

Utilizzo del tipo di ApplicationManagedautenticazione

Se il tipo di autenticazione di un endpoint èApplicationManaged, chiunque disponga del dominio dell'endpoint può richiamare la tua funzione. Lambda non esegue alcuna autenticazione o autorizzazione.

Scegli ApplicationManaged quando vuoi che il tuo endpoint sia raggiungibile pubblicamente, ad esempio, per soddisfare le richieste direttamente da un browser web. Puoi anche sceglierlo quando gestisci l'autenticazione nel tuo codice, come OAuth 2.0, OpenID Connect o uno schema di token personalizzato.

Con questo tipo di autenticazione:

  • Lambda consente a tutti i chiamanti di richiamare l'endpoint. Non valuta una politica basata sulle risorse per queste richieste.

  • Lambda inoltra l'Authorizationintestazione del chiamante alla funzione, in modo che il codice possa convalidarla. Se l'intestazione contiene una AWS firma Signature Version 4 (SigV4), Lambda la rimuove, insieme a qualsiasi X-Amz-Security-Token intestazione, in modo che AWS le credenziali non vengano passate al codice della funzione.

  • La tua funzione è responsabile di tutte le autenticazioni e autorizzazioni.

Nota

Per gli ApplicationManaged endpoint, Lambda non valuta la politica basata sulle risorse di Web Function per le richieste di richiamo. Non è possibile utilizzare una policy basata sulle risorse per limitare chi richiama un endpoint. ApplicationManaged Per limitare la chiamata, usa invece. IamAuth La politica basata sulle risorse si applica ancora alle azioni di gestione. Ad esempio, può concedere a un altro account l'autorizzazione ad aggiornare l'endpoint. Per ulteriori informazioni, consulta Resource-based politiche.

Governance e controllo degli accessi

Puoi controllare chi può configurare gli endpoint.

Lambda supporta le seguenti azioni IAM per la gestione degli endpoint:

  • lambda:CreateWebFunction— Crea una funzione Web e configura il suo endpoint iniziale, incluso il suo. AuthType

  • lambda:CreateWebFunctionEndpoint— Crea un endpoint e impostalo. AuthType

  • lambda:UpdateWebFunctionEndpoint— Aggiorna un endpoint, incluso il suo. AuthType

  • lambda:GetWebFunctionEndpoint— Visualizza la configurazione di un endpoint.

  • lambda:ListWebFunctionEndpoints— Elenca gli endpoint di una funzione Web.

  • lambda:DeleteWebFunctionEndpoint— Eliminare un endpoint.

Per consentire o negare un'azione basata su un tipo di autenticazione, utilizza una chiave di condizione. lambda:Request/WebFunctionAuthTypesi applica a CreateWebFunctionCreateWebFunctionEndpoint, eUpdateWebFunctionEndpoint. lambda:Resource/WebFunctionAuthTypesi applica a InvokeWebFunctionEndpoint (sugli IamAuth endpoint), UpdateWebFunctionEndpointGetWebFunctionEndpoint, eDeleteWebFunctionEndpoint. Per informazioni dettagliate, vedi Chiavi di condizione.

Limitazione degli endpoint pubblici in un'organizzazione

Se amministri un' AWS organizzazione e desideri impedire agli sviluppatori di creare endpoint pubblici, utilizza una policy di controllo del servizio (SCP) che neghi la creazione o l'aggiornamento degli endpoint con il tipo di autenticazione. ApplicationManaged Usa la chiave lambda:Request/WebFunctionAuthType condition, che riflette il tipo di autenticazione nella richiesta:

Esempio SCP nega gli endpoint pubblici
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateWebFunction", "lambda:CreateWebFunctionEndpoint", "lambda:UpdateWebFunctionEndpoint" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:Request/WebFunctionAuthType": "ApplicationManaged" } } } ] }

La politica include lambda:CreateWebFunction perché quell'operazione crea l'endpoint iniziale da quello della richiesta. endpointConfig Con questa politica in vigore, aws lambda-web deploy fallisce con un errore di accesso negato a meno che lo sviluppatore non lo --auth-type IamAuth aggiunga. Per impostazione predefinita, il comando crea un ApplicationManaged endpoint.

Chiavi di condizione

Per un controllo granulare degli accessi, Lambda supporta le seguenti chiavi di contesto delle condizioni:

  • lambda:Request/WebFunctionAuthType— Il tipo di autenticazione specificato in una richiesta. Disponibile durante CreateWebFunctionCreateWebFunctionEndpoint, eUpdateWebFunctionEndpoint. Si usa per controllare quali tipi di autenticazione possono essere configurati.

  • lambda:Resource/WebFunctionAuthType— Il tipo di autenticazione attualmente configurato su un endpoint, con i valori IamAuth eApplicationManaged. Disponibile duranteInvokeWebFunctionEndpoint, UpdateWebFunctionEndpointDeleteWebFunctionEndpoint, eGetWebFunctionEndpoint. InfattiInvokeWebFunctionEndpoint, Lambda valuta la chiave solo sugli IamAuth endpoint, poiché le richieste agli ApplicationManaged endpoint non sono autorizzate con IAM.

  • aws:ResourceTag/${TagKey}— Filtra l'accesso in base ai tag sulla funzione Web. Gli endpoint e le revisioni ereditano i tag della funzione principale, quindi puoi usare ABAC per controllare l'accesso alle chiamate.

Esempio Consenti l'invoke solo sugli endpoint di una funzione con tag
{ "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" } } } ] }