View a markdown version of this page

Limita l'accesso a un AWS Lambda Origine della funzione Web - Amazon CloudFront

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à.

Limita l'accesso a un AWS Lambda Origine della funzione Web

Puoi utilizzare Origin Access Control (OAC) per limitare l'accesso a un'origine di AWS Lambda Web Function. Una funzione Web Lambda fornisce il proprio endpoint HTTPS regionale o globale, che viene utilizzato come dominio di origine per la distribuzione. CloudFront Per ulteriori informazioni su Lambda Web Functions, consulta AWS Lambda Web Functions nella AWS Lambda Developer Guide.

Nota

OAC con Lambda Web Functions non è supportato per gli endpoint globali che includono regioni opt-in. Se l'endpoint indirizza una richiesta a una regione opt-in, CloudFront non può firmare la richiesta per quella regione. L'origine restituisce quindi un errore HTTP 403 (Forbidden). Tutte le regioni associate all'endpoint globale devono essere regioni abilitate per impostazione predefinita.

Per informazioni sull'utilizzo di OAC con l'origine dell'URL di una funzione Lambda, vedere. Limita l'accesso a un AWS Lambda origine dell'URL della funzione

Prerequisiti

Prima di creare e configurare OAC, è necessario disporre di una CloudFront distribuzione con una funzione Web Lambda come origine. Il nome di dominio di origine è il nome host dell'endpoint della funzione Web Lambda. CloudFront identifica il tipo di endpoint dal nome host:

  • Endpoint regionale (HomeRegione tipi di PerRegion endpoint): il nome host termina con .lambda-web.AWS-Region.on.aws

  • Endpoint globale (tipo di MultiRegion endpoint): il nome host termina con .lambda-web.global.on.aws

La configurazione deve inoltre soddisfare i seguenti requisiti:

  • Tipo di autenticazione dell'endpoint: il tipo di autenticazione dell'endpoint deve essere. IamAuth ConIamAuth, l'endpoint utilizza AWS Identity and Access Management (IAM) per autenticare e autorizzare le richieste. Per le richieste provenienti da CloudFront, l'autorizzazione si basa sulla politica basata sulle risorse di Lambda Web Function. CloudFront firma le richieste per conto del visualizzatore e l'endpoint convalida la firma. Per ulteriori informazioni, consulta CloudFront l'integrazione nella Guida per gli AWS Lambda sviluppatori.

  • Politica della cache: se la tua funzione Web Lambda utilizza l'Authorizationintestazione del visualizzatore, devi aggiungere l'intestazione alla politica della cache. Questo requisito si applica a ogni comportamento della cache che utilizza l'origine. Per HEAD le richieste GET e, CloudFront rimuove l'Authorizationintestazione prima di inoltrare la richiesta, a meno che l'intestazione non sia inclusa nella politica della cache. Per ulteriori informazioni, consulta Intestazioni e CloudFront comportamento delle richieste HTTP (origini personalizzate e Amazon S3).

  • Politica di richiesta di origine: utilizza una politica di richiesta di origine che escluda l'intestazione del visualizzatore. Host Gli endpoint di Lambda Web Function si aspettano che l'Hostintestazione contenga il nome di dominio di origine, non il nome di dominio della distribuzione. CloudFront Se l'Hostintestazione contiene il nome di dominio della distribuzione, l'endpoint restituisce un errore HTTP 404 (Not Found). Se utilizzi una policy di richiesta di origine gestita, usaAllViewerExceptHostHeader, no. AllViewer Per ulteriori informazioni, consulta AllViewerExceptHostHeader.

Nota

I trigger di richiesta di origine Lambda @Edge e origin response non sono supportati nei comportamenti della cache che utilizzano un'origine di Lambda Web Function con OAC. Questo vale per gli endpoint regionali e globali e per le origini a cui si accede direttamente o tramite un gruppo di origine. CloudFront rifiuta una configurazione di distribuzione che li contiene entrambi.

Concedi CloudFront l'autorizzazione per accedere alla funzione Web Lambda

Allega una policy basata sulle risorse alla funzione Web Lambda che consente al CloudFront service principal (cloudfront.amazonaws.com) di richiamare l'endpoint. L'azione IAM per richiamare un endpoint è. lambda:InvokeWebFunctionEndpoint La policy è allegata alla funzione Web Lambda, ma ogni istruzione può riferirsi Resource a un ARN di endpoint specifico. Utilizza un Condition elemento per consentire l'accesso CloudFront all'endpoint solo quando la richiesta è per conto della CloudFront distribuzione che contiene l'origine.

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/EDFDVBD6EXAMPLE" } } } ] }

