View a markdown version of this page

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

Rete

È possibile configurare l'accesso alla rete per le AWS Lambda microVM associando le risorse di Network Connector alla microVM in fase di esecuzione. I connettori di rete vengono specificati quando si chiama run-microvm e non possono essere modificati mentre una microVM è in esecuzione.

Panoramica di

Ogni microVM può avere configurazioni di rete in ingresso (in entrata) e in uscita (in uscita) indipendenti:

  • I connettori di rete in ingresso consentono la connettività in entrata. I client si connettono a un endpoint HTTPS gestito dal servizio e Lambda inoltra il traffico alle porte configurate all'interno della MicroVM. I connettori di ingresso sono AWS gestiti: vi si fa riferimento tramite ARN quando si esegue una microVM.

  • I connettori di rete in uscita abilitano il traffico in uscita. Per impostazione predefinita, le microVM dispongono di un accesso pubblico a Internet. Puoi invece creare un connettore di uscita VPC gestito dal cliente per indirizzare il traffico in uscita attraverso il tuo VPC.

Un singolo connettore può essere riutilizzato su più microVM: questo è il modello di utilizzo previsto.

Connettività in entrata

Ogni microVM Lambda è raggiungibile tramite un URL di endpoint HTTPS univoco, assegnato durante la chiamata. run-microvm I client inviano richieste a questo endpoint tramite HTTPS. Lambda indirizza ogni richiesta verso una porta all'interno della tua microVM, dove l'applicazione la riceve.

Per impostazione predefinita, le richieste ricevute sull'endpoint vengono indirizzate alla porta 8080 all'interno della microVM. Per effettuare il routing verso una porta diversa, vedi. Routing delle porte

I seguenti protocolli sono supportati sull'endpoint in entrata:

  • HTTP/1.1

  • HTTP/2

  • WebSockets

  • gRPC

  • Server-Sent Eventi (SSE)

Nota

Il traffico tra il client e l'endpoint MicroVM è sempre crittografato con TLS. L'applicazione può soddisfare internamente le richieste tramite HTTP o HTTPS.

Routing delle porte

Lambda seleziona la porta di destinazione all'interno della tua microVM utilizzando il seguente ordine di priorità:

  1. X-aws-proxy-portheader — Per le richieste HTTP standard, includi questa intestazione con il numero di porta di destinazione.

  2. WebSocket subprotocol: se il WebSocket client non è in grado di impostare intestazioni personalizzate, specifica la porta di destinazione come sottoprotocollo denominatolambda-microvms.port.N, dov'è N il numero di porta. Fornisci dei sottoprotocolli quando apri la connessione. WebSocket Per un esempio, consulta Protocolli.

  3. Predefinito (8080): se non viene specificato nessuno dei due, le richieste vengono indirizzate alla porta 8080.

Importante

La porta di destinazione deve rientrare in quella allowedPorts definita nel token di autenticazione. Le richieste verso porte non autorizzate ricevono una risposta 403 Forbidden.

Autenticazione

Tutte le richieste a un endpoint MicroVM richiedono un token di autenticazione valido nell'intestazione. X-aws-proxy-auth I token vengono generati utilizzando. create-microvm-auth-token Ogni token è una stringa JWE (JSON Web Encryption) crittografata destinata a:

  • Una microVM specifica (identificata da un ID).

  • Un insieme di porte consentite (porta singola, intervallo o tutte le porte).

  • Un orario di scadenza (configurato al momento della creazione del token).

L'esempio seguente crea un token e lo utilizza per inviare una richiesta autenticata:

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"port":8080}]'
curl 'https://microvm-endpoint' \ -H 'X-aws-proxy-auth: TOKEN' \ -H 'X-aws-proxy-port: 8080'

Per una procedura dettagliata sulla creazione di token e sulla connessione a una microVM, comprese le connessioni, vedere. WebSocket Connessione a una microVM

Risposte agli errori

I seguenti codici di stato HTTP vengono restituiti dall'endpoint MicroVM quando non è in grado di elaborare o recapitare una richiesta all'applicazione. Queste risposte provengono dall'endpoint, non dall'applicazione.

