¿Cuáles son algunas consideraciones de seguridad en la arquitectura de aplicaciones sin servidor?

La primera variable en esto es la estructura de su solución sin servidor, la segunda es el tema de seguridad que le preocupa. A continuación, cubriré las diferentes variables que he considerado y luego en qué debes pensar. En general, todas las preocupaciones tienden a ser más fáciles.

Hay toneladas de otras soluciones, pero creo que estas ayudan a señalar las posibles preocupaciones que pueda estar buscando.

  • API , generalmente es RESTFul pero no tiene que serlo, el concepto importante es que las solicitudes tienen un origen HTTP.
  • Respuesta de evento , por lo que un archivo se suelta en algún lugar para ser manejado o un paquete enviado a SNS para ser manejado por una o más funciones.

Desde el punto de vista de la seguridad, estas son las áreas a las que me dirijo. Cada uno de ellos tiene mucho más de qué preocuparse, pero los detalles no son apropiados aquí.

  • Autenticación , ¿quién soy y soy? Permitido en la puerta.
  • Autorización , ¿puedo ingresar, pero puedo hacer lo que le pido?
  • Integridad y resistencia del sistema contra ataques o exploits.
  • Integridad de la comunicación (entre componentes del sistema).

Autenticación

  • La autenticación de API se puede descargar a un tercero, como Auth0 o StormPath, o bien, puede rodar la suya propia. No hay diferencias notables con un sistema externo aquí.
  • La respuesta del evento debe controlarse fuera de la función sin servidor en sí, de modo que se garantice que la invocación se autentique adecuadamente.

Autorización

  • La autorización de API , dependiendo de su proveedor, se resuelve de manera diferente. AWS Lambda tiene un autorizador al que API Gateway llama para verificar la autorización. Parece que algunos de los otros proveedores aún no tienen esto, fuera de mi búsqueda rápida, por lo que tendrá que incluir esto en su implementación. Los JWT son una buena solución, ya que elimina la necesidad de una búsqueda para verificar la identidad y la autorización.
  • Respuesta al evento , esto debe ser algo que te consideres a ti mismo.

Integridad del sistema

  • Tanto la respuesta de API como de evento , la expectativa de sin servidor es descargar esta preocupación en su proveedor. Se supone que deben mantener los contenedores actualizados y seguros, dentro de sus propias pautas. Es probable que haya diferencias entre las plataformas, por lo que si necesita seguridad adicional más allá de la norma, es posible que deba hacer algunas compras.

Integridad de comunicación

  • API , la comunicación entrante debería ser HTTPS en estos días. Algunas plataformas tienes que configurar esto de tus propios dominios. No conozco uno que no le proporcione SSL como las URL predeterminadas que generan.
  • API y respuesta a eventos , ya que su servicio se comunica hacia el exterior, sin embargo, con otros sistemas y servicios externos tendrá que pensar un poco más. Si es a través de HTTPS, generalmente está bien, ya que la mayoría de los idiomas son buenos para verificar certificados legítimos. Sin embargo, cuando un sistema requiere una lista blanca de IP, se complica. No tiene garantizada una IP predecible o rangos de IP. Si necesita incluir su IP en la lista blanca de un servicio externo, tendrá que usar algo como Amazon VPC alrededor del servicio específico. Sin embargo, en ese momento, está creando un cuello de botella y el rendimiento disminuye (por lo que he visto).

    Cuando su sistema interactúa con otros sistemas dentro del mismo proveedor (como S3, DynamoDB o SQS dentro de AWS), confía en el proveedor. Dependiendo de sus preocupaciones de seguridad, es posible que desee cifrar los paquetes que están en ruta y usar un servicio de administración de claves central para el descifrado.

    Además, algunos servicios tienen configuraciones de seguridad adicionales (es decir, cifrado S3 en reposo), pero eso no es específico de sin servidor. Deberá investigar cada servicio que utiliza y asegurarse de que esté adecuadamente seguro.

