

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
<a name="private-content-restricting-access-to-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions.html) 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](private-content-restricting-access-to-lambda.md)

## Prerequisiti
<a name="oac-prerequisites-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoints.html#web-functions-endpoint-types):
+ Endpoint regionale (`HomeRegion`e 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` Con`IamAuth`, 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoint-access-control.html#web-functions-endpoint-access-control-cloudfront) per gli *AWS Lambda sviluppatori*.
+ **Politica della cache**[: se la tua funzione Web Lambda utilizza l'`Authorization`intestazione del visualizzatore, devi aggiungere l'intestazione alla politica della cache.](controlling-the-cache-key.md) Questo requisito si applica a ogni comportamento della cache che utilizza l'origine. Per `HEAD` le richieste `GET` e, CloudFront rimuove l'`Authorization`intestazione 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)](RequestAndResponseBehaviorCustomOrigin.md#request-custom-headers-behavior).
+ 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'`Host`intestazione contenga il nome di dominio di origine, non il nome di dominio della distribuzione. CloudFront Se l'`Host`intestazione 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, usa`AllViewerExceptHostHeader`, no. `AllViewer` Per ulteriori informazioni, consulta [AllViewerExceptHostHeader](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer-except-host-header).

**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
<a name="oac-permission-to-access-lambda-web"></a>

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.

**Example 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-permissions.html#web-functions-permissions-resource-policy-replication) per gli *AWS Lambda sviluppatori*.

## Creazione del controllo di accesso origine
<a name="create-oac-lambda-web"></a>

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'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Nel pannello di navigazione a sinistra, scegli **Accesso origine**.

1. Scegli **Crea un'impostazione di controllo**.

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

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

   1. 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`

   1. 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](#oac-signing-behavior-lambda-web).

1. 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'indirizzo[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

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

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

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

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

1. 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`

**Example 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html) 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
<a name="oac-signing-behavior-lambda-web"></a>

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'`Authorization`intestazione della richiesta del visualizzatore. Al contrario, CloudFront aggiunge la sua firma in un' CloudFront intestazione dedicata e passa l'intestazione del visualizzatore all'`Authorization`origine senza modifiche. Con questo comportamento, la tua funzione Web Lambda può ricevere l'`Authorization`intestazione 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'`Authorization`intestazione del visualizzatore, è necessario aggiungerla a una [politica di cache](controlling-the-cache-key.md) per ogni comportamento della cache che utilizza l'origine.

Gli altri comportamenti di firma (`always``never`, e`no-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.

Per`PUT`, 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-sha256`intestazione nelle richieste di. CloudFront Se uno spettatore ne invia una, CloudFront non la usa quando firma la richiesta di origine.