Codice Stato Causa e risoluzione
400 Richiesta non valida Richiesta non valida o intestazione di porta o sottoprotocollo non valido. WebSocket Verifica il formato.
403 Accesso negato Token mancante, scaduto o non valido; oppure la porta richiesta non è inclusa nel token. allowedPorts Genera un nuovo token o usa una porta consentita.
429 Troppe richieste Limite di velocità superato (a livello di account o per microVM). Riprova con backoff esponenziale.
500 Errore interno del server Si è verificato un errore interno. Riprova la richiesta .
502 Gateway non valido L'applicazione non risponde o il ripristino automatico non è riuscito entro il numero massimo di tentativi di nuovo tentativo. Consulta Auto-resume.

Intestazioni della richiesta

Lo spazio dei nomi dell'X-aws-proxy-*intestazione è riservato da Lambda ai metadati della richiesta, come il token di autenticazione () e la porta di destinazione (X-aws-proxy-auth). X-aws-proxy-port Lambda rimuove le X-aws-proxy-* intestazioni prima di inoltrare la richiesta all'applicazione.

Request/response larghezza di banda

Ogni microVM Lambda ha una request/response larghezza di banda scalabile linearmente in base alle sue dimensioni. Questa larghezza di banda si applica a tutto il traffico attraverso l'endpoint MicroVM, sia per le richieste in entrata che per le risposte in uscita.

Dimensione microVM (linea di base) Larghezza di banda massima
0,5 GB, 0,25 vCPU 1 MB/s (8 Mbps)
1 GB, 0,5 vCPU 2 MB/s (16 Mbps)
2 GB, 1 vCPU 4 MB/s (32 Mbps)
4 GB, 2 vCPU 8 MB/s (64 Mbps)
8 GB, 4 vCPU 16 MB/s (128 Mbps)

Se riscontri una maggiore latenza delle richieste a causa della saturazione della rete, riduci la concomitanza della richiesta o le dimensioni del payload oppure seleziona una dimensione microVM più grande per aumentare la larghezza di banda disponibile.

HTTP/2 supporto

Lambda MicroVMS supporta l'endpoint HTTP/2 in ingresso. Lambda negozia il protocollo tramite ALPN (Application-Layer Protocol Negotiation) durante l'handshake TLS, preferendo e ricorrendo a. HTTP/2 HTTP/1.1 Un client lo utilizza automaticamente. HTTP/2-capable

Da utilizzare HTTP/2 tra l'endpoint e l'applicazione all'interno della microVM:

  • La tua applicazione supporta TLS: Lambda HTTP/2 negozia con la tua applicazione tramite ALPN, ricorrendo HTTP/1.1 a HTTP/2 se non è supportato.

  • L'applicazione utilizza HTTP in chiaro: includi l'X-aws-proxy-force-h2: trueintestazione nella richiesta da utilizzare HTTP/2 nella connessione all'applicazione.

Connettività in uscita

Per impostazione predefinita, le microVM Lambda dispongono di accesso pubblico a Internet sul percorso di uscita. Per connettere le microVM alle risorse dei tuoi VPC privati, come RDS ElastiCache, API interne e sistemi locali tramite Direct Connect o VPN, crea un connettore di rete Lambda con la tua configurazione VPC.

Quando si utilizza l'uscita del VPC, il traffico in uscita è soggetto alle regole dei gruppi di sicurezza e agli ACL di rete che regolano il traffico nel VPC.

Utilizzo dei connettori di rete in uscita

I connettori di rete in uscita instradano il traffico in uscita dalla microVM attraverso il VPC. Si crea un connettore una volta, quindi si fa riferimento ad esso tramite ARN all'avvio di MicroVMS tramite il comando. run-microvm

Prerequisiti

Prima di creare un connettore di rete, è necessario un ruolo IAM che consenta a Lambda di creare interfacce di rete elastiche (ENI) nel tuo VPC. Il ruolo richiede le seguenti autorizzazioni:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }

Creazione di un connettore di rete

