Protección de una aplicación web que se ejecuta en AWS
Visión de conjunto
Protección — El siguiente trabajo se inspiró en los talleres de seguridad de AWS. El proyecto se bifurcó y amplió para incluir la implementación en un entorno real, mayores controles de seguridad y capacidades de auditoría.
Para ver el original, vaya a https://catalog.us-east-1.prod.workshops.aws/
Seguridad de la infraestructura
La primera etapa del proyecto es configurar la infraestructura central y probar el acceso.
En resumen, se creará lo siguiente:
- VPC con gateway de Internet, tablas de enrutamiento, rutas, asociaciones de subredes, subredes públicas
- Instancias EC2 con grupo de seguridad, volúmenes montados en EBS, par de claves para acceso ssh y aplicación web en ejecución
- Balanceador de carga de aplicaciones con agentes de escucha (http, https), grupo objetivo, certificado emitido por ACM, grupo de seguridad
- Zona alojada de Route53 con resolución de DNS de registro A para ALB que cubre el dominio (kingan916.com) y todos los subdominios
El núcleo funcional de este proyecto girará en torno a un servidor web React que servirá contenido estático. El servidor se implementa mejor como un servicio systemd. Systemd es un administrador de sistemas que se puede usar para implementar y administrar procesos de usuario. El servidor se implementa en el puerto 3000 mediante el usuario ec2. Inicialmente, se implementó en el puerto 80, pero eso requiere que el servidor se ejecute con privilegios de raíz. Esto es menos que ideal ya que toda la máquina está expuesta al acceso de root si se descubre alguna vulnerabilidad. Lo mejor es seguir la regla de privilegios mínimos para ejecutar el servicio en el puerto 3000.
Se implementará en la VPC predeterminada en una subred pública.
Un equilibrador de carga elástico se ubicará entre el cliente que realiza la solicitud y el servidor. El equilibrador de carga se configurará para redirigir las solicitudes http a https, así como para reenviar la solicitud al servidor React.
El primer paso es implementar las instancias EC2 en un grupo objetivo. Esto permitirá una escalabilidad más sencilla de la plataforma y aumentará la confiabilidad, ya que una solicitud puede dirigirse al grupo objetivo y no a un nodo individual.
Las instancias EC2 se configurarán para consumir solo del ELB mediante la configuración del grupo de seguridad asociado. El grupo de seguridad aceptará la conexión solo desde el ELB, eliminando así el acceso directo a las instancias.
El siguiente paso es configurar una zona alojada dentro de Route53. Será necesario registrar un nombre de dominio y el registro A correspondiente para enrutar el tráfico al oyente del balanceador de carga.
También será necesario emitir un certificado público de AWS Certificate Manager. El certificado público se asociará al nombre de dominio registrado y garantizará que el tráfico pueda atravesar la Internet pública utilizando el protocolo https. Esto asegura contra los ataques de intermediarios y los datos pueden llegar a la plataforma sin ser expuestos o manipulados. Una vez que una solicitud ha llegado a la red de AWS, no será necesario cifrar más conexiones, por lo que la conexión desde el balanceador de carga al servidor web de React podrá enviarse como una solicitud http estándar.
Gestión de acceso e identidad
Una vez que estemos satisfechos con la seguridad central, podemos pasar a la autenticación de los usuarios.
Registro y monitoreo
Configuración de la supervisión
Cree una alarma de CloudWatch para supervisar el recuento de hosts en buen estado.
Configure el tema de SNS para recibir alertas de CloudWatch.
Configure ChatBot y use OAuth 2.0 para integrar el canal Slack
Auditoría
Ejecutar configuración de AWS
Servicios
, Service "Security, Identity, & Compliance", Cognito "Security, Identity, & Compliance", IAM "Security, Identity, & Compliance", Certificate Manager Networking & Content Delivery, VPC Networking & Content Delivery, API Gateway Networking & Content Delivery, Route53 Networking & Content Delivery, Elastic Load Balancing Compute, EC2 Compute, Lambda Database, DynamoDB Front-end Web & Mobile, Amplify Management & Governance, CloudWatch Management & Governance, Cloud Formation Management & Governance, AWS Chatbot Management & Governance, SNS External, Slack