Gestión de múltiples servidores, más de 90 actualmente con 3 devops a través de Ansible. Todo funciona muy bien, sin embargo, hay un gran problema de seguridad en este momento. Cada devop está utilizando su propia clave ssh local para obtener acceso directamente a los servidores. Cada devop usa una computadora portátil, y cada computadora portátil podría verse comprometida, lo que abriría toda la red de servidores de productos hasta un ataque.
Estoy buscando una solución para administrar el acceso de forma centralizada y, por lo tanto, bloquear el acceso a cualquier clave. No es diferente a cómo se agregan las claves a Bitbucket o Github.
Supongo que la solución sería un túnel desde una máquina, la puerta de enlace, al servidor de productos deseado ... al pasar la puerta de enlace, la solicitud tomaría una nueva clave y la usaría para obtener acceso a la unidad. servidor. El resultado sería que podemos eliminar el acceso de manera rápida y eficiente para cualquier devop en cuestión de segundos simplemente negando el acceso a la puerta de enlace.
¿Es esta buena lógica? ¿Alguien ha visto una solución por ahí para frustrar este problema?
fuente
Respuestas:
Eso es demasiado complicado (verificar si una clave tiene acceso a un servidor específico). Use el servidor de puerta de enlace como host de salto que acepta todas las claves válidas (pero puede eliminar fácilmente el acceso a una clave específica que elimina el acceso a todos los servidores) y luego agregue solo las claves permitidas a cada servidor respectivo. Después de eso, asegúrese de que puede alcanzar el puerto SSH de cada servidor solo a través del host de salto.
Este es el enfoque estándar.
fuente
Los ingenieros no deben ejecutar ansible directamente desde su computadora portátil, a menos que este sea un entorno de desarrollo / prueba.
En su lugar, tenga un servidor central que extraiga los runbooks de git. Esto permite controles adicionales (cuatro ojos, revisión de código).
Combine esto con un bastión o host de salto para restringir aún más el acceso.
fuente
Netflix implementó su configuración y lanzó un software gratuito para ayudar a esa situación.
Vea este video https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access o esta presentación en https://speakerdeck.com/rlewis/how-netflix-gives- All-its-ingenieros-ssh-access-to-instance-running-in-production con el punto central:
Su software está disponible aquí: https://github.com/Netflix/bless
Algunas ideas interesantes incluso si no implementa su solución completa:
fuente
OneIdentity (ex-Balabit) SPS es exactamente lo que necesita en este escenario. Con este dispositivo, puede administrar las identidades de los usuarios en prácticamente cualquier máquina, rastrear el comportamiento del usuario, monitorear y alertar, e indexar lo que los usuarios hagan para revisiones posteriores.
fuente
Mi sugerencia es no permitir el acceso SSH desde las máquinas de los usuarios.
En cambio deberías
El modelo de ejecución de muestra,
O
Si está limitado con los recursos del servidor, el mismo servidor Jenkins también puede alojar Git (scm-manager), aunque existe un riesgo de seguridad adicional si una de las máquinas del desarrollador está infectada. Es posible que pueda mitigar esto desconectando el servidor Jenkins de Internet y resolviendo las dependencias Ansible localmente.
fuente