Crea un connettore specificando le sottoreti VPC, i gruppi di sicurezza e il protocollo di rete (oppure): IPv4 DualStack

aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": ["subnet-xxx"], "SecurityGroupIds": ["sg-xxx"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["MicroVm"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole

Stati dei connettori di rete

Un connettore deve essere in ACTIVE uno stato prima di potervi fare riferimentorun-microvm.

Stato Description
PENDING Il connettore è in fase di creazione (è in corso il provisioning degli ENI sottostanti).
ACTIVE Il connettore è pronto per l'uso.
INACTIVE Il connettore è temporaneamente inattivo.
FAILED Il provisioning o l'aggiornamento non sono riusciti. Controlla StateReason.
DELETING Il connettore è in fase di eliminazione; gli ENI sono in corso di pulizia.
DELETE_FAILED Eliminazione non riuscita.

Controllo delle versioni dei connettori di rete

Il controllo delle versioni si applica ai connettori di rete in uscita VPC (tipo di connettore). VPC_EGRESS Un connettore di uscita VPC è dotato di una versione: ogni update-network-connector chiamata riuscita crea una nuova versione e le versioni precedenti rimangono disponibili.

Quando si esegue una microVM, si fa riferimento a un connettore di uscita VPC tramite ARN in. --egress-network-connectors È possibile utilizzare entrambi i moduli:

  • ARN non qualificato: passa alla versione più recente del connettore. Una microVM rileva automaticamente le modifiche alla configurazione. arn:aws:lambda:us-east-1:123456789012:network-connector:nc-id

  • ARN qualificato: collega la microVM a una versione specifica. Usalo per mantenere una MicroVM su una configurazione nota per il test, la risoluzione dei problemi o il rollback. arn:aws:lambda:us-east-1:123456789012:network-connector:nc-id:version-number

Una microVM passa a una nuova versione solo quando si modifica l'ARN a cui fa riferimento, in modo da poter adottare nuove versioni secondo la propria pianificazione.

Esempio di run-microvm chiamata che fissa una versione specifica del connettore:

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectors arn:aws:lambda:us-east-1:123456789012:network-connector:nc-id:version-number \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'

Esecuzione di una microVM con un connettore di rete

Fai riferimento all'ARN del connettore durante l'esecuzione di una microVM:

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectors connector-arn \ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
Nota

Prima di aggiornare o eliminare un connettore, assicurati che tutte le microVM che lo utilizzano siano terminate. La modifica di un connettore che è attivamente in uso può causare problemi di connettività di rete per l'esecuzione di MicroVMS.

Puoi utilizzarla AWS PrivateLink per la connettività privata sulla AWS rete tra le tue risorse VPC e le microVM Lambda, senza attraversare la rete Internet pubblica. MicroVMS supporta due endpoint VPC, a seconda della destinazione del traffico desiderata:

  • API di gestione MicroVM (creazione di immagini, esecuzione, sospensione, terminazione): utilizzano l'endpoint VPC Lambda esistente (). com.amazonaws.region.lambda

  • Connettività a MicroVMS (traffico HTTPS verso le applicazioni in esecuzione): utilizza un endpoint separato (). com.amazonaws.region.lambda-microvm

Lambda MicroVMS condivide lo stesso servizio di endpoint VPC di Lambda (). com.amazonaws.region.lambda Per istruzioni complete, consulta Creazione di un endpoint di interfaccia per Lambda.

Per controllare chi può utilizzare l'endpoint di interfaccia e quali azioni dell'API Lambda MicroVMS può eseguire, allega una policy per gli endpoint. La policy specifica il principale che può eseguire azioni, le azioni che può eseguire e le risorse su cui può agire. Le azioni Lambda MicroVMS utilizzano il prefisso di azione IAM. lambda:

Per ulteriori informazioni, consulta Controllo degli accessi ai servizi con endpoint VPC nella Guida per l’utente di Amazon VPC.

La seguente policy di esempio consente all'utente di MyUser elencare e ottenere immagini MicroVM tramite l'endpoint:

{ "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect": "Allow", "Action": [ "lambda:ListMicrovmImages", "lambda:GetMicrovmImage" ], "Resource": "*" } ] }

