Red
El acceso de red de las MicroVM de AWS Lambda se configura mediante la asociación de recursos de conector de red a la MicroVM en el momento de la ejecución. Los conectores de red se especifican al llamar a run-microvm y no se pueden modificar mientras una MicroVM está en ejecución.
Descripción general
Cada MicroVM puede tener configuraciones de red independientes para la entrada (tráfico entrante) y la salida (tráfico saliente):
-
Conectores de red de entrada: habilitan la conectividad entrante. Los clientes se conectan a un punto de conexión HTTPS administrado por el servicio y Lambda reenvía el tráfico a los puertos configurados en la MicroVM. Los conectores de entrada están administrados por AWS. Al ejecutar una MicroVM, se hace referencia a estos mediante su ARN.
-
Conectores de red de salida: habilitan el tráfico saliente. De forma predeterminada, las MicroVM tienen acceso público a Internet. Puede crear un conector de salida de VPC administrado por el cliente para, en su lugar, enrutar el tráfico saliente a través de la VPC.
Un mismo conector se puede reutilizar en varias MicroVM. Este es el patrón de uso previsto.
Conectividad entrante
Cada MicroVM de Lambda está disponible mediante una URL única de punto de conexión HTTPS, que se asigna al llamar a run-microvm. Los clientes envían solicitudes a este punto de conexión mediante HTTPS. Lambda enruta cada solicitud a un puerto dentro de la MicroVM, donde la aplicación la recibe.
De forma predeterminada, las solicitudes que recibe el punto de conexión se enrutan al puerto 8080 dentro de la MicroVM. Para enrutar las solicitudes a otro puerto, consulte Enrutamiento de puertos.
El punto de conexión de entrada admite los siguientes protocolos:
-
HTTP/1.1
-
HTTP/2
-
WebSockets
-
gRPC
-
Eventos enviados por el servidor (SSE)
nota
El tráfico entre el cliente y el punto de conexión de la MicroVM siempre se cifra mediante TLS. La aplicación puede atender solicitudes internamente mediante HTTP o HTTPS.
Enrutamiento de puertos
Lambda selecciona el puerto de destino dentro de la MicroVM según el siguiente orden de prioridad:
-
Encabezado
X-aws-proxy-port: para las solicitudes HTTP estándar, incluya este encabezado con el número del puerto de destino. -
Subprotocolo WebSocket: si el cliente WebSocket no puede establecer encabezados personalizados, especifique el puerto de destino como un subprotocolo denominado
lambda-microvms.port., dondeNNes el número de puerto. Los subprotocolos se proporcionan al abrir la conexión WebSocket. Para ver un ejemplo, consulta Protocolos. -
Valor predeterminado (8080): si no se especifica ninguno de los dos, las solicitudes se enrutan al puerto 8080.
importante
El puerto de destino se debe encontrar dentro de los allowedPorts definidos en el token de autenticación. Las solicitudes dirigidas a puertos no autorizados reciben una respuesta 403 Prohibido.
Autenticación
Todas las solicitudes a un punto de conexión de MicroVM requieren un token de autenticación válido en el encabezado X-aws-proxy-auth. Los tokens se generan mediante create-microvm-auth-token. Cada token es una cadena cifrada de cifrado web de JSON (JWE) cuyo alcance se limita a:
-
Una MicroVM específica, identificada mediante su ID.
-
Un conjunto de puertos permitidos, ya sea un solo puerto, un intervalo o todos los puertos.
-
Una hora de vencimiento, configurada al crear el token.
En el siguiente ejemplo se crea un token y se utiliza para enviar una solicitud autenticada:
aws lambda-microvms create-microvm-auth-token \ --microvm-identifiermicrovm-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'
Para obtener una guía completa sobre la creación de tokens y la conexión a una MicroVM, incluidas las conexiones WebSocket, consulte Conexión a una MicroVM.
Respuestas de error
El punto de conexión de la MicroVM devuelve los siguientes códigos de estado HTTP cuando no puede procesar una solicitud ni entregarla a la aplicación. Estas respuestas proceden del punto de conexión, no de la aplicación.
| Código | Status | Causa y resolución |
|---|---|---|
| 400 | solicitud errónea | Solicitud con formato incorrecto, encabezado de puerto no válido o subprotocolo WebSocket no válido. Compruebe el formato. |
| 403 | Prohibido | El token no está presente, ha vencido o no es válido; o bien, el puerto solicitado no está incluido en los allowedPorts del token. Genere un nuevo token o use un puerto permitido. |
| 429 | Demasiadas solicitudes | Se superó el límite de solicitudes, ya sea en el nivel de la cuenta o por MicroVM. Vuelva a intentarlo con retroceso exponencial. |
| 500 | Internal Server Error | Se ha producido un error interno. Intente realizar de nuevo la solicitud. |
| 502 | Puerta de enlace incorrecta | La aplicación no responde o la reanudación automática no se completó correctamente dentro del número máximo de reintentos. Consulte Reanudación automática. |
Encabezados de solicitudes
Lambda reserva el espacio de nombres de los encabezados X-aws-proxy-* para los metadatos de las solicitudes, como el token de autenticación (X-aws-proxy-auth) y el puerto de destino (X-aws-proxy-port). Lambda elimina los encabezados X-aws-proxy-* antes de reenviar la solicitud a la aplicación.
Ancho de banda de solicitudes y respuestas
Cada MicroVM de Lambda tiene un ancho de banda de solicitudes y respuestas que escala linealmente con su tamaño. Este ancho de banda se aplica a todo el tráfico que pasa por el punto de conexión de la MicroVM, tanto a las solicitudes entrantes como a las respuestas salientes.
| Tamaño de la MicroVM (valor de referencia) | Ancho de banda máximo |
|---|---|
| 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) |
Si aumenta la latencia de las solicitudes debido a la saturación de la red, reduzca la simultaneidad de solicitudes o el tamaño de la carga útil, o bien, cambie a un tamaño de MicroVM mayor para aumentar el ancho de banda disponible.
Compatibilidad con HTTP/2
Las MicroVM de Lambda admiten HTTP/2 en el punto de conexión de entrada. Lambda negocia el protocolo mediante ALPN (negociación de protocolos de capa de aplicación) durante el establecimiento de comunicación TLS. Da prioridad a HTTP/2 y recurre a HTTP/1.1 si es necesario. Los clientes compatibles con HTTP/2 lo utilizan automáticamente.
Para usar HTTP/2 entre el punto de conexión y la aplicación dentro de la MicroVM:
-
La aplicación usa TLS: Lambda negocia HTTP/2 con la aplicación mediante ALPN y recurre a HTTP/1.1 si la aplicación no admite HTTP/2.
-
La aplicación atiende solicitudes mediante HTTP en texto plano: incluya el encabezado
X-aws-proxy-force-h2: trueen la solicitud para usar HTTP/2 en la conexión con la aplicación.
Conectividad saliente
De forma predeterminada, las MicroVM de Lambda tienen acceso público a Internet en la ruta de salida. Para conectar las MicroVM con recursos de las VPC privadas, como RDS, ElastiCache, las API internas y los sistemas en las instalaciones mediante Direct Connect o una VPN, cree un conector de red de Lambda con la configuración de la VPC.
Cuando se usa la salida de VPC, el tráfico saliente está sujeto a las reglas de los grupos de seguridad y a las listas de control de acceso (ACL) de red que regulan el tráfico de la VPC.
Uso de los conectores de red de salida
Los conectores de red de salida enrutan el tráfico saliente de la MicroVM a través de la VPC. El conector se crea una sola vez y, posteriormente, se hace referencia a este mediante su ARN al iniciar las MicroVM con el comando run-microvm.
Requisitos previos
Antes de crear un conector de red, se necesita un rol de IAM que permita a Lambda crear interfaces de red elásticas (ENI) en la VPC. El rol requiere los siguientes permisos:
{ "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" } } } ] }
Creación de un conector de red
Para crear un conector, especifique las subredes y los grupos de seguridad de la VPC, así como el protocolo de red (IPv4 o 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
Estados de los conectores de red
Un conector se debe encontrar en el estado ACTIVE antes de poder hacer referencia a este en run-microvm.
| Estado | Descripción |
|---|---|
PENDING |
El conector está en proceso de creación (las ENI subyacentes están en proceso de aprovisionamiento). |
ACTIVE |
El conector está listo para su uso. |
INACTIVE |
El conector está inactivo temporalmente. |
FAILED |
Se produjo un error en el aprovisionamiento o la actualización. Compruebe lo siguiente StateReason. |
DELETING |
El conector está en proceso de eliminación; se realiza la limpieza de las ENI. |
DELETE_FAILED |
Se produjo un error en la eliminación. |
Ejecución de una MicroVM con un conector de red
Al ejecutar una MicroVM, haga referencia al ARN del conector:
aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --egress-network-connectorsconnector-arn\ --idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800,"autoResumeEnabled":false}'
nota
Antes de actualizar o eliminar un conector, compruebe que se hayan terminado todas las MicroVM que lo utilizan. La modificación de un conector que se encuentra en uso puede causar problemas de conectividad de red en las MicroVM en ejecución.
Uso de microVM de Lambda con puntos de conexión de VPC de interfaz (AWS PrivateLink)
Puede usar AWS PrivateLink para la conectividad privada a través de la red de AWS entre sus recursos de VPC y las microVM de Lambda, sin tener que pasar por la red pública de Internet. Las microVM admiten dos puntos de conexión de VPC, según el destino de tráfico deseado:
-
API de administración de microVM (creación de imágenes, ejecución, suspensión, terminación): utilizan el punto de conexión de VPC de Lambda existente (
com.amazonaws.).region.lambda -
Conectividad con microVM (tráfico HTTPS a las aplicaciones en ejecución): utiliza un punto de conexión independiente (
com.amazonaws.).region.lambda-microvm
Punto de conexión de VPC para API de administración de microVM
Las MicroVM de Lambda comparten el mismo servicio de punto de conexión de VPC que Lambda (com.amazonaws.). Para obtener instrucciones completas, consulte Creación de un punto de conexión de interfaz para Lambda.region.lambda
Política de puntos de conexión de VPC para API de administración de microVM
Para controlar quién puede usar el punto de conexión de interfaz y qué acciones de la API de MicroVM de Lambda puede realizar, asocie una política al punto de conexión. La política especifica la entidad principal que puede realizar acciones, las acciones que se pueden realizar y los recursos en los que se pueden llevar a cabo las acciones. Las acciones de MicroVM de Lambda utilizan el prefijo de acción de IAM lambda:.
Para más información, consulte Control del acceso a los servicios con puntos de conexión de VPC en la Guía del usuario de Amazon VPC.
El siguiente ejemplo de política permite al usuario MyUser enumerar y obtener imágenes de microVM a través del punto de conexión:
{ "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/MyUser" }, "Effect": "Allow", "Action": [ "lambda:ListMicrovmImages", "lambda:GetMicrovmImage" ], "Resource": "*" } ] }
Punto de conexión de VPC para conectividad de microVM
Para mantener privado el tráfico HTTPS dirigido a sus microVM en ejecución, cree un punto de conexión de interfaz para el servicio com.amazonaws.. Este punto de conexión gestiona las conexiones a las URL de punto de conexión de las microVM (por ejemplo, region.lambda-microvmabc123def456.lambda-microvm.us-east-1.on.aws).
Para obtener más información sobre las propiedades de los puntos de conexión de interfaz, consulte la guía de puntos de conexión de interfaz en la documentación de Amazon VPC.
Creación del punto de enlace
Creación de un punto de conexión de interfaz para la conectividad de microVM (consola)
-
Abra la página Endpoints (Puntos de enlace)
de la consola de Amazon VPC. -
Seleccione Crear punto de conexión.
-
En Service category (Categoría del servicio), asegúrese de que se seleccione servicios de AWS.
-
En Nombre de servicio, elija
com.amazonaws.. Compruebe que el valor de Tipo es Interfaz.region.lambda-microvm -
Elija una VPC y las subredes.
-
Para habilitar un DNS privado para el punto de conexión de interfaz, seleccione la casilla de verificación Habilitar nombre DNS (recomendado). Esto garantiza que las solicitudes que utilizan el nombre de host del punto de conexión de microVM público se dirijan automáticamente al punto de conexión de interfaz, sin necesidad de realizar cambios en el lado del cliente.
-
En Security group (Grupo de seguridad), elija uno o varios grupos de seguridad. El grupo de seguridad debe permitir el tráfico TCP saliente en el puerto 443 hacia las interfaces de red de los puntos de conexión.
-
Seleccione Crear punto de conexión.
Para utilizar la opción de DNS privado, debe configurar los atributos enableDnsHostnames y enableDnsSupport de su VPC. Para obtener más información, consulte Visualización y actualización de la compatibilidad de DNS para su VPC en la Guía del usuario de Amazon VPC.
Creación de un punto de conexión de interfaz para la conectividad de microVM (AWS CLI)
aws ec2 create-vpc-endpoint \ --vpc-idvpc-ec43eb89\ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.lambda-microvm \ --subnet-idsubnet-abababab\ --security-group-idsg-1a2b3c4d\ --private-dns-enabled
Para comprobar que el punto de conexión está disponible y que el DNS privado está activo:
aws ec2 describe-vpc-endpoints \ --vpc-endpoint-idsvpce-1a2b3c4d5e6f7g8h9\ --query 'VpcEndpoints[0].{State:State,PrivateDns:PrivateDnsEnabled,Dns:DnsEntries[*].DnsName}'
Comportamiento del DNS privado
Cuando el DNS privado está habilitado: el punto de conexión administra la resolución de DNS para *.lambda-microvm. dentro de la VPC. Los nombres de host de punto de conexión de microVM existentes (por ejemplo, region.on.awsabc123def456.lambda-microvm.us-east-1.on.aws) se resuelven en las direcciones IP privadas de las interfaces de red del punto de conexión. No es necesario realizar ningún cambio en el cliente.
Cuando el DNS privado está deshabilitado: Amazon VPC genera un nombre de DNS específico del punto de conexión para el punto de conexión con el formato . Para enrutar el tráfico a través de este punto de conexión sin dejar de llegar a la microVM correcta, debe conservar el nombre de host de la microVM original en dos lugares:vpce-id-hash.lambda-microvm.region.vpce.amazonaws.com
-
Indicación del nombre del servidor TLS (SNI): el establecimiento de comunicación TLS utiliza este valor para identificar a qué microVM corresponde la conexión.
-
Encabezado de host HTTP: el proxy usa este valor para enrutar la solicitud a la microVM correcta.
Si alguno de los valores se establece en el nombre de host del punto de conexión de VPC en lugar del nombre de host de la microVM, la conexión no se puede enrutar a la microVM correcta.
Ejemplo: conexión a través de un nombre de DNS específico de un punto de conexión
En el siguiente ejemplo, se usa curl--connect-to para redirigir la conexión TCP al punto de conexión de VPC y, al mismo tiempo, mantener el nombre de host de la microVM en la URL, el SNI y el encabezado del 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/"
El indicador --connect-to indica a curl que abra la conexión TCP a la dirección del punto de conexión de VPC, mientras que la URL, el TLS SNI y el encabezado del host permanecen configurados en el nombre de host de la microVM.
Para más información, consulte Acceso a un servicio a través de un punto de conexión de interfaz en la Guía del usuario de Amazon VPC.
Política de punto de conexión para la conectividad de microVM
Puede asociar una política de punto de conexión para controlar a qué microVM se puede acceder a través del punto de conexión de VPC lambda-microvm. Una política de punto de conexión en el servicio lambda-microvm le permite controlar las conexiones a cuentas u organizaciones específicas. De forma predeterminada, el punto de conexión permite las conexiones a microVMs en cualquier cuenta de AWS. (Nota: el cliente que establece la conexión debe seguir teniendo un token de autenticación de microVM válido para poder acceder).
De forma predeterminada, un punto de conexión de VPC tiene una política de acceso completo que permite todo el tráfico. Al reemplazar la política predeterminada por una política personalizada, las MicroVM de Lambda evalúan esa política en función de la acción lambda:ConnectMicrovm en cada conexión realizada a través del punto de conexión. Si la política no permite la conexión a microVM, la conexión se rechaza con una respuesta HTTP 403 Forbidden. Una política que no conceda lambda:ConnectMicrovm, deniega todas las conexiones a través del punto de conexión.
nota
La acción lambda:ConnectMicrovm autoriza una conexión a un punto de conexión de microVM a través del punto de conexión de interfaz. No es una operación de la API de Lambda y no se puede utilizar en políticas de IAM basadas en la identidad o en los recursos; solo es válida en una política de puntos de conexión de VPC.
Entidad principal y recurso
Las conexiones a un punto de conexión de microVM se autentican con un token de autenticación de microVM en lugar de AWS Signature Version 4. Por este motivo, no hay ninguna entidad principal de IAM asociada a la conexión. En cambio, las MicroVM de Lambda evalúan la política de puntos de conexión con una entidad principal anónima. Esto significa:
-
Principaldebe ser"*". Una política que nombra una entidad principal específica no coincide con nada y deniega todas las conexiones. -
Las claves de condición que dependen de la identidad del solicitante (como
aws:PrincipalArn,aws:PrincipalOrgIDyaws:userid) no se rellenan y no coincidirán. -
Resourcetambién debe ser"*". Las MicroVM de Lambda no limitan la evaluación de la política de puntos de conexión a los ARN de recursos de microVM individuales. Para restringir las microVM a las que puede acceder el punto de conexión, utilice la clave de condiciónaws:ResourceAccounten lugar del elementoResource.
Claves de condición admitidas
| Clave de condición | Descripción |
|---|---|
aws:ResourceAccount |
La cuenta AWS propietaria de la microVM a la que se está conectando. |
aws:ResourceOrgID |
El ID de organización de AWS Organizations de la cuenta propietaria de la microVM. |
aws:SourceVpce |
El ID del punto de conexión de interfaz por el que pasó la conexión. |
aws:SourceVpc |
El ID de la VPC desde la que se originó la conexión. |
aws:VpcSourceIp |
La dirección IP privada del cliente que realizó la conexión. |
Ejemplo: permitir las conexiones únicamente a microVM en su propia cuenta
La siguiente política de punto de conexión permite las conexiones a través del punto de conexión solo a las microVM propiedad de la cuenta 111122223333. Se deniegan las conexiones a microVM propiedad de cualquier otra cuenta.
{ "Statement": [ { "Principal": "*", "Effect": "Allow", "Action": "lambda:ConnectMicrovm", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }