Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conexión de redes salientes a los recursos de una VPC
Puede configurar una función de Lambda para conectarse a subredes privadas en una nube virtual privada (VPC) de su cuenta de AWS. Utilice Amazon Virtual Private Cloud (Amazon VPC) para crear una red privada para recursos como bases de datos, instancias de caché o servicios internos. Conecte su función a la VPC para acceder a recursos privados mientras la función se está ejecutando. En esta sección se proporciona un resumen de las conexiones de VPC de Lambda. Para obtener más información sobre las redes de VPC en Lambda, consulte Redes privadas con VPC.
sugerencia
Para configurar la función de Lambda para acceder a una VPC y a una subred, puede utilizar la consola o la API de Lambda.
Consulte la VpcConfig
sección CreateFunctionpara configurar su función. Consulte Configuración del acceso mediante VPC (consola) y Configuración del acceso mediante VPC (API) para conocer los pasos detallados.
Cuando conecta una función a una VPC, Lambda asigna su función a un ENI de hiperplano (interfaz de red elástica) para cada subred en la configuración de VPC de la función. Lambda crea un ENI de hiperplano la primera vez que se define una combinación única de subred y grupo de seguridad para una función habilitada para VPC en una cuenta.
Mientras Lambda crea un ENI de hiperplano, no se pueden realizar operaciones adicionales que se dirijan a la función, como creación de versiones o actualización del código de la función. Para nuevas funciones, no se puede invocar la función hasta que su estado cambie de Pending
a Active
. Para las funciones existentes, todavía puede invocar la versión anterior mientras la actualización está en curso. Para más detalles acerca del ciclo de vida de un ENI de hiperplano, consulte ENI de hiperplano de Lambda.
Las funciones Lambda no pueden conectarse directamente a una VPC con tenencia de instancias dedicada. Para conectarse a los recursos de una VPC dedicada, interconéctela con una segunda VPC con tenencia predeterminada
Secciones
- Administración de conexiones de VPC
- Permisos de usuario y rol de ejecución
- Configuración del acceso mediante VPC (consola)
- Configuración del acceso mediante VPC (API)
- Uso de claves de condición de IAM para la configuración de la VPC
- Acceso a Internet y a los servicios para funciones conectadas a la VPC
- Tutoriales de VPC
- Ejemplos de configuraciones de VPC
Administración de conexiones de VPC
Varias funciones de pueden compartir una interfaz de red, si dichas funciones comparten la misma subred y grupo de seguridad. Conectar funciones adicionales a la misma configuración de VPC (subred y grupo de seguridad) que tiene una interfaz de red administrada por Lambda existente es mucho más rápido que hacer crear interfaces de red adicionales.
Si las funciones no están activas durante un largo periodo de tiempo, Lambda reclama las interfaces de red y las funciones pasan a ser Idle
. Para reactivar una función inactiva, invóquela. Esta invocación produce un error y la función vuelve a encontrarse en un estado Pending
hasta que esté disponible una interfaz de red.
Si actualiza la función para acceder a una VPC diferente, se finaliza la conectividad del ENI de hiperplano a la VPC anterior. El proceso de actualización de la conectividad a una nueva VPC puede demorar varios minutos. Durante este tiempo, Lambda conecta las invocaciones de funciones a la VPC anterior. Una vez que haya finalizado la actualización, las nuevas invocaciones comienzan a utilizar la nueva VPC, y la función de Lambda deja de estar conectada a la VPC anterior.
En el caso de las operaciones de corta duración, como las consultas de DynamoDB, la sobrecarga en latencia de la configuración de una conexión TCP puede ser mayor que la propia operación. Para garantizar la reutilización de la conexión para funciones de corta duración o invocadas con poca frecuencia, le recomendamos que utilice keep-alive de TCP para las conexiones que se crearon durante la inicialización de la función, para evitar crear nuevas conexiones para invocaciones posteriores. Para obtener más información sobre la reutilización de conexiones mediante keep-alive, consulte Documentación de Lambda sobre la reutilización de conexiones.
Permisos de usuario y rol de ejecución
Lambda utiliza los permisos de la función para crear y administrar interfaces de red. Para conectarse a una VPC, el rol de ejecución de la función debe tener los siguientes permisos:
Permisos de rol de ejecución
-
ec2: CreateNetworkInterface
-
ec2: DescribeNetworkInterfaces — Esta acción solo funciona si está permitida en todos los recursos ()
"Resource": "*"
. -
ec2: DeleteNetworkInterface — Si no especifica un ID de recurso para la función DeleteNetworkInterfacede ejecución, es posible que su función no pueda acceder a la VPC. Especifique un ID de recurso único o incluya todos los ID de recursos, por ejemplo,
"Resource": "arn:aws:ec2:us-west-2:123456789012:*/*"
. -
ec2: AssignPrivateIpAddresses
-
ec2: UnassignPrivateIpAddresses
Estos permisos se incluyen en la política AWS AWSLambdaVPCAccessExecutionRolegestionada. Tenga en cuenta que estos permisos solo son necesarios para crear ENI, no para invocar la función de la VPC. En otras palabras, puede invocar correctamente la función de la VPC aunque elimine estos permisos del rol de ejecución. Para desasociar completamente la función Lambda de la VPC, actualice los ajustes de configuración de la VPC de la función mediante la consola o la API. UpdateFunctionConfiguration
Al configurar la conectividad de VPC, Lambda utiliza los permisos para comprobar los recursos de red. Para configurar una función de manera que se conecte a una VPC, su usuario necesita los siguientes permisos:
Permisos de usuario
-
ec2: DescribeSecurityGroups
-
ec2: DescribeSubnets
-
ec2: DescribeVpcs
Configuración del acceso mediante VPC (consola)
Si los permisos de IAM solo le permiten crear funciones de Lambda que se conectan a la VPC, debe configurar la VPC al crear la función. Si los permisos de IAM le permiten crear funciones que no están conectadas a la VPC, puede agregar la configuración de la VPC después de crear la función.
Para configurar una VPC al crear una función
Abra la página de Functions
(Funciones) en la consola de Lambda. -
Elija Crear función.
-
En Basic information (Información básica), para Function name (Nombre de función), escriba un nombre para la función.
-
Amplíe Advanced settings (Configuración avanzada).
-
Seleccione Habilitar VPC y, a continuación, elija la VPC a la que desee que acceda la función.
-
(Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.
-
Elija subredes y grupos de seguridad. Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.
nota
Para acceder a recursos privados, conecte la función a subredes privadas. Si su función necesita acceso a Internet, utilice traducción de direcciones de red (NAT). La conexión de una función a una subred pública no le concede acceso a Internet ni una dirección IP pública.
-
Elija Crear función.
Para configurar una VPC para una función existente
Abra la página de Funciones
en la consola de Lambda. -
Elija una función.
-
Elija Configuración y, a continuación, elija VPC.
-
En VPC, elija Edit (Editar).
-
Elija la función de VPC a la que desea que la función tenga acceso.
-
(Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.
-
Elija subredes y grupos de seguridad. Si seleccionó Permitir tráfico IPv6 para subredes de pila doble, todas las subredes seleccionadas deben tener un bloque de CIDR IPv4 y un bloque de CIDR IPv6.
nota
Para acceder a recursos privados, conecte la función a subredes privadas. Si su función necesita acceso a Internet, utilice traducción de direcciones de red (NAT). La conexión de una función a una subred pública no le concede acceso a Internet ni una dirección IP pública.
-
Seleccione Guardar.
Configuración del acceso mediante VPC (API)
Para conectar una función de Lambda a una VPC, puede utilizar las siguientes operaciones de la API:
Para crear una función y conectarla a una VPC mediante la AWS Command Line Interface (AWS CLI), puede utilizar el comando create-function
con la opción VpcConfig. En el ejemplo siguiente se crea una conexión de VPC. La función tiene acceso a dos subredes y a un grupo de seguridad y permite el tráfico IPv6 saliente.
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
Para conectar una función existente a una VPC, utilice el comando update-function-configuration
con la opción vpc-config
.
aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=
subnet-071f712345678e7c8,subnet-07fd123456788a036
,SecurityGroupIds=sg-085912345678492fb
Para desconectar la función de una VPC, actualice la configuración de la función con una lista vacía de subredes y grupos de seguridad.
aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]
Uso de claves de condición de IAM para la configuración de la VPC
Puede utilizar claves de condición específicas de Lambda para la configuración de la VPC para proporcionar controles de permisos adicionales para sus funciones de Lambda. Por ejemplo, puede requerir que todas las funciones de la organización estén conectadas a una VPC. También puede especificar las subredes y los grupos de seguridad que los usuarios de la función pueden y no pueden utilizar.
Lambda admite las siguientes claves de condición en las políticas de IAM:
-
lambda: VpcIds — Permitir o denegar una o más VPC.
-
lambda: SubnetIds — Permitir o denegar una o más subredes.
-
lambda: SecurityGroupIds — Permitir o denegar uno o más grupos de seguridad.
La API Lambda opera CreateFunctiony UpdateFunctionConfigurationadmite estas claves de condición. Para obtener más información acerca de las claves de condición en las políticas de IAM, consulte Elementos de la política de JSON de IAM: Condición en la Guía del usuario de IAM.
sugerencia
Si su función ya incluye una configuración de VPC de una solicitud de la API anterior, puede enviar una solicitud UpdateFunctionConfiguration
sin la configuración de la VPC.
Políticas de ejemplo con claves de condición para la configuración de la VPC
En los ejemplos siguientes se muestra cómo utilizar claves de condición para la configuración de la VPC. Después de crear una instrucción de política con las restricciones deseadas, agregue la instrucción de política para el usuario o rol de destino.
Asegúrese de que los usuarios implementen solo funciones conectadas a la VPC
Para asegurarse de que todos los usuarios implementen solo funciones conectadas a la VPC, puede denegar operaciones de creación y actualización de funciones que no incluyan un ID de VPC válido.
Tenga en cuenta que el ID de VPC no es un parámetro de entrada para la solicitud CreateFunction
o UpdateFunctionConfiguration
. Lambda recupera el valor ID de la VPC en función de los parámetros de subred y grupo de seguridad.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceVPCFunction", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "lambda:VpcIds": "true" } } } ] }
Denegar a los usuarios el acceso a VPC, subredes o grupos de seguridad específicos
Para denegar a los usuarios el acceso a VPC específicas, utilice StringEquals
para comprobar el valor de la condición lambda:VpcIds
. En el ejemplo siguiente se deniega a los usuarios el acceso a vpc-1
y 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"] } } }
Para denegar a los usuarios el acceso a subredes específicas, utilice StringEquals
para comprobar el valor de la condición lambda:SubnetIds
. En el ejemplo siguiente se deniega a los usuarios el acceso a subnet-1
y subnet-2
.
{ "Sid": "EnforceOutOfSubnet", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Para denegar a los usuarios el acceso a grupos de seguridad específicos, utilice StringEquals
para comprobar el valor de la condición lambda:SecurityGroupIds
. En el ejemplo siguiente se deniega a los usuarios el acceso a sg-1
y sg-2
.
{ "Sid": "EnforceOutOfSecurityGroups", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
Permitir a los usuarios crear y actualizar funciones con configuraciones específicas de VPC
Para permitir a los usuarios acceder a VPC específicas, utilice StringEquals
para comprobar el valor de la condición lambda:VpcIds
. En el siguiente ejemplo se permite a los usuarios acceder a vpc-1
y 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"] } } }
Para permitir a los usuarios acceder a subredes específicas, utilice StringEquals
para comprobar el valor de la condición lambda:SubnetIds
. En el siguiente ejemplo se permite a los usuarios acceder a subnet-1
y subnet-2
.
{ "Sid": "EnforceStayInSpecificSubnets", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Para permitir a los usuarios acceder a grupos de seguridad específicos, utilice StringEquals
para comprobar el valor de la condición lambda:SecurityGroupIds
. En el siguiente ejemplo se permite a los usuarios acceder a sg-1
y sg-2
.
{ "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
Acceso a Internet y a los servicios para funciones conectadas a la VPC
De forma predeterminada, Lambda ejecuta las funciones en una VPC segura con acceso a los servicios de AWS e Internet. Lambda es propietaria de esta VPC, que no está conectada a la VPC predeterminada. Al conectar una función a una VPC de su cuenta, la función no puede acceder a Internet a no ser que su VPC proporcione acceso.
nota
Varios servicios de AWS ofrecen puntos de enlace de la VPC. Puede utilizar los puntos de enlace de la VPC para conectarse a servicios de AWS desde dentro de una VPC sin acceso a Internet.
El acceso a Internet desde una subred privada requiere la conversión de las direcciones de red (NAT). Para conceder a la función acceso a Internet, enrute el tráfico saliente a una gateway NAT en una subred pública. La gateway NAT tiene una dirección IP pública y puede conectarse a Internet a través de la gateway de Internet de la VPC. Una conexión de gateway NAT inactiva expirará después de 350 segundos. Para obtener más información, consulte Cómo conceder acceso a Internet a una función Lambda en una VPC
Tutoriales de VPC
En los siguientes tutoriales, se conecta una función de Lambda a los recursos de la VPC.
Ejemplos de configuraciones de VPC
Puede utilizar las siguientes plantillas de AWS CloudFormation de ejemplo para crear configuraciones de VPC que se usarán con funciones de Lambda. Hay dos plantillas disponibles en el repositorio de esta guía: GitHub
-
vpc-private.yaml
: una VPC con dos subredes privadas y puntos de enlace de la VPC para Amazon Simple Storage Service (Amazon S3) y Amazon DynamoDB. Utilice esta plantilla para crear una VPC para funciones que no necesitan acceso a Internet. Esta configuración admite el uso de Amazon S3 y DynamoDB con los SDK de AWS, así como el acceso a los recursos de base de datos de la misma VPC a través de una conexión de red local. -
vpc-privatepublic.yaml
: VPC con dos subredes privadas, puntos de enlace de la VPC, una subred pública con una gateway NAT y una gateway de Internet. El tráfico hacia Internet desde las funciones de las subredes privadas se enruta a la gateway NAT mediante una tabla de enrutamiento.
Para crear una VPC con una plantilla, en la consola de AWS CloudFormation, en la página Stacks