Offrire alle funzioni Lambda l'accesso alle risorse in Amazon VPC - 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à.

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.

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 la locazione predefinita.

Lambda console
Per collegare una funzione a un Amazon al VPC momento della creazione
  1. Apri la pagina Funzioni della console Lambda e scegli Crea funzione.

  2. In Informazioni di base, immettere un nome per la funzione in Nome funzione.

  3. Configura VPC le impostazioni per la funzione effettuando le seguenti operazioni:

    1. Espandere Advanced settings (Impostazioni avanzate).

    2. Seleziona Abilita VPC, quindi seleziona l'elemento a VPC cui desideri collegare la funzione.

    3. (Facoltativo) Per consentire il IPv6traffico in uscita, seleziona Consenti il IPv6 traffico per sottoreti dual-stack.

    4. Scegli le sottoreti e i gruppi di sicurezza per cui creare l'interfaccia di rete. Se hai selezionato Consenti il IPv6 traffico per le sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco e un blocco. IPv4 CIDR IPv6 CIDR

      Nota

      Connetti la tua funzione a sottoreti private per accedere alle risorse private. Se la tua funzione richiede l'accesso a Internet, vedi. Abilita l'accesso a Internet per le funzioni VPC Lambda connesse La connessione di una funzione a una sottorete pubblica non fornisce l'accesso a Internet o a un indirizzo IP pubblico.

  4. Scegli Crea funzione.

Per collegare una funzione esistente a un Amazon VPC
  1. Apri la pagina Funzioni della console Lambda e scegli la tua funzione.

  2. Scegli la scheda Configurazione, quindi scegli VPC.

  3. Scegli Modifica.

  4. In VPC, seleziona l'Amazon a VPC cui desideri collegare la tua funzione.

  5. (Facoltativo) Per consentire il IPv6traffico in uscita, seleziona Consenti il IPv6 traffico per sottoreti dual-stack.

  6. Scegli le sottoreti e i gruppi di sicurezza per cui creare l'interfaccia di rete. Se hai selezionato Consenti il IPv6 traffico per le sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco e un blocco. IPv4 CIDR IPv6 CIDR

    Nota

    Connetti la tua funzione a sottoreti private per accedere alle risorse private. Se la tua funzione richiede l'accesso a Internet, vedi. Abilita l'accesso a Internet per le funzioni VPC Lambda connesse La connessione di una funzione a una sottorete pubblica non fornisce l'accesso a Internet o a un indirizzo IP pubblico.

  7. Seleziona Salva.

AWS CLI
Per collegare una funzione a un Amazon al VPC momento della creazione
  • Per creare una funzione Lambda e collegarla aVPC, esegui il comando seguente CLIcreate-function.

    aws lambda create-function --function-name my-function \ --runtime nodejs20.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config Ipv6AllowedForDualStack=true,SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

    Specificate le vostre sottoreti e i vostri gruppi di sicurezza e impostateli su true o Ipv6AllowedForDualStack in false base al vostro caso d'uso.

Per collegare una funzione esistente a un Amazon VPC
  • Per collegare una funzione esistente aVPC, esegui il CLI update-function-configuration comando seguente.

    aws lambda update-function-configuration --function-name my-function \ --vpc-config Ipv6AllowedForDualStack=true, SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb
Per scollegare una funzione da un VPC
  • Per scollegare la funzione da aVPC, esegui il update-function-configuration CLI comando seguente con un elenco vuoto di VPC sottoreti e gruppi di sicurezza.

    aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]
AWS SAM
Per collegare la tua funzione a un VPC
  • Per collegare una funzione Lambda a un AmazonVPC, aggiungi la VpcConfig proprietà alla definizione della funzione come mostrato nel seguente modello di esempio. Per ulteriori informazioni su questa proprietà, vedere AWS: :Lambda: :Function VpcConfig nella Guida per l'AWS CloudFormation utente (la AWS SAM VpcConfig proprietà viene passata direttamente alla VpcConfig proprietà di una AWS CloudFormation AWS::Lambda::Function risorsa).

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: MyFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./lambda_function/ Handler: lambda_function.handler Runtime: python3.12 VpcConfig: SecurityGroupIds: - !Ref MySecurityGroup SubnetIds: - !Ref MySubnet1 - !Ref MySubnet2 Policies: - AWSLambdaVPCAccessExecutionRole MySecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Security group for Lambda function VpcId: !Ref MyVPC MySubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.1.0/24 MySubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC CidrBlock: 10.0.2.0/24 MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16

    Per ulteriori informazioni sulla configurazione del tuo VPC in AWS SAM, consulta AWS:::EC2: VPC nella Guida per l'utente.AWS CloudFormation

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=trueopzione 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