Tecnologías de aislamiento de Lambda
Lambda utiliza una gran variedad de tecnologías de aislamiento de código abierto y patentadas para proteger los procesos de trabajo y los entornos de ejecución. Cada entorno de ejecución contiene una copia especializada de los siguientes elementos:
-
El código de la versión de la función en particular
-
Cualquier capa de AWS Lambda seleccionada para la versión de la función
-
El tiempo de ejecución de la función elegido (por ejemplo, Java 11, NodeJS 12, Python 3.8, etc.) o el tiempo de ejecución personalizado de la función
-
Un directorio /tmp en el que se puede escribir
-
Un espacio de usuario
de Linux mínimo basado en Amazon Linux 2
Los entornos de ejecución se aíslan unos de otros mediante varias tecnologías similares a contenedores que están integradas en el kernel de Linux, junto con tecnologías de aislamiento patentadas de AWS. Estas tecnologías incluyen:
-
cgroups
: se utiliza para restringir el acceso de la función a la CPU y a la memoria. -
espacios de nombres
: cada entorno de ejecución se ejecuta en un espacio de nombres dedicado. Para ello, tenemos ID de procesos de grupo únicos, ID de usuario, interfaces de red y otros recursos administrados por el kernel de Linux. -
seccomp-bpf
: para limitar las llamadas al sistema (syscalls) que se pueden usar desde el entorno de ejecución. -
iptables
y tablas de enrutamiento : para evitar las comunicaciones de red de entrada y aislar las conexiones de red entre las MVM. -
chroot
: proporciona acceso con ámbito al sistema de archivos subyacente. -
Configuración de Firecracker: se utiliza para limitar el rendimiento de los dispositivos de bloques y los dispositivos de red.
-
Funciones de seguridad de Firecracker: para obtener más información sobre el diseño de seguridad actual de Firecracker, consulte el documento de diseño más reciente de Firecracker
.
Junto con las tecnologías de aislamiento patentadas de AWS, estos mecanismos proporcionan un fuerte aislamiento entre los entornos de ejecución.
Almacenamiento y estado
Los entornos de ejecución nunca se reutilizan entre diferentes versiones de funciones o clientes, pero un solo entorno se puede reutilizar entre invocaciones de la misma versión de la función. Esto significa que los datos y el estado pueden persistir entre las invocaciones. Los datos o el estado pueden persistir durante horas antes de que se destruyan como parte de la administración del ciclo de vida normal del entorno de ejecución. Por motivos de rendimiento, las funciones pueden aprovechar este comportamiento para mejorar la eficiencia al mantener y reutilizar cachés locales o conexiones de larga duración entre invocaciones. Dentro de un entorno de ejecución, estas múltiples invocaciones se gestionan mediante un único proceso, por lo que cualquier estado que abarque todo el proceso (como un estado estático en Java) se puede reutilizar en las futuras invocaciones, si la invocación se produce en un entorno de ejecución reutilizado.
Cada entorno de ejecución de Lambda también incluye un sistema de archivos de escritura, disponible en /tmp
. No es posible acceder a este almacenamiento ni compartirlo en todos los entornos de ejecución. Al igual que con el estado del proceso, los archivos que se escriben en /tmp
se conservan durante toda la vida del entorno de ejecución. Esto permite amortizar las costosas operaciones de transferencia, como la descarga de modelos de machine learning (ML), en múltiples invocaciones. Las funciones que no desean conservar datos entre invocaciones no deben escribir en /tmp ni eliminar sus archivos de /tmp entre invocaciones. El directorio /tmp
está respaldado por un almacén de instancias de Amazon EC2 y se cifra en reposo.
Los clientes que deseen conservar los datos en el sistema de archivos fuera del entorno de ejecución deben considerar la posibilidad de utilizar la integración de Lambda con Amazon Elastic File System
Si los clientes no desean conservar los datos o el estado entre invocaciones, Lambda recomienda que no utilicen el contexto de ejecución ni el entorno de ejecución para almacenar datos o estados. Si los clientes quieren evitar activamente la filtración de datos o estados entre invocaciones, Lambda recomienda que creen funciones distintas para cada estado. Lambda no recomienda que los clientes usen o almacenen un estado sensible a la seguridad en el entorno de ejecución, ya que puede mutar entre las invocaciones. En su lugar, recomendamos que se vuelva a calcular el estado en cada invocación.