Per mantenere privato il traffico HTTPS sulle tue microVMS in esecuzione, crea un endpoint di interfaccia per il servizio. com.amazonaws.region.lambda-microvm Questo endpoint gestisce le connessioni agli URL degli endpoint MicroVM (ad esempio,). abc123def456.lambda-microvm.us-east-1.on.aws

Per ulteriori informazioni sulle proprietà degli endpoint dell'interfaccia, consulta la guida agli endpoint dell'interfaccia nella documentazione di Amazon VPC.

Per creare un endpoint di interfaccia per la connettività microVM (console)

  1. Aprire la pagina Endpoint della console Amazon VPC.

  2. Seleziona Crea endpoint.

  3. In Categoria del servizio, assicurati che sia selezionato Servizi di AWS .

  4. Per Service Name (Nome del servizio), selezionare com.amazonaws.region.lambda-microvm. Verificare che il tipo sia Interface.

  5. Creazione di un VPC e delle sottoreti

  6. Per abilitare il DNS privato per l'endpoint dell'interfaccia, seleziona la casella di controllo Abilita nome DNS (consigliato). Ciò garantisce che le richieste che utilizzano il nome host pubblico dell'endpoint MicroVM vengano risolte automaticamente sull'endpoint dell'interfaccia, senza che siano necessarie modifiche lato client.

  7. Per gruppo di sicurezza, scegliere uno o più gruppi di sicurezza. Il gruppo di sicurezza deve consentire il traffico TCP in uscita sulla porta 443 verso le interfacce di rete degli endpoint.

  8. Seleziona Crea endpoint.

Per utilizzare l'opzione DNS privato, devi impostare enableDnsSupport gli attributi enableDnsHostnames e del tuo VPC. Per ulteriori informazioni, consulta Visualizzazione e aggiornamento del supporto DNS per il VPC nella Guida per l'utente di Amazon VPC.

Per creare un endpoint di interfaccia per la connettività microVM (CLI)AWS

aws ec2 create-vpc-endpoint \ --vpc-id vpc-ec43eb89 \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.lambda-microvm \ --subnet-id subnet-abababab \ --security-group-id sg-1a2b3c4d \ --private-dns-enabled

Per verificare che l'endpoint sia disponibile e che il DNS privato sia attivo:

aws ec2 describe-vpc-endpoints \ --vpc-endpoint-ids vpce-1a2b3c4d5e6f7g8h9 \ --query 'VpcEndpoints[0].{State:State,PrivateDns:PrivateDnsEnabled,Dns:DnsEntries[*].DnsName}'

Quando il DNS privato è abilitato: l'endpoint gestisce la risoluzione DNS all'interno del *.lambda-microvm.region.on.aws tuo VPC. I nomi host degli endpoint MicroVM esistenti (ad esempioabc123def456.lambda-microvm.us-east-1.on.aws) vengono risolti negli indirizzi IP privati delle interfacce di rete degli endpoint. Non è richiesta alcuna modifica del client.

Quando il DNS privato è disabilitato, Amazon VPC genera un nome DNS specifico per l'endpoint nel modulo. vpce-id-hash.lambda-microvm.region.vpce.amazonaws.com Per indirizzare il traffico attraverso questo endpoint pur continuando a raggiungere la microVM corretta, devi conservare il nome host MicroVM originale in due posizioni:

  • TLS Server Name Indication (SNI): l'handshake TLS utilizza questo valore per identificare a quale microVM è destinata la connessione.

  • Intestazione HTTP Host: il proxy utilizza questo valore per indirizzare la richiesta alla microVM corretta.

Se uno dei due valori è impostato sul nome host dell'endpoint VPC anziché sul nome host MicroVM, la connessione non può essere instradata alla MicroVM corretta.

Esempio: Connect tramite un nome DNS specifico dell'endpoint

L'esempio seguente utilizza curl con il --connect-to flag per reindirizzare la connessione TCP all'endpoint VPC mantenendo il nome host MicroVM nell'URL, SNI e nell'intestazione Host:

