Finalmente, está tan enamorado de Docker que desea mover sus sistemas de producción críticos para el negocio en línea con datos confidenciales de los clientes a un Docker Swarm. Algunos incluso podrían haberlo hecho. La otra organización no puede permitírselo mediante una política que prohíbe los procesos de producción que se ejecutan en modo raíz.
¿Cuál podría ser una lista de verificación de bloques de construcción a considerar para un entorno de producción de Docker? Uno no los necesita a todos, pero todos deben ser importantes para ser evaluados.
Descargo de responsabilidad: Sé que hay una política de SE para evitar "grandes listas interminables", pero creo que esta lista de verificación no puede ser muy grande ... y de todos modos infinita.
Entonces, ¿qué son estos bloques de construcción?
- Si aún no está implementado, considere ejecutar un sistema host Linux con configuraciones de seguridad avanzadas: kernel reforzado, SELinux, etc.
- Considere usar una pequeña imagen base de Docker, como alpine, busybox o incluso scratch, por ejemplo, comience con una imagen base vacía
- Utilice la configuración de USUARIO que no sea root
- Evalúe cuidadosamente para reducir aún más el conjunto ya reducido de capacidades de kernel otorgadas al contenedor
- Considere tener solo un binario ejecutable por contenedor para iniciar su proceso, idealmente vinculado estáticamente
- Aquellos que quieran romper su sistema para obtener un acceso de shell pueden preguntarse si descubrieron que su contenedor tiene todos los shells desactivados
- Monte volúmenes de solo lectura donde solo sea posible
Pregunta: ¿qué más?
devsecops
?Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image
mejora la seguridad?Respuestas:
El host en el que se ejecutan los contenedores.
Ejecute el banco de seguridad de Docker en cada nodo que ejecute contenedores Docker https://github.com/docker/docker-bench-security
Ejecutando el siguiente comando en un nodo que ejecuta contenedores acoplables:
devuelve una lista de cheques:
Cita del repositorio README:
Algunos de los problemas que informa el banco de seguridad podrían resolverse leyendo el artículo oficial de seguridad de la ventana acoplable y comparándolo con las viñetas que se definen en la pregunta, las siguientes cosas también son importantes:
DOCKER_CONTENT_TRUST
variablefuente
Docker todavía está en desarrollo.
Al igual que con cualquier otro software, los errores en el desarrollo sucederán, podrían agregarse características inseguras, podría haber fallas arquitectónicas que conduzcan a violaciones de seguridad. ¡No subestimes esto! Su sistema podría estar completamente seguro hoy, pero con el parche de la próxima semana, alguien encuentra un error, escribe un exploit y, de repente, su sistema está completamente abierto.
A menos que deba hacerlo, no actualice a la última versión. Utilice la última versión bien probada en su lugar.
Docker no es virtualización
Si alguien escapa de un contenedor Docker, ese atacante está en la máquina real de inmediato. No hay una segunda puerta como la virtualización que evite una violación.
Trate un contenedor Docker como cualquier otro programa. Ejecute con los derechos de usuario más bajos posibles, bloquee todo el tráfico de red que no sea necesario, virtualice todo el host Docker si el rendimiento lo permite.
Docker no es protección
Cualquier código que se ejecute dentro de los contenedores Docker se ejecuta sin preguntas de Docker. Cualquier atacante puede simplemente instalar su software dentro del contenedor, y Docker lo ejecutaría como cualquier otro código.
Además de las cosas que mencionó en la pregunta, considere usar métricas y alertas para recibir notificaciones si alguna imagen de Docker está haciendo cosas extrañas. ¿Hay un pico repentino y continuo de CPU? ¿El programa está escaneando repentinamente los puertos de red? ¿Hay acceso sospechoso al disco? Debería recibir una notificación si algo de eso sucede. Hay muchas herramientas disponibles para medir estas cosas, debe usarlas.
fuente
Imágenes de Docker en sí
Una opción adicional es usar Clair .
fuente
Además de los puntos en este hilo; La siguiente sería mi recomendación:
fuente
Si está llenando su punto de entrada de Docker con
sed
comandos, considere esta práctica:Confd leerá los datos de muchos almacenes de valores clave compatibles y representará las plantillas de configuración de forma dinámica.
fuente
Se podría usar A2D para hornear una aplicación en una imagen acoplable mientras se tienen en cuenta ciertas cosas, por ejemplo, permisos no root, ubicación de la aplicación:
devoluciones:
fuente