Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Muchas organizaciones están ejecutando aplicaciones en entornos nativos de la nube, utilizando contenedores y orquestación para facilitar la escalabilidad y la resiliencia. Si eres miembro del equipo de Operaciones, DevOps o incluso DevSecOps que configura estos entornos para tu empresa, ¿cómo sabes si tus Implementaciones son seguras? Si eres un profesional de la seguridad con experiencia en sistemas tradicionales basados en servidores o máquinas virtuales, ¿cómo puedes adaptar tus conocimientos actuales a las Implementaciones basadas en contenedores? Y como desarrollador en el mundo nativo de la nube, ¿en qué debes pensar para mejorar la seguridad de tus aplicaciones en contenedores? Este libro profundiza en algunas de las principales tecnologías subyacentes en las que se basan los contenedores y la nube nativa, para que estés mejor equipado para evaluar los riesgos de seguridad y las posibles soluciones aplicables a tu entorno, y para ayudarte a evitar caer en malas prácticas que dejen expuestas tus Implementaciones tecnológicas.
En este libro aprenderás muchas de las tecnologías y mecanismos básicos que se utilizan habitualmente en los sistemas basados en contenedores, y cómo se construyen en el sistema operativo Linux. Juntos profundizaremos en los fundamentos de cómo funcionan los contenedores y cómo se comunican, para que estés bien versado no sólo en el "qué" de la seguridad de los contenedores, sino también, y lo que es más importante, en el "por qué". Mi objetivo al escribir este libro es ayudarte a comprender mejor lo que ocurre cuando implementas contenedores. Quiero animarte a construir modelos mentales que te permitan hacer tu propia evaluación de los posibles riesgos de seguridad que podrían afectar a tus Implementaciones.
Este libro considera principalmente el tipo de "contenedores de aplicación" que muchas empresas utilizan actualmente para ejecutar sus aplicaciones empresariales en sistemas como Kubernetes y Docker. Esto contrasta con los "contenedores de sistema" como LXC y LXD del Proyecto de Contenedores Linux. En un contenedor de aplicación, se te anima a ejecutar contenedores inmutables con tan poco código como sea necesario para ejecutar la aplicación, mientras que en un entorno de contenedor de sistema la idea es ejecutar toda una distribución de Linux y tratarla más como una máquina virtual. Se considera perfectamente normal entrar por SSH en un contenedor de sistema, pero los expertos en seguridad de contenedores de aplicación te mirarán con recelo si quieres entrar por SSH en un contenedor de aplicación (por razones que se tratarán más adelante en este libro). Sin embargo, los mecanismos básicos utilizados para crear contenedores de aplicación y de sistema por igual son los grupos de control, los espacios de nombres y el cambio del directorio raíz, por lo que este libro te dará una base sólida a partir de la cual podrás explorar las diferencias de enfoque adoptadas por los distintos proyectos de contenedores.
A quién va dirigido este libro
Tanto si te consideras un desarrollador, un profesional de la seguridad, un operador o un gestor, este libro te gustará más si te gusta entrar en el meollo de cómo funcionan las cosas y si disfrutas pasando tiempo en un terminal Linux.
Si buscas un manual de instrucciones que te guíe paso a paso para proteger los contenedores, puede que éste no sea el libro para ti. No creo que exista un enfoque único que funcione para todas las aplicaciones en todos los entornos y todas las organizaciones. En lugar de eso, quiero ayudarte a comprender lo que ocurre cuando ejecutas aplicaciones en contenedores, y cómo funcionan los distintos mecanismos de seguridad, para que puedas juzgar los riesgos por ti mismo.
Como descubrirás más adelante en este libro, los contenedores están hechos con una combinación de características del núcleo de Linux. Asegurar los contenedores implica utilizar muchos de los mismos mecanismos que utilizarías en un host Linux. (Utilizo el término "host" para referirme tanto a las máquinas virtuales como a los servidores bare-metal). Expongo cómo funcionan estos mecanismos y luego muestro cómo se aplican en los contenedores. Si eres un administrador de sistemas experimentado, podrás saltarte algunas secciones para llegar a la información específica de los contenedores.
Asumo que tienes cierta familiaridad básica con los contenedores, y probablemente al menos hayas jugado con Docker o Kubernetes. Entenderás términos como "extraer una imagen de contenedor de un registro" o "ejecutar un contenedor", aunque no sepas exactamente qué ocurre bajo las sábanas cuando realizas estas acciones. No espero que conozcas los detalles del funcionamiento de los contenedores, al menos no hasta que hayas leído el libro.
De qué trata este libro
Empezaremos en el Capítulo 1 considerando los modelos de amenazas y vectores de ataque que afectan a las implementaciones de contenedores, y los aspectos que diferencian la seguridad de los contenedores de la seguridad de las implementaciones tradicionales. El resto del libro se ocupa de ayudarte a construir un conocimiento profundo de los contenedores y de estas amenazas específicas de los contenedores, y de cómo puedes defenderte contra ellas.
Antes de que puedas pensar realmente en cómo asegurar los contenedores, necesitarás saber cómo funcionan. El Capítulo 2 prepara el terreno describiendo algunos mecanismos básicos de Linux, como las llamadas al sistema y las capacidades, que entrarán en juego cuando utilicemos contenedores. Luego, en los Capítulos 3 y4, profundizaremos en las construcciones de Linux de las que están hechos los contenedores. Esto te permitirá comprender qué son realmente los contenedores y hasta qué punto están aislados unos de otros. Compararemos esto con el aislamiento de las máquinas virtuales en el Capítulo 5.
En el Capítulo 6 aprenderás sobre el contenido de las imágenes de contenedor y considerarás algunas buenas prácticas para construirlas de forma segura. El Capítulo 7 aborda la necesidad de identificar las imágenes contenedoras con vulnerabilidades de software conocidas.
En el Capítulo 8 veremos algunas medidas de seguridad opcionales de Linux que pueden aplicarse para endurecer los contenedores más allá de la implementación básica que vimos en el Capítulo 4. En el Capítulo 9 estudiaremos las formas en que el aislamiento de los contenedores puede verse comprometido por errores de configuración peligrosos pero habituales.
Luego pasaremos a las comunicaciones entre contenedores. El Capítulo 10 examina cómo se comunican los contenedores y explora formas de aprovechar las conexiones entre ellos para mejorar la seguridad. El Capítulo 11 explica los fundamentos de las claves y los certificados, que los componentes en contenedores pueden utilizar para identificarse entre sí y establecer conexiones de red seguras entre ellos. Esto no es distinto para los contenedores que para cualquier otro componente, pero se incluye este tema porque las claves y los certificados suelen ser fuente de confusión en los sistemas distribuidos. En el Capítulo 12 veremos cómo los certificados y otras credenciales pueden pasarse de forma segura (o no tan segura) a los contenedores en tiempo de ejecución.
En el Capítulo 13 estudiaremos las formas en que las herramientas de seguridad pueden prevenir los ataques en tiempo de ejecución, aprovechando las características de los contenedores.
Por último, el Capítulo 14 revisa los 10 principales riesgos de seguridad publicados por el Proyecto de Seguridad de Aplicaciones Web Abiertas y considera los enfoques específicos de los contenedores para abordarlos. Spoiler alert: algunos de los principales riesgos de seguridad se abordan exactamente de la misma manera tanto si tu aplicación está en contenedores como si no.
Una nota sobre Kubernetes
Hoy en día, la mayoría de la gente que utiliza contenedores lo hace bajo el orquestador Kubernetes. Un orquestador automatiza el proceso de ejecución de diferentes cargas de trabajo en un clúster de máquinas, y hay partes de este libro en las que asumiré que tienes una comprensión básica de este concepto. En general, he intentado centrarme en conceptos que actúan a nivel de los contenedores subyacentes, el "plano de datos" en una implementación de Kubernetes.
Dado que las cargas de trabajo de Kubernetes se ejecutan en contenedores, este libro es relevante para la seguridad de Kubernetes, pero no es un tratamiento exhaustivo de todo lo relacionado con la seguridad de Kubernetes o de las Implementaciones nativas de la nube. Hay muchas otras cuestiones relacionadas con la configuración y el uso de los componentes del plano de control que quedan fuera del alcance de este libro. Si quieres saber más sobre este tema, quizá te interese el informe Seguridad de Kubernetes de O'Reilly (del que soy coautor con Michael Hausenblas).
Ejemplos
Hay muchos ejemplos en este libro, y te animo a que los pruebes por ti mismo.
En los ejemplos asumo que te sientes cómodo con las herramientas básicas de la línea de comandos de Linux, como ps
y grep
, y con las actividades cotidianas básicas de ejecución de aplicaciones en contenedores mediante el uso de herramientas como kubectl
o docker
. ¡Este libro utilizará el primer conjunto de herramientas para explicar mucho más sobre lo que ocurre cuando utilizas el segundo!
Para seguir los ejemplos de este libro, necesitarás tener acceso a una máquina Linux o a una máquina virtual. He creado los ejemplos utilizando una máquina virtual Ubuntu 19.04 que funciona con VirtualBox en mi Mac; también utilizo Vagrant para crear, iniciar y detener mis máquinas virtuales. Deberías poder conseguir resultados similares en diferentes distribuciones de Linux y utilizando máquinas virtuales de tu proveedor de nube favorito.
Cómo ejecutar contenedores
Para muchas personas, su principal (quizás única) experiencia de ejecutar contenedores directamente es con Docker. Docker democratizó el uso de contenedores proporcionando un conjunto de herramientas que los desarrolladores encontraron generalmente fáciles de usar. Desde un terminal, manipulas contenedores e imágenes de contenedores utilizando el comando docker
.
Esta herramienta de docker
es en realidad una fina capa que hace llamadas a la API del componente principal de Docker: un demonio que hace todo el trabajo duro. Dentro del demonio hay un componente llamado containerd
que se invoca cada vez que quieres ejecutar un contenedor. El componente containerd
se asegura de que la imagen del contenedor que quieres ejecutar está en su sitio, y luego llama a un componente runc
para que se encargue de instanciar realmente un contenedor.
Si quieres, puedes ejecutar tú mismo un contenedor invocando directamente a containerd
o incluso a runc
. El proyecto containerd
fue donado por Docker a la Cloud Native Computing Foundation (CNCF) en 2017.
Kubernetes utiliza una interfaz denominada Interfaz de Tiempo de Ejecución de Contenedores (IRC), bajo la cual los usuarios pueden optar por un tiempo de ejecución de contenedores de su elección. Las opciones más utilizadas actualmente son las ya mencionadas containerd
y CRI-O
(que se originó en Red Hat antes de ser donado al CNCF).
La CLI de docker
es sólo una opción para gestionar contenedores e imágenes. Hay varias otras que puedes utilizar para ejecutar el tipo de contenedores de aplicaciones que se tratan en este libro. La herramienta podman
de Red Hat, concebida originalmente para eliminar la dependencia de un componente demonio, es una de esas opciones.
Los ejemplos de este libro utilizan distintas herramientas de contenedores para ilustrar que existen múltiples implementaciones de contenedores que comparten muchas características comunes.
Comentarios
Hay un sitio web en containersecurity. tech que acompaña a este libro. Te invitamos a plantear allí cuestiones con comentarios y cualquier corrección que te gustaría ver en futuras ediciones.
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
-
Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Nota
Este elemento significa una nota general.
Utilizar ejemplos de código
El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://containersecurity.tech.
Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a bookquestions@oreilly.com.
Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.
Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Seguridad de Contenedores por Liz Rice (O'Reilly). Copyright 2020 Vertical Shift Ltd., 978-1-492-05670-6".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante más de 40 años, O'Reilly Media ha proporcionado formación, conocimientos y perspectivas sobre tecnología y negocios para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.
Cómo contactar con nosotros
Dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/container-security.
Envía un correo electrónico a bookquestions@oreilly.com para comentar o hacer preguntas técnicas sobre este libro.
Para más información sobre nuestros libros, cursos y noticias, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Estoy agradecida a muchas personas que me han ayudado y apoyado durante el proceso de escribir este libro.
-
Mi editora en O'Reilly, Virginia Wilson, por mantener todo en orden y asegurarse de que el libro está a la altura.
-
Los revisores técnicos que aportaron comentarios reflexivos y retroalimentación procesable: Akhil Behl, Alex Pollitt, Andrew Martin, Erik St. Martin, Phil Estes, Rani Osnat y Robert P. J. Day.
-
Mis colegas de Aqua Security, que tanto me han enseñado sobre la seguridad de los contenedores a lo largo de los años.
-
Phil Pearl: mi marido, mi mejor crítico y entrenador, y mi mejor amigo.
Get Seguridad de los contenedores now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.