2012-04-02 5 views
7

Estamos en proceso de configurar nuestra infraestructura de TI en Amazon EC2. Asumir una configuración a lo largo de las líneas de: X servidores de producción servidores de plataforma Y intercalación de registro y monitoreo de servidor Servidor de generación de Obviamente tenemos una necesidad de tener varios servidores de hablar unos con otros. Una nueva compilación debe pasar a un servidor de transición. El recopilador de registros necesita extraer registros de los servidores de producción. Nos estamos dando cuenta rápidamente de que estamos teniendo problemas para administrar las claves de acceso. Cada servidor tiene su propio par de claves y posiblemente su propio grupo de seguridad. Estamos terminando copiando archivos * .pem de un servidor a otro tipo de burla de seguridad. El servidor de compilación tiene las claves de acceso de los servidores de transición para conectarse a través de ssh e impulsar una nueva compilación. Los servidores de almacenamiento tienen claves de acceso de las instancias de producción (¡gulp!) . Realicé algunas búsquedas exhaustivas en la red, pero realmente no pude encontrar a nadie que hablara sobre una forma sensata de manejar este problema. ¿Cómo manejan este problema las personas con una configuración similar a la nuestra? Sabemos que nuestra forma actual de trabajar es incorrecta. La pregunta es: ¿cuál es la forma correcta? ¡Apreciar tu ayuda! GraciasAdministración del acceso entre instancias en EC2

[Actualización] Nuestra situación se complica por el hecho de que al menos el servidor de compilación debe ser accesible desde un servidor externo (específicamente, github). Estamos utilizando Jenkins y el enlace de confirmación de publicación necesita una URL públicamente accesible. El enfoque de bastión sugerido por @rook falla en esta situación.

+1

+1 buena pregunta. – rook

Respuesta

5

Un método muy bueno para manejar el acceso a una colección de instancias de EC2 es usando un Bastion Host.

Todas las máquinas que utilice en EC2 deben denegar el acceso SSH a Internet abierto, excepto para el host de bastión. Cree una nueva política de seguridad llamada "host de bastión", y solo permita la entrada del puerto 22 desde el bastión a todas las demás instancias de EC2. Todas las claves utilizadas por su colección EC2 se encuentran en el host bastión. Cada usuario tiene su propia cuenta para el host bastión. Estos usuarios deben autenticarse en el bastión utilizando un archivo de clave protegido con contraseña. Una vez que inician sesión, deben tener acceso a las claves que necesitan para hacer su trabajo. Cuando alguien es despedido, remueve su cuenta de usuario al bastión. Si un usuario copia las claves del bastión, no importará porque no puede iniciar sesión a menos que primero inicie sesión en el bastión.

+0

gracias. Por favor, mira la actualización de mi pregunta – anand

+1

@anand - Esto funcionará de dos maneras: 1) El enlace de commit post de GitHub usa HTTPS, por lo tanto, no se ve afectado por todo SSH, si simplemente eliges abrir el puerto 443 para Jenkins (pero sigue leyendo). 2) Aún mejor sería seguir la sugerencia de Rook para esto también, que requiere una configuración de proxy inverso para el servidor de compilación en el host de bastión; esto puede ser fácil o un poco complicado dependiendo del entorno, pero el plugin de GitHub está preparado para esto, ver [Jenkins dentro de un firewall] (https://wiki.jenkins-ci.org/display/JENKINS/Github+Plugin # GithubPlugin-Jenkinsinsideafirewall). –

+0

excelente. Actualmente tengo el proxy inverso en mi servidor de Jenkins, no había pensado en introducirlo en el bastión. ¡Gracias! – anand

0

Cree dos pares de teclados, uno para los servidores de transición y otro para los servidores de producción. Puede proporcionarles a los desarrolladores las claves de almacenamiento y mantener las claves de producción en privado.

Puse las nuevas compilaciones en S3 y tengo una secuencia de comandos de perl ejecutándose en las cajas para extraer el último código de los depósitos de S3 e instalarlos en los servidores respectivos. De esta manera, no tienes que analizar manualmente todas las compilaciones en cada momento. También puede automatizar este proceso utilizando algún tipo de herramientas de automatización de compilación continua que construirían y descargarían la compilación en sus segmentos de S3, respectivamente. Espero que esto ayude ..

+0

Gracias - ya estamos en el proceso de automatizar la expulsión de la máquina de compilación a un entorno de ensayo (S3 u otros). Por diversas razones, nos gustaría evitar que se ejecute un script de sondeo en una máquina de producción. Además, su enfoque seguirá significando empujar las claves del servidor de transición a cada instancia de producción. No nos sentiríamos cómodos creando un AMI con claves SSH integradas en él. Por lo tanto, no se resuelve el problema de las copias múltiples de las claves – anand

Cuestiones relacionadas