ENDPOINT_HOST=abc123def456.lambda-microvm.us-east-1.on.aws VPCE_HOST=vpce-0a1b2c3d4e5f67890-a1b2c3d4.lambda-microvm.us-east-1.vpce.amazonaws.com curl --connect-to "$ENDPOINT_HOST:443:$VPCE_HOST:443" \ -H "x-aws-proxy-auth: $MICROVM_AUTH_TOKEN" \ -H "x-aws-proxy-port: 8080" \ "https://$ENDPOINT_HOST/"

Il --connect-to flag indica a curl di aprire la connessione TCP all'indirizzo dell'endpoint VPC, mentre l'URL, il TLS SNI e l'intestazione Host rimangono impostati sul nome host MicroVM.

Per ulteriori informazioni, consultare Accesso a un servizio tramite un endpoint di interfaccia in Guida per l'utente di Amazon VPC.

È possibile allegare una policy sugli endpoint per controllare quali microVM sono raggiungibili tramite l'endpoint VPC. lambda-microvm Una policy sugli endpoint sul lambda-microvm servizio consente di definire le connessioni a account o organizzazioni specifici. Per impostazione predefinita, l'endpoint consente le connessioni a microVMS in qualsiasi account. AWS (Nota: il client che stabilisce la connessione deve ancora disporre di un token di autenticazione MicroVM valido per ottenere l'accesso).

Per impostazione predefinita, un endpoint VPC ha una politica di accesso completo che consente tutto il traffico. Quando si sostituisce la policy predefinita con una policy personalizzata, Lambda MicroVMS valuta tale policy rispetto all'lambda:ConnectMicrovmazione su ogni connessione effettuata tramite l'endpoint. Se la policy non consente la connessione a microVMS, la connessione viene rifiutata con una risposta HTTP 403 Forbidden. Una politica che non concede lambda:ConnectMicrovm nega tutte le connessioni attraverso l'endpoint.

Nota

L'lambda:ConnectMicrovmazione autorizza una connessione a un endpoint MicroVM tramite l'endpoint di interfaccia. Non è un'operazione API Lambda e non può essere utilizzata nelle policy IAM basate sull'identità o sulle risorse: è valida solo in una policy degli endpoint VPC.

Principal e risorsa

Le connessioni a un endpoint MicroVM vengono autenticate con un token di autenticazione MicroVM anziché con Signature Version 4. AWS Per questo motivo, nessun principale IAM è associato alla connessione. Invece, Lambda MicroVMS valuta la policy degli endpoint con un principale anonimo. Ciò significa che:

  • Principal deve essere "*". Una policy che nomina un principale specifico non corrisponde a nulla e nega ogni connessione.

  • Le chiavi di condizione che dipendono dall'identità del richiedente (ad esempio aws:PrincipalArnaws:PrincipalOrgID, eaws:userid) non sono compilate e non corrisponderanno.

  • Resourcedeve esserlo anche. "*" Lambda MicroVMS non analizza la valutazione delle policy degli endpoint sui singoli ARN di risorse MicroVM. Per limitare le microVM raggiungibili dall'endpoint, usa la chiave di condizione anziché l'elemento. aws:ResourceAccount Resource

Chiavi di condizione supportate

Chiave di condizione Description
aws:ResourceAccount L' AWS account proprietario della microVM a cui si sta effettuando la connessione.
aws:ResourceOrgID L'ID dell'organizzazione AWS Organizations dell'account che possiede la microVM.
aws:SourceVpce L'ID dell'endpoint di interfaccia attraversato dalla connessione.
aws:SourceVpc L'ID del VPC da cui ha avuto origine la connessione.
aws:VpcSourceIp L'indirizzo IP privato del client che ha effettuato la connessione.

Esempio: consenti le connessioni solo a microVMS nel tuo account

La seguente politica sugli endpoint consente le connessioni tramite l'endpoint solo a microVM di proprietà dell'account 111122223333. Le connessioni a microVM di proprietà di qualsiasi altro account vengono negate.

{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": "lambda:ConnectMicrovm", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }