¿Cuál es la mejor manera de aprender a diseñar un sistema de servicios web de Amazon seguro y escalable?

Honestamente, la mejor manera de abordar la seguridad es pensar como un tipo malo. Cuando piensa como ellos, puede pensar en formas de evitar que lleguen a su infraestructura, datos o cualquier activo que esté tratando de proteger.

Ejemplo, tengo un sitio web y una base de datos que almacena nombres de usuario y contraseñas, así como cualquier otra identificación personal. Como un tipo malo, trataría de escanear puertos en sus servidores en busca de puertos de servicio conocidos como SQL (puerto 3306), SSH (puerto 22), telnet (puerto 23, espero que nadie use esto para administrar sus servidores en la nube) , y cualquier otro puerto de servicio. Usaría la fuerza bruta para entrar. Intentaría averiguar la versión de software de sus servidores y correlacionarlos con una base de datos de vulnerabilidad y exposición común (CVE) como bugtraq. Usaría cualquier herramienta de pentesting para ejecutar un conjunto de inyecciones SQL en sus formularios y URL. O simplemente lo haría, simplemente usaría la ingeniería social para que su administrador o cualquier empleado abra un enlace malicioso que instale un troyano. Luego, ese troyano puede registrar cualquier forma de acceso al servidor, cualquier otra dirección IP del servidor, etc.

Sí, lo que detallé es un poco avanzado, sin embargo, dado lo que puede hacer un buen tipo malo, así es como puede proteger su infraestructura en AWS. Bloquee el acceso a sus puertos de servicio restringiéndoles las direcciones IP autorizadas. En AWS, bloquearía el puerto SSH en los servidores de producción al no permitir ninguna dirección IP. Solo cuando necesita acceso es cuando debe permitir el acceso a través de la GUI de AWS. En cuanto a su base de datos, restrinja qué dirección IP puede acceder a ella. No permita el acceso global a él. Para evitar inyecciones de SQL, utilice marcos conocidos. Normalmente, estos marcos proporcionarán validaciones de cadena y límites de longitud de cadena. Para servidores web basados ​​en PHP, puede usar CodeIgniter y para Python puede usar Django. Antes de implementar sus servicios en los servidores de producción, asegúrese de desactivar cualquier configuración de depuración, ya que estos pueden proporcionar pistas sobre el tipo malo de la versión de software que está utilizando.

Ahora solo he tocado la superficie cuando se trata de seguridad. Puede hacer más para bloquear la infraestructura y los servicios. Si tiene un servicio que se utiliza para almacenar “cosas”, entonces tendrá que pensar en formas de evitar que las personas lo usen para distribuir software ilegal, pornografía o cualquier otro elemento indeseable. Si tiene que proteger la privacidad de sus clientes, debe pensar en formas de evitar que sus cuentas sean secuestradas asegurando enlaces cifrados SSL fuertes al pasar datos de un lado a otro y para evitar que las contraseñas se envíen por el claro. Si tiene datos confidenciales que se transmiten a otro servicio, debe comprender qué datos está enviando y qué hará el tercero con esos datos. ¿Lo guardarán durante mucho tiempo y lo replicarán? Para conocer la disponibilidad, tendrá que pensar en cómo va a crear instancias de conmutación por error para garantizar que su servicio se mantenga activo durante los ataques DoS, cómo manejará su plan de respaldo cuando su base de datos se caiga y mucho más.

Como resumen, piense como un mal tipo. ¿Qué haría un chico malo para entrar y causar estragos? Cuando sabes cómo atacar, es solo cuando puedes entender cómo construir defensas adecuadas.

Puedo sugerirle que lea en nuestro blog.newvem.com. Encontrará artículos sobre Seguridad y HA, incluidas presentaciones de los principales usuarios de la nube, como Netflix. También le sugiero que consulte los foros de desarrolladores de Amazon AWS: https://forums.aws.amazon.com/in … incluido el seguimiento de los grandes expertos en la nube de AWS como Eric https://forums.aws.amazon.com/pr … y Shlomo https://forums.aws.amazon.com/pr…