

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
<a name="web-functions-endpoint-access-control"></a>

È 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](#web-functions-endpoint-access-control-cloudfront) 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](web-functions-endpoints.md#web-functions-endpoint-create) Per le proprietà che è possibile modificare, vedere[Aggiornamento di un endpoint](web-functions-endpoints.md#web-functions-endpoint-update).

## Utilizzo del tipo di `IamAuth`autenticazione
<a name="web-functions-endpoint-access-control-iam"></a>

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'`MultiRegion`endpoint. 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`

**Example 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 in[CloudFront integrazione](#web-functions-endpoint-access-control-cloudfront), ottieni la politica corrente con`get-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
<a name="web-functions-endpoint-access-control-iam-grant"></a>

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:

**Example 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
<a name="web-functions-endpoint-access-control-signing"></a>

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-SHA256`intestazione, 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` per`X-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. `MultiRegion`gli 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` richiesta`403 Forbidden`, verifica che la richiesta sia firmata con SigV4 (o SigV4A), includa l'`X-Amz-Content-SHA256`intestazione 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)

Dopo aver convalidato la firma SigV4 o SigV4a, Lambda rimuove l'`Authorization`intestazione prima di inoltrare la richiesta alla funzione. Se vuoi che la tua funzione riceva l'`Authorization`intestazione su un `IamAuth` endpoint, invia le richieste, che le firmerà per tuo conto (vedi). CloudFront [CloudFront integrazione](#web-functions-endpoint-access-control-cloudfront)

### CloudFront integrazione
<a name="web-functions-endpoint-access-control-cloudfront"></a>

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'`Authorization`intestazione per firmare la richiesta di origine, quindi può passare l'`Authorization`intestazione alla funzione.

Lambda rimuove qualsiasi `Authorization` valore che sia esso stesso una AWS firma (un valore che inizia con`AWS4-`). 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'`Authorization`intestazione. Per ulteriori informazioni, consulta [Limitazione dell'accesso a un' AWS origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html).

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:

**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/<distribution-id>"
                }
            }
        }
    ]
}
```

## Utilizzo del tipo di `ApplicationManaged`autenticazione
<a name="web-functions-endpoint-access-control-appmanaged"></a>

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'`Authorization`intestazione 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](web-functions-permissions.md#web-functions-permissions-resource-policy).

## Governance e controllo degli accessi
<a name="web-functions-endpoint-access-control-governance"></a>

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/WebFunctionAuthType`si applica a `CreateWebFunction``CreateWebFunctionEndpoint`, e`UpdateWebFunctionEndpoint`. `lambda:Resource/WebFunctionAuthType`si applica a `InvokeWebFunctionEndpoint` (sugli `IamAuth` endpoint), `UpdateWebFunctionEndpoint``GetWebFunctionEndpoint`, e`DeleteWebFunctionEndpoint`. Per informazioni dettagliate, vedi [Chiavi di condizione](#web-functions-endpoint-access-control-condition-keys).

### Limitazione degli endpoint pubblici in un'organizzazione
<a name="web-functions-endpoint-access-control-scp"></a>

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:

**Example 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
<a name="web-functions-endpoint-access-control-condition-keys"></a>

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 `CreateWebFunction``CreateWebFunctionEndpoint`, e`UpdateWebFunctionEndpoint`. 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` e`ApplicationManaged`. Disponibile durante`InvokeWebFunctionEndpoint`, `UpdateWebFunctionEndpoint``DeleteWebFunctionEndpoint`, e`GetWebFunctionEndpoint`. Infatti`InvokeWebFunctionEndpoint`, 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.

**Example 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"
                }
            }
        }
    ]
}
```