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à.
Offrire alle funzioni Lambda l'accesso alle risorse in Amazon VPC
Con Amazon Virtual Private Cloud (AmazonVPC), puoi creare reti private nelle tue risorse Account AWS per ospitare risorse come istanze Amazon Elastic Compute Cloud (AmazonEC2), istanze Amazon Relational Database Service (AmazonRDS) e istanze Amazon. ElastiCache Puoi consentire alla tua funzione Lambda di accedere alle risorse ospitate in Amazon VPC collegando la funzione a VPC tramite le sottoreti private che contengono le risorse. Segui le istruzioni nelle sezioni seguenti per collegare una funzione Lambda a un Amazon VPC utilizzando la console Lambda, il AWS Command Line Interface ()AWS CLI o. AWS SAM
Nota
Ogni funzione Lambda viene eseguita all'interno di un VPC sistema di proprietà e gestito dal servizio Lambda. Questi VPCs vengono gestiti automaticamente da Lambda e non sono visibili ai clienti. La configurazione della funzione per accedere ad altre AWS risorse in un Amazon non VPC ha alcun effetto sulla funzione gestita da Lambda all'interno della quale VPC viene eseguita.
Sections
- Autorizzazioni richieste IAM
- Collegare le funzioni Lambda a un Amazon VPC nel tuo Account AWS
- Accesso a Internet se collegato a un VPC
- IPv6supporto
- Le migliori pratiche per l'utilizzo di Lambda con Amazon VPCs
- Comprensione delle interfacce di rete elastiche Hyperplane () ENIs
- Utilizzo dei tasti IAM condizionali per le impostazioni VPC
- Tutorial di VPC
Autorizzazioni richieste IAM
Per collegare una funzione Lambda a un Amazon VPC nel tuo, Account AWS Lambda necessita delle autorizzazioni per creare e gestire le interfacce di rete che utilizza per consentire alla tua funzione di accedere alle risorse di. VPC
Le interfacce di rete create da Lambda sono note come Hyperplane Elastic Network Interfaces o Hyperplane. ENIs Per ulteriori informazioni su queste interfacce di rete, consulta. Comprensione delle interfacce di rete elastiche Hyperplane () ENIs
Puoi concedere alla tua funzione le autorizzazioni necessarie allegando la policy AWS gestita AWSLambdaVPCAccessExecutionRoleal ruolo di esecuzione della funzione. Quando crei una nuova funzione nella console Lambda e la colleghi a, VPC Lambda aggiunge automaticamente questa politica di autorizzazioni per te.
Se preferisci creare una tua politica di IAM autorizzazioni, assicurati di aggiungere tutte le seguenti autorizzazioni:
-
ec2: CreateNetworkInterface
-
ec2: DescribeNetworkInterfaces — Questa azione funziona solo se è consentita su tutte le risorse ()
"Resource": "*"
. -
ec2: DescribeSubnets
-
ec2: DeleteNetworkInterface — Se non specifichi un ID di risorsa per DeleteNetworkInterfaceil ruolo di esecuzione, la tua funzione potrebbe non essere in grado di accedere a. VPC Specificate un ID di risorsa univoco o includete tutte le risorseIDs,
"Resource": "arn:aws:ec2:us-west-2:123456789012:*/*"
ad esempio. -
ec2: AssignPrivateIpAddresses
-
ec2: UnassignPrivateIpAddresses
Nota che il ruolo della tua funzione necessita di queste autorizzazioni solo per creare le interfacce di rete, non per richiamare la tua funzione. Puoi comunque richiamare correttamente la tua funzione quando è collegata a un AmazonVPC, anche se rimuovi queste autorizzazioni dal ruolo di esecuzione della tua funzione.
Per collegare la tua funzione aVPC, Lambda deve anche verificare le risorse di rete utilizzando il tuo ruolo IAM utente. Assicurati che il tuo ruolo utente disponga delle seguenti IAM autorizzazioni:
-
ec2: DescribeSecurityGroups
-
ec2: DescribeSubnets
-
ec2: DescribeVpcs
Nota
Le EC2 autorizzazioni Amazon concesse al ruolo di esecuzione della funzione vengono utilizzate dal servizio Lambda per collegare la funzione a un. VPC Tuttavia, stai anche concedendo implicitamente queste autorizzazioni al codice della tua funzione. Ciò significa che il codice della funzione è in grado di effettuare queste EC2 API chiamate Amazon. Per consigli su come seguire le migliori pratiche di sicurezza, consultaBest practice di sicurezza.
Collegare le funzioni Lambda a un Amazon VPC nel tuo Account AWS
Collega la tua funzione a un Amazon VPC nel tuo Account AWS dispositivo utilizzando la console Lambda, o. AWS CLI AWS SAM Se utilizzi AWS CLI o o AWS SAM colleghi una funzione esistente a una che VPC utilizza la console Lambda, assicurati che il ruolo di esecuzione della funzione disponga delle autorizzazioni necessarie elencate nella sezione precedente.
Le funzioni Lambda non possono connettersi direttamente a una tenancy VPC con istanza dedicata. Per connetterti alle risorse in un ambiente dedicatoVPC, esegui il peer su un secondo VPC con
Accesso a Internet se collegato a un VPC
Per impostazione predefinita, le funzioni Lambda hanno accesso alla rete Internet pubblica. Quando colleghi una funzione aVPC, questa può accedere solo alle risorse disponibili al suo interno. VPC Per consentire alla funzione di accedere a Internet, è inoltre necessario configurare l'accesso VPC a Internet. Per ulteriori informazioni, consulta Abilita l'accesso a Internet per le funzioni VPC Lambda connesse.
IPv6supporto
La tua funzione può connettersi alle risorse in sottoreti dual-stack VPC tramite. IPv6 Per impostazione predefinita, questa opzione è disabilitata. Per consentire il IPv6 traffico in uscita, usa la console o l'--vpc-config Ipv6AllowedForDualStack=true
opzione con la funzione o il comando create-. update-function-configuration
Nota
Per consentire il IPv6 traffico in uscita in aVPC, tutte le sottoreti connesse alla funzione devono essere sottoreti dual-stack. Lambda non supporta IPv6 connessioni in uscita per sottoreti IPv6 -only in aVPC, connessioni in uscita per funzioni che non sono connesse a o IPv6 connessioni in entrata che utilizzano endpoints VPC (). IPv6 VPC AWS PrivateLink
Puoi aggiornare il codice della funzione per connetterti in modo esplicito alle risorse della sottorete. IPv6 Il seguente esempio di Python apre un socket e si connette a un IPv6 server.
Esempio — Connect al IPv6 server
def connect_to_server(event, context): server_address = event['host'] server_port = event['port'] message = event['message'] run_connect_to_server(server_address, server_port, message) def run_connect_to_server(server_address, server_port, message): sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0) try: # Send data sock.connect((server_address, int(server_port), 0, 0)) sock.sendall(message.encode()) BUFF_SIZE = 4096 data = b'' while True: segment = sock.recv(BUFF_SIZE) data += segment # Either 0 or end of data if len(segment) < BUFF_SIZE: break return data finally: sock.close()
Le migliori pratiche per l'utilizzo di Lambda con Amazon VPCs
Per assicurarti che la tua VPC configurazione Lambda soddisfi le linee guida sulle best practice, segui i consigli nelle sezioni seguenti.
Best practice di sicurezza
Per collegare la tua funzione Lambda aVPC, devi assegnare al ruolo di esecuzione della funzione una serie di autorizzazioni AmazonEC2. Queste autorizzazioni sono necessarie per creare le interfacce di rete utilizzate dalla funzione per accedere alle risorse di. VPC Tuttavia, queste autorizzazioni vengono concesse implicitamente anche al codice della funzione. Ciò significa che il codice della funzione è autorizzato a effettuare queste EC2 API chiamate Amazon.
Per seguire il principio dell'accesso con privilegi minimi, aggiungi una politica di negazione come quella riportata nell'esempio seguente al ruolo di esecuzione della tua funzione. Questa politica impedisce alla tua funzione di effettuare chiamate ad Amazon EC2 APIs che il servizio Lambda utilizza per collegare la tua funzione a un. VPC
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface", "ec2:AssignPrivateIpAddresses", "ec2:UnassignPrivateIpAddresses", ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": [ "arn:aws:lambda:us-west-2:123456789012:function:my_function" ] } } } ] }
AWS fornisce gruppi di sicurezza e liste di controllo degli accessi di rete (ACLs) per aumentare la sicurezza del tuoVPC. I gruppi di sicurezza controllano il traffico in entrata e in uscita per le risorse e la rete ACLs controlla il traffico in entrata e in uscita per le sottoreti. I gruppi di sicurezza forniscono un controllo di accesso sufficiente per la maggior parte delle sottoreti. Puoi usare la rete ACLs se desideri un ulteriore livello di sicurezza per il tuo. VPC Per linee guida generali sulle migliori pratiche di sicurezza quando usi AmazonVPCs, consulta le migliori pratiche di sicurezza per te VPC nella Amazon Virtual Private Cloud User Guide.
Best practice sulle prestazioni
Quando colleghi la tua funzione aVPC, Lambda verifica se esiste una risorsa di rete disponibile (HyperplaneENI) a cui può connettersi. Gli iperpiani ENIs sono associati a una particolare combinazione di gruppi di sicurezza e sottoreti. VPC Se hai già collegato una funzione a unaVPC, specificare le stesse sottoreti e gli stessi gruppi di sicurezza quando colleghi un'altra funzione significa che Lambda può condividere le risorse di rete ed evitare la necessità di creare un nuovo Hyperplane. ENI Per ulteriori informazioni su Hyperplane e il relativo ciclo di vitaENIs, consulta. Comprensione delle interfacce di rete elastiche Hyperplane () ENIs
Comprensione delle interfacce di rete elastiche Hyperplane () ENIs
Un Hyperplane ENI è una risorsa gestita che funge da interfaccia di rete tra la funzione Lambda e le risorse a cui si desidera che la funzione si connetta. Il servizio Lambda li crea e li gestisce ENIs automaticamente quando colleghi la funzione a un. VPC
Gli Hyperplane non ENIs sono visibili direttamente all'utente e non è necessario configurarli o gestirli. Tuttavia, sapere come funzionano può aiutarti a comprendere il comportamento della tua funzione quando la colleghi a unVPC.
La prima volta che si collega una funzione a una combinazione VPC utilizzando una particolare sottorete e gruppo di sicurezza, Lambda crea un Hyperplane. ENI Questa combinazione può essere utilizzata anche da altre funzioni dell'account che utilizzano la stessa combinazione di sottorete e gruppo di sicurezza. ENI Ove possibile, Lambda riutilizza le risorse esistenti ENIs per ottimizzare l'utilizzo delle risorse e ridurre al minimo la creazione di nuove. ENIs Ogni Hyperplane ENI supporta fino a 65.000 connessioni/porte. Se il numero di connessioni supera questo limite, Lambda ridimensiona automaticamente il numero in base al traffico ENIs di rete e ai requisiti di concorrenza.
Per le nuove funzioni, mentre Lambda crea un iperpianoENI, la funzione rimane nello stato In sospeso e non è possibile richiamarla. La funzione passa allo stato Attivo solo quando l'Iperplano ENI è pronto, operazione che può richiedere diversi minuti. Per le funzioni esistenti, non è possibile eseguire operazioni aggiuntive mirate alla funzione, come la creazione di versioni o l'aggiornamento del codice della funzione, ma è possibile continuare a richiamare le versioni precedenti della funzione.
Nota
Se una funzione Lambda rimane inattiva per 30 giorni, Lambda recupera qualsiasi iperpiano ENIs inutilizzato e imposta lo stato della funzione su inattivo. Il prossimo tentativo di chiamata avrà esito negativo e la funzione rientrerà nello stato Pending finché Lambda non completerà la creazione o l'allocazione di un Hyperplane. ENI Per ulteriori informazioni sugli stati delle funzioni Lambda, vedere. Stati funzione Lambda
Utilizzo dei tasti IAM condizionali per le impostazioni VPC
Puoi utilizzare chiavi di condizione specifiche per Lambda per le VPC impostazioni per fornire controlli di autorizzazione aggiuntivi per le tue funzioni Lambda. Ad esempio, puoi richiedere che tutte le funzioni dell'organizzazione siano collegate a un. VPC È inoltre possibile specificare le sottoreti e i gruppi di sicurezza che gli utenti della funzione possono e non possono utilizzare.
Lambda supporta le seguenti chiavi di condizione nelle IAM politiche:
-
lambda: VpcIds — Consenti o nega uno o più. VPCs
-
lambda: SubnetIds — Consenti o nega una o più sottoreti.
-
lambda: SecurityGroupIds — Consenti o nega uno o più gruppi di sicurezza.
Le API operazioni Lambda CreateFunctione il UpdateFunctionConfigurationsupporto di queste chiavi di condizione. Per ulteriori informazioni sull'utilizzo delle chiavi di condizione nelle IAM politiche, consulta IAMJSONPolicy Elements: Condition nella Guida per l'IAMutente.
Suggerimento
Se la tua funzione include già una VPC configurazione da una API richiesta precedente, puoi inviare una UpdateFunctionConfiguration
richiesta senza la VPC configurazione.
Politiche di esempio con chiavi di condizione per VPC le impostazioni
Gli esempi seguenti mostrano come utilizzare i tasti di condizione per VPC le impostazioni. Dopo aver creato un'istruzione delle policy con le restrizioni desiderate, aggiungere l'istruzione delle policy per l'utente o il ruolo di destinazione.
Assicuratevi che gli utenti distribuiscano solo funzioni VPC connesse
Per garantire che tutti gli utenti distribuiscano solo funzioni VPC connesse, puoi negare le operazioni di creazione e aggiornamento delle funzioni che non includono un ID valido. VPC
Tieni presente che VPC ID non è un parametro di input per la CreateFunction
richiesta o. UpdateFunctionConfiguration
Lambda recupera il valore VPC ID in base ai parametri della sottorete e del gruppo di sicurezza.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceVPCFunction", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "lambda:VpcIds": "true" } } } ] }
Nega agli utenti l'accesso a sottoreti o gruppi VPCs di sicurezza specifici
Per negare agli utenti l'accesso a informazioni specificheVPCs, usa StringEquals
per verificare il valore della condizione. lambda:VpcIds
Nell'esempio seguente viene negato agli utenti l'accesso a vpc-1
e vpc-2
.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVPC", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }
Per negare agli utenti l'accesso a subnet specifiche, utilizzare StringEquals
per verificare il valore della condizione lambda:SubnetIds
. Nell'esempio seguente viene negato agli utenti l'accesso a subnet-1
e subnet-2
.
{ "Sid": "EnforceOutOfSubnet", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Per negare agli utenti l'accesso a specifici gruppi di sicurezza, utilizzare StringEquals
per verificare il valore della condizione lambda:SecurityGroupIds
. Nell'esempio seguente viene negato agli utenti l'accesso a sg-1
e sg-2
.
{ "Sid": "EnforceOutOfSecurityGroups", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
Consenti agli utenti di creare e aggiornare funzioni con impostazioni specifiche VPC
Per consentire agli utenti di accedere a VPCs informazioni specifiche, utilizza StringEquals
per verificare il valore della lambda:VpcIds
condizione. L'esempio seguente consente agli utenti di accedere a vpc-1
e vpc-2
.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificVpc", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }
Per consentire agli utenti di accedere a sottoreti specifiche, utilizzare StringEquals
per verificare il valore della condizione lambda:SubnetIds
. L'esempio seguente consente agli utenti di accedere a subnet-1
e subnet-2
.
{ "Sid": "EnforceStayInSpecificSubnets", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Per consentire agli utenti di accedere a gruppi di sicurezza specifici, utilizzare StringEquals
per verificare il valore della condizione lambda:SecurityGroupIds
. L'esempio seguente consente agli utenti di accedere a sg-1
e sg-2
.
{ "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
Tutorial di VPC
Nei seguenti tutorial, connetti una funzione Lambda alle risorse del tuo. VPC