Per allegare la policy basata sulle risorse, usa il put-resource-policy comando con la funzione ARN (non un endpoint 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

È possibile rivedere o rimuovere la politica con i comandi and. get-resource-policy delete-resource-policy

Nota

Per gli endpoint che si estendono su più di una regione, Lambda replica le modifiche alle policy in tutte le regioni che servono l'endpoint. L'entrata in vigore di una policy nuova o aggiornata può richiedere poco tempo per diventare effettiva in ogni regione. Per ulteriori informazioni, consulta Replica ed eventuale coerenza nella Guida per gli AWS Lambda sviluppatori.

Creazione del controllo di accesso origine

Per creare un controllo di accesso all'origine (OAC), puoi utilizzare l' Console di gestione AWS, CloudFormation AWS CLI, o l'API. CloudFront

Console
Per creare un controllo di accesso all'origine
  1. Accedi Console di gestione AWS e apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Nel pannello di navigazione a sinistra, scegli Accesso origine.

  3. Scegli Crea un'impostazione di controllo.

  4. Nel modulo Crea un'impostazione di controllo, effettua le seguenti operazioni:

    1. Nel riquadro Dettagli, inserisci un Nome e (facoltativamente) una Descrizione per il controllo degli accessi all'origine.

    2. Scegli Lambda dal menu a discesa del tipo di origine. Questo tipo di origine viene utilizzato sia per gli URL delle funzioni Lambda che per le funzioni Web Lambda.

    3. Se l'origine è un endpoint globale (il nome host termina con.lambda-web.global.on.aws), seleziona l'opzione Usa il protocollo di firma SigV4a. Per un endpoint regionale (il nome host termina con), lascia deselezionata questa opzione. .lambda-web.AWS-Region.on.aws

    4. Per il comportamento di firma, scegli Firma sempre, conserva l'autorizzazione dello spettatore. Questa opzione viene visualizzata in Richieste di firma (scelta consigliata), selezionata per impostazione predefinita. Le origini di Lambda Web Function supportano solo questo comportamento di firma. Per ulteriori informazioni, consulta Comportamento della firma.

  5. Scegli Crea.

Per aggiungere un controllo di accesso all'origine a un'origine di Lambda Web Function in una distribuzione
  1. Apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Scegli una distribuzione con un'origine Lambda Web Function a cui desideri aggiungere l'OAC, quindi scegli la scheda Origini.

  3. Seleziona l'origine della funzione Web Lambda a cui desideri aggiungere l'OAC, quindi scegli Modifica.

  4. Per Accesso origine, scegli Impostazioni di controllo di accesso origine (consigliato).

  5. Nel menu a discesa Controllo degli accessi origine, scegliere l'OAC che desideri utilizzare.

  6. Scegli Save changes (Salva modifiche).

La distribuzione inizia a essere distribuita in tutte le edge location. CloudFront Quando una edge location riceve la nuova configurazione, firma tutte le richieste inviate all'origine della funzione Web Lambda.

CLI

Utilizza il comando create-origin-access-control. Per un endpoint regionale (il nome host termina con.lambda-web.AWS-Region.on.aws), usa il sigv4 protocollo di firma:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-oac", "Description": "OAC for Lambda Web Function origin", "SigningProtocol": "sigv4", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'

Per un endpoint globale (il nome host termina con.lambda-web.global.on.aws), usa il protocollo di firma: sigv4a

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-global-oac", "Description": "OAC for global Lambda Web Function origin", "SigningProtocol": "sigv4a", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'
CloudFormation

Specificate i seguenti valori in: OriginAccessControlConfig

  • SigningProtocol: sigv4 (endpoint regionale) o sigv4a (endpoint globale)

  • SigningBehavior: always-amz-auth

  • OriginAccessControlOriginType: lambda

Esempio CloudFormation modello
Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: my-lambda-web-oac OriginAccessControlOriginType: lambda SigningBehavior: always-amz-auth SigningProtocol: sigv4a

Per ulteriori informazioni, vedere AWS::CloudFront: OriginAccessControl nella Guida per l'AWS CloudFormation utente.

L'OAC ha effetto per ogni richiesta solo al termine della distribuzione. Per un endpoint che si estende su più di una regione, la policy basata sulle risorse allegata in precedenza deve inoltre completare la replica in ogni regione che serve l'endpoint. Fino al completamento di entrambe le richieste, alcune richieste possono ricevere una risposta HTTP 403 transitoria dall'origine. Questi errori si risolvono automaticamente al termine della distribuzione e della replica della policy.

Comportamento della firma

Le origini di Lambda Web Function supportano solo il comportamento di always-amz-auth firma (firma sempre, conserva l'autorizzazione del visualizzatore nella console). CloudFront firma sempre tutte le richieste che invia alla funzione Web Lambda, ma non sostituisce l'Authorizationintestazione della richiesta del visualizzatore. Al contrario, CloudFront aggiunge la sua firma in un' CloudFront intestazione dedicata e passa l'intestazione del visualizzatore all'Authorizationorigine senza modifiche. Con questo comportamento, la tua funzione Web Lambda può ricevere l'Authorizationintestazione originale del visualizzatore (ad esempio, per eseguire la propria autenticazione o autorizzazione). CloudFront continua a firmare ogni richiesta che invia all'origine. Per inoltrare l'Authorizationintestazione del visualizzatore, è necessario aggiungerla a una politica di cache per ogni comportamento della cache che utilizza l'origine.

Gli altri comportamenti di firma (alwaysnever, eno-override) non sono supportati per le origini di Lambda Web Function. Il comportamento di always-amz-auth firma non è supportato per nessun altro tipo di origine, incluse le origini degli URL della funzione Lambda.

PerPUT, and POST PATCH requests, CloudFront firma la richiesta di origine con un payload () non firmato. UNSIGNED-PAYLOAD Il corpo della richiesta non è coperto dalla CloudFront firma. La firma copre ancora il metodo di richiesta, il percorso, la stringa di query e le intestazioni che identificano la distribuzione. L'endpoint può quindi verificare che ogni richiesta provenga per CloudFront conto della distribuzione prima di richiamare la funzione Web Lambda. Il corpo della richiesta è protetto in transito dalla connessione HTTPS tra CloudFront e l'endpoint. Non è necessario includere un'x-amz-content-sha256intestazione nelle richieste di. CloudFront Se uno spettatore ne invia una, CloudFront non la usa quando firma la richiesta di origine.