He escrito una publicación sobre seguridad sin servidor, y las principales consideraciones que he logrado encontrar son:

  • Mayor cantidad de datos en tránsito . Debido a la naturaleza distribuida de FaaS, las funciones sin servidor comunican datos con mayor frecuencia y en mayor volumen. Esto aumenta los riesgos de pérdida de datos privados debido a errores de diferentes tipos.
  • Falta de un claro perímetro de seguridad . Una vez más, la estructura de un backend FaaS no tiene una “forma clara”, lo que significa que tampoco hay un perímetro de seguridad claramente definido. Como consecuencia, todas y cada una de las funciones necesitan un perímetro de seguridad propio.
  • FaaS puede fomentar la hinchazón de funciones , convirtiendo la gestión de dependencias en una pesadilla de seguridad. Hay poco incentivo con FaaS para eliminar funciones, lo que puede conducir a la hinchazón de funciones. Como resultado, un control más estricto es necesario en este departamento.
  • Los vendedores de FaaS están más expuestos a los ciberataques . Dicho esto, los grandes vendedores también están mejor protegidos de los ataques.
  • Multitenancy . En la publicación del blog de Martin Fowler, Mike Robers especula sobre los riesgos de que un cliente de un proveedor de FaaS vea los datos de otro cliente debido a un error de software del lado del proveedor. Este es un escenario de baja probabilidad, pero aún así …

Lo mejor de la arquitectura sin servidor para su aplicación móvil es que sus datos nunca se almacenarán en servidores. Esto significa que, si está utilizando un mensajero sin servidor, la información que comparte a través de la aplicación nunca se guarda en los servidores. Por lo tanto, nadie puede acceder a sus datos. Esto es excelente en términos de protección de privacidad en línea.

Otra característica importante que protege la privacidad de sus datos mientras usa una aplicación tiene que ver con el cifrado de extremo a extremo.

Para resolver el misterio sobre los mensajeros sin servidor, solo lea este artículo https://pinngle.me/blog/serverle

Complementando la respuesta de Nick Hatt, en una arquitectura sin servidor, dividirá su aplicación en diferentes “funciones”. Asegurar toda la arquitectura requiere más esfuerzo de esta manera, ya que en lugar de administrar y fortalecer un paquete de servidores monolíticos similares, ahora tiene que actualizar una flota de funciones, tal vez usando diferentes paquetes tecnológicos, administrando certificados X.509, sesiones de usuario, etc. La infraestructura de seguridad será mucho más compleja y, por lo tanto, más propensa a errores.

Además, recuerde el riesgo de ejecutar contenedores privilegiados. Los contenedores Docker, por ejemplo, pueden ejecutar un proceso como root. Pero dado que el kernel que ejecuta un contenedor acoplable también es el mismo kernel que ejecuta el sistema operativo host, un ataque a un contenedor puede comprometer a todo el host. Por lo tanto, endurecer un contenedor requiere tanto esfuerzo como endurecer un servidor completo. Otros motores como rkt pueden aliviar algunos de estos problemas.

Las consideraciones son las mismas que cualquier otra aplicación que escriba. Cualquier aplicación web sigue siendo vulnerable al Top 10 2013-Top 10. Sus usuarios siguen siendo vulnerables al phishing y la ingeniería social.

Cualquiera que sea la plataforma en la nube que elija, tiene una serie de documentos de seguridad y documentación legal sobre de qué es responsable y qué cubre el proveedor. Sugiero comenzar con eso como cosas de las que NO tiene que preocuparse. Luego, preocúpate por todo lo demás.

More Interesting

¿Cuáles son las ventajas de usar Spring para el desarrollo de servicios web RESTful? ¿Cuál es la razón de la popularidad de este enfoque en la industria del software?

¿Aprender nuevos idiomas realmente ayuda a los programadores a crecer? ¿O es solo otro mito?

¿Cuáles son los diferentes tipos de servicios de prueba de software?

¿Cuáles son algunos patrones de diseño de software que aún no están en el vocabulario común?

¿Vale la pena trabajar como ingeniero de software en Accenture en Letonia?

¿Cómo explicaría las pruebas de software a cualquier persona que no tenga ningún conocimiento sobre las pruebas?

¿Cuáles son las herramientas UML más populares, que todavía se utilizan, con capacidades de ingeniería inversa capaces de invertir el código de ingeniería en diagramas de clase?

¿Cuál es la diferencia entre desarrollo de productos, desarrollo de aplicaciones y desarrollo de software en TI?

Cómo convertirse en ingeniero de software en casa

Si los SSD fueran tan baratos como el disco, ¿cómo afectaría a toda la industria de software y hardware?

¿Qué tipo de habilidades de software / programación aprendiste en tu educación de TI?

¿Por qué no hay una lucha real en mi vida? Soy una mujer de 22 años que trabaja en una empresa de software en Bangalore con un paquete decente.

¿Un empleador lo demandará porque crea un proyecto de código abierto competitivo para su propio proyecto de código abierto?

¿Cuál es la proporción de ingenieros / vendedores en las empresas de software empresarial?

Cómo obtener inversión para mi software