Conexión de redes salientes a los recursos de una VPC - AWS Lambda

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.

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
  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija Crear función.

  3. En Basic information (Información básica), para Function name (Nombre de función), escriba un nombre para la función.

  4. Amplíe Advanced settings (Configuración avanzada).

  5. Seleccione Habilitar VPC y, a continuación, elija la VPC a la que desee que acceda la función.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

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

  8. Elija Crear función.

Para configurar una VPC para una función existente
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuración y, a continuación, elija VPC.

  4. En VPC, elija Edit (Editar).

  5. Elija la función de VPC a la que desea que la función tenga acceso.

  6. (Opcional) Para permitir el tráfico IPv6 saliente, seleccione Permitir tráfico IPv6 para subredes de doble pila.

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

  8. 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 (Pilas), elija Create stack (Crear pila) y, a continuación, siga las instrucciones del asistente de Create stack (Crear pila).