Envía alertas desde AWS Network Firewall a un canal de Slack - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Envía alertas desde AWS Network Firewall a un canal de Slack

Creado por Venki Srivatsav (AWS) y Aromal Raj Jayarajan () AWS

Repositorio de código: NfwSlackIntegration

Entorno: PoC o piloto

Tecnologías: seguridad, identidad, conformidad; redes

AWSservicios: AWS Lambda; AWS Network Firewall; Amazon S3

Resumen

Este patrón describe cómo implementar un firewall mediante el Firewall de red de Amazon Web Services (AWS) con el modelo de implementación distribuida y cómo propagar las alertas generadas por AWS Network Firewall a un canal de Slack configurable. 

Los estándares de conformidad, como el Estándar de seguridad de datos del sector de las tarjetas de pago (PCIDSS), exigen la instalación y el mantenimiento de un firewall para proteger los datos de los clientes. En la AWS nube, una nube privada virtual (VPC) se considera igual que una red física en el contexto de estos requisitos de conformidad. Puede usar Network Firewall para monitorear el tráfico de red entre VPCs y proteger las cargas de trabajo que VPCs se ejecutan en conformidad con un estándar de conformidad. Network Firewall bloquea el acceso o genera alertas cuando detecta un acceso no autorizado desde otra VPCs persona de la misma cuenta. Sin embargo, Network Firewall admite un número limitado de destinos para enviar las alertas. Estos destinos incluyen depósitos de Amazon Simple Storage Service (Amazon S3), grupos de registros de CloudWatch Amazon y transmisiones de entrega de Amazon Data Firehose. Cualquier otra acción relacionada con estas notificaciones requiere un análisis fuera de línea mediante Amazon Athena o Amazon Kinesis. 

Este patrón proporciona un método para propagar las alertas generadas por Network Firewall a un canal de Slack configurable para tomar medidas adicionales casi en tiempo real. También puede ampliar la funcionalidad a otros mecanismos de alerta PagerDuty, como Jira y el correo electrónico. (Esas personalizaciones quedan fuera del alcance de este patrón). 

Requisitos previos y limitaciones

Requisitos previos 

  • Canal de Slack (consulte Primeros pasos en el centro de ayuda de Slack)

  • Privilegios necesarios para enviar un mensaje al canal

  • El punto de conexión de Slack URL con un API token (selecciona tu aplicación y elige un webhook entrante para verlaURL; para obtener más información, consulta Cómo crear un webhook entrante en la documentación de Slack) API 

  • Una instancia de prueba de Amazon Elastic Compute Cloud (AmazonEC2) en las subredes de carga de trabajo

  • Reglas de prueba en Network Firewall

  • Tráfico real o simulado para activar las reglas de prueba

  • Un bucket de S3 para almacenar los archivos fuente que se van a implementar

Limitaciones

  • Actualmente, esta solución solo admite un rango de enrutamiento entre dominios sin clase (CIDR) como filtro para el origen y el destino. IPs

Arquitectura

Pila de tecnología de destino

  • Uno VPC

  • Cuatro subredes (dos para el firewall y dos para las cargas de trabajo) 

  • Puerta de enlace de Internet

  • Cuatro tablas de enrutamiento con reglas 

  • El bucket de S3 se utiliza como destino de alertas y se configura con una política de bucket y una configuración de eventos para ejecutar una función de Lambda

  • Función de Lambda con un rol de ejecución, para enviar notificaciones de Slack

  • AWSSecrets Manager: secreto para almacenar Slack URL

  • Firewall de red con configuración de alertas

  • Canal de Slack

Todos los componentes, excepto el canal de Slack, se aprovisionan mediante las CloudFormation plantillas y la función Lambda que se proporcionan con este patrón (consulta la sección Código).

Arquitectura de destino

Este patrón configura un firewall de red descentralizado con integración con Slack. Esta arquitectura consta de una VPC con dos zonas de disponibilidad. VPCIncluye dos subredes protegidas y dos subredes de firewall con puntos finales de firewall de red. Todo el tráfico que entra y sale de las subredes protegidas se puede supervisar mediante la creación de políticas y reglas de firewall. El firewall de la red está configurado para colocar todas las alertas en un bucket de S3. Este bucket de S3 está configurado para llamar a una función de Lambda cuando recibe un evento put. La función Lambda recupera el Slack configurado de Secrets URL Manager y envía el mensaje de notificación al espacio de trabajo de Slack.

Arquitectura de destino para un firewall de red descentralizado con integración con Slack.

Para obtener más información sobre esta arquitectura, consulte la entrada del AWS blog Modelos de implementación para AWS Network Firewall.

Herramientas

AWSservicios

  • AWSNetwork Firewall es un firewall de red gestionado y con estado y un servicio de detección y prevención de intrusiones para VPCs la AWS nube. Puede usar Network Firewall para filtrar el tráfico en su perímetro VPC y proteger sus cargas de trabajo. AWS

  • AWSSecrets Manager es un servicio de almacenamiento y recuperación de credenciales. Con Secrets Manager, puedes reemplazar las credenciales codificadas en tu código, incluidas las contraseñas, por una API llamada a Secrets Manager para recuperar el secreto mediante programación. Este patrón usa Secrets Manager para almacenar el SlackURL.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos. Puede utilizar Amazon S3 para almacenar y recuperar cualquier cantidad de datos en cualquier momento y desde cualquier parte de la web. Este patrón utiliza Amazon S3 para almacenar las CloudFormation plantillas y el script de Python para la función Lambda. También utiliza un bucket de S3 como el destino de alerta del firewall de red.

  • AWS CloudFormationle ayuda a modelar y configurar sus AWS recursos, a aprovisionarlos de forma rápida y coherente y a gestionarlos durante todo su ciclo de vida. Facilita poder usar una plantilla para describir los recursos y sus dependencias, y lanzarlos y configurarlos juntos como una pila, en lugar de administrarlos de forma individual. Este patrón se utiliza AWS CloudFormation para implementar automáticamente una arquitectura distribuida para Firewall Manager.

Código

El código de este patrón está disponible en el GitHub repositorio Network Firewall Slack Integration. En la carpeta src  del repositorio, encontrará:

  • Un conjunto de CloudFormation archivos en YAML formato. Estas plantillas se utilizan para aprovisionar los componentes de este patrón.

  • Un archivo fuente de Python (slack-lambda.py) para crear la función de Lambda.

  • Un paquete de implementación de archivos .zip (slack-lambda.py.zip) para cargar el código de la función de Lambda.

Para usar el código de muestra, siga las instrucciones de la siguiente sección.

Epics

TareaDescripciónHabilidades requeridas

Cree un bucket de S3.

  1. Inicie sesión en la consola AWS de administración y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. Elija o cree un bucket de S3 para alojar el código. El nombre de un bucket de S3 es único a nivel mundial y todas AWS las cuentas comparten el espacio de nombres. El nombre de bucket de S3 no puede incluir barras a la izquierda. Se recomienda utilizar un prefijo para organizar el código de este patrón.

Para más información, consulte Crear un bucket en la documentación de Amazon S3. 

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube

Cargue las CloudFormation plantillas y el código Lambda.

  1. Descargue los siguientes archivos del GitHub repositorio para este patrón:

    • base.yml

    • igw-ingress-route.yml

    • slack-lambda.py

    • slackLambda.yml

    • decentralized-deployment.yml

    • protected-subnet-route.yml

    • slack-lambda.py.zip

  2. Cargue los archivos en el bucket de S3 que ha creado. 

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube
TareaDescripciónHabilidades requeridas

Lanza la CloudFormation plantilla.

Abra la AWS CloudFormation consola en la misma AWS región que su bucket de S3 e implemente la plantillabase.yml. Esta plantilla crea los AWS recursos y las funciones Lambda necesarios para que las alertas se transmitan al canal de Slack.

Para obtener más información sobre la implementación de CloudFormation plantillas, consulta Cómo crear una pila en la AWS CloudFormation consola en la CloudFormation documentación.

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube

Complete los parámetros de la plantilla.

Especifique el nombre de la pila y configure los valores de los parámetros. Para obtener una lista de los parámetros, sus descripciones y valores predeterminados, consulte CloudFormation los parámetros en la sección de información adicional.

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube

Cree la pila.

  1. Revise los detalles de la pila y actualice los valores en función de los requisitos de su entorno.

  2. Elija Crear pila para implementar la plantilla.

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube
TareaDescripciónHabilidades requeridas

Probar la implementación.

Utilice la AWS CloudFormation consola o la interfaz de línea de AWS comandos (AWSCLI) para comprobar que se han creado los recursos que figuran en la sección Pila de tecnologías de Target.  

Si la CloudFormation plantilla no se implementa correctamente, compruebe los valores que proporcionó para los pAvailabilityZone2  parámetros pAvailabilityZone1  y. Deberían ser adecuados para la AWS región en la que vaya a implementar la solución. Para obtener una lista de las zonas de disponibilidad de cada región, consulta Regiones y zonas en la EC2 documentación de Amazon. 

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube

Pruebe la funcionalidad.

1. Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/.

2. Cree una EC2 instancia en una de las subredes protegidas. Elija Amazon Linux 2 AMI (HVM) para usarlo como HTTPS servidor. Para obtener instrucciones, consulta Cómo lanzar una instancia en la EC2 documentación de Amazon.

Nota: Amazon Linux 2 está a punto de finalizar el soporte. Para obtener más información, consulte Amazon Linux 2 FAQs.

3. Utilice los siguientes datos de usuario para instalar un servidor web en la EC2 instancia:

#!/bin/bash yum install httpd -y systemctl start httpd systemctl stop firewalld cd /var/www/html echo "Hello!! this is a NFW alert test page, 200 OK" > index.html

4. Cree las siguientes reglas de firewall de red:

Regla sin estado:

Source: 0.0.0.0/0 Destination 10.0.3.65/32 (private IP of the EC2 instance) Action: Forward

Regla con estado:

Protocol: HTTP Source ip/port: Any / Any Destination ip/port: Any /Any

5. Obtenga la IP pública del servidor web que creó en el paso 3.

6. Acceda a la IP pública en un navegador. Debería ver el siguiente mensaje en el navegador:

Hello!! this is a NFW alert test page, 200 OK

También recibirá una notificación en el canal de Slack. Es posible que la notificación se retrase en función del tamaño del mensaje. Para realizar pruebas, considere la posibilidad de proporcionar un CIDR filtro que no sea demasiado estrecho (por ejemplo, un CIDR valor con /32 se consideraría demasiado estrecho y /8 sería demasiado amplio). Para obtener más información, consulte la sección Comportamiento del filtro en Información adicional.

Desarrollador de aplicaciones, propietario de la aplicación, administrador de la nube

Recursos relacionados

Información adicional

CloudFormation parámetros

Parámetro

Descripción

Valor predeterminado o de muestra

pVpcName

El nombre del que se VPC va a crear.

Inspección

pVpcCidr

El CIDR rango que se va VPC a crear.

10.0.0.0/16

pVpcInstanceTenancy

Cómo se distribuyen las EC2 instancias en el hardware físico. Las opciones son default  (arrendamiento compartido) o dedicated  (arrendamiento único).

predeterminada

pAvailabilityZone1

La primera zona de disponibilidad de la infraestructura. 

us-east-2a 

pAvailabilityZone2

La segunda zona de disponibilidad de la infraestructura.

us-east-2b

pNetworkFirewallSubnet1Cidr

El CIDR rango de la primera subred del firewall (mínimo /28).

10.0.1.0/24

pNetworkFirewallSubnet2Cidr

El CIDR rango de la segunda subred del firewall (mínimo /28).

10.0.2.0/24

pProtectedSubnet1Cidr

El CIDR rango de la primera subred protegida (carga de trabajo).

10.0.3.0/24

pProtectedSubnet2Cidr

El CIDR rango de la segunda subred protegida (carga de trabajo).

10.0.4.0/24

pS3BucketName

El nombre del bucket de S3 existente en el que cargó el código fuente de Lambda.

us-w2- yourname-lambda-functions

pS3KeyPrefix

El prefijo del bucket de S3 en el que cargó el código fuente de Lambda.

aod-test 

pAWSSecretName4Slack

El nombre del secreto que guarda el Slack. URL

SlackEnpoint-Cfn

pSlackChannelName

El nombre del canal de Slack que creó.

somename-notifications

pSlackUserName

Nombre de usuario de Slack.

Usuario de Slack

pSecretKey

Puede ser cualquier clave. Se recomienda usar la configuración predeterminada.

webhookUrl

pWebHookUrl

El valor de Slack. URL

https://hooks.slack.com/services/¿T?? ¿9T? /A031885 JRM7 /9D4Y?????

pAlertS3Bucket

El nombre del bucket de S3 que se utilizará como el destino de la alerta del firewall de red. Este bucket se creará automáticamente.

us-w2- yourname-security-aod-alerts

pSecretTagName

El nombre de la etiqueta del secreto.

AppName

pSecretTagValue

El valor de la etiqueta para el nombre de etiqueta indicado.

LambdaSlackIntegration

pdestCidr

El filtro del rango de destino. CIDR Para obtener más información, consulte la siguiente sección, Filtro comportamiento.

10.0.0.0/16

pdestCondition

Un indicador que indica si se debe excluir o incluir la coincidencia de destino. Para obtener más información, consulte la siguiente sección. Los valores válidos son include  y exclude.

incluir

psrcCidr

El filtro del CIDR rango de origen que se va a alertar. Para obtener más información, consulte la siguiente sección. 

118.2.0.0/16

psrcCondition

El indicador para excluir o incluir la coincidencia de origen. Para obtener más información, consulte la siguiente sección.

incluir

Comportamiento del filtro

Si no has configurado ningún filtro en AWS Lambda, todas las alertas generadas se envían a tu canal de Slack. El origen y el destino IPs de las alertas generadas coinciden con los CIDR rangos que configuraste al implementar la CloudFormation plantilla. Si hay una coincidencia, se aplica la condición. Si el origen o el destino se encuentran dentro del CIDR rango configurado y al menos uno de ellos está configurado con la condicióninclude, se genera una alerta. En las siguientes tablas se proporcionan ejemplos de CIDR valores, condiciones y resultados.

Configurado CIDR

IP de alerta

Configured

Alerta

Origen

10.0.0.0/16

10.0.0.25

incluir

Destino

100.0.0.0/16

202.0.0.13

incluir

Configurado CIDR

IP de alerta

Configured

Alerta

Origen

10.0.0.0/16

10.0.0.25

excluya

No

Destino

100.0.0.0/16

202.0.0.13

incluir

Configurado CIDR

IP de alerta

Configured

Alerta

Origen

10.0.0.0/16

10.0.0.25

incluir

Destino

100.0.0.0/16

100,0.0,13

incluir

Configurado CIDR

IP de alerta

Configured

Alerta

Origen

10.0.0.0/16

90.0.0.25

incluir

Destino

Nulo

202,0,0,13

incluir

Configurado CIDR

IP de alerta

Configured

Alerta

Origen

10.0.0.0/16

90.0.0.25

incluir

No

Destino

100.0.0.0/16

202.0.0.13

incluir