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.
Implemente controles de acceso basados en atributos de detección para subredes públicas mediante AWS Config
Creado por Alberto Menendez (AWS)
Resumen
Las arquitecturas de redes perimetrales distribuidas se basan en la seguridad perimetral de la red que se ejecuta junto con las cargas de trabajo de sus nubes privadas virtuales (). VPCs Esto proporciona una escalabilidad sin precedentes en comparación con el enfoque centralizado más común. Si bien la implementación de subredes públicas en las cuentas de carga de trabajo puede ofrecer beneficios, también presenta nuevos riesgos de seguridad porque aumenta la superficie expuesta a ataques. Se recomienda implementar solo los recursos de Elastic Load Balancing, como los balanceadores de carga de aplicaciones o las puertas de enlace NAT, en las subredes públicas de estos. VPCs El uso de equilibradores de carga y puertas de enlace NAT en subredes públicas dedicadas le ayuda a implementar un control detallado del tráfico entrante y saliente.
Le recomendamos que implemente controles preventivos y de detección para limitar los tipos de recursos que se pueden implementar en las subredes públicas. Para obtener más información sobre el uso del control de acceso basado en atributos (ABAC) para implementar controles preventivos en las subredes públicas, consulte Implementación de controles de acceso preventivos basados en atributos para las subredes públicas. Si bien son eficaces en la mayoría de las situaciones, es posible que estos controles preventivos no aborden todos los casos de uso posibles. Por lo tanto, este patrón se basa en el enfoque ABAC y le ayuda a configurar alertas sobre los recursos no conformes que se despliegan en las subredes públicas. La solución comprueba si las interfaces de red elásticas pertenecen a un recurso que no está permitido en las subredes públicas.
Para lograrlo, este patrón utiliza reglas AWS Config personalizadas y ABAC
Para determinar si la interfaz de red está dentro del ámbito de aplicación de la regla, la regla comprueba si la subred tiene AWS etiquetas específicas que indican que es una subred pública. Por ejemplo, esta etiqueta podría ser.
IsPublicFacing=True
Si la interfaz de red está desplegada en una subred pública, la regla comprueba quién Servicio de AWS creó este recurso. Si el recurso no es un recurso de Elastic Load Balancing o una puerta de enlace NAT, lo marca como no conforme.
Requisitos previos y limitaciones
Requisitos previos
Un activo Cuenta de AWS
AWS Config, configurado en la cuenta de carga de trabajo
Permisos para implementar los recursos necesarios en la cuenta de carga de trabajo
Una VPC con subredes públicas
Etiquetas aplicadas correctamente para identificar las subredes públicas de destino
(Opcional) Una organización de AWS Organizations
(Opcional) Una cuenta de seguridad central que es la administradora delegada de AWS Config y AWS Security Hub
Arquitectura
Arquitectura de destino

En el siguiente diagrama se ilustra lo siguiente:
Cuando se implementa o modifica un recurso de interface de red elástica (
AWS::EC2::NetworkInterface
), AWS Config captura el evento y la configuración.AWS Config compara este evento con la regla personalizada utilizada para evaluar la configuración.
Se invoca la AWS Lambda función asociada a esta regla personalizada. La función evalúa el recurso y aplica la lógica especificada para determinar si la configuración del recurso es
COMPLIANT
,NON_COMPLIANT
oNOT_APPLICABLE
.Si se determina que un recurso lo es
NON_COMPLIANT
, AWS Config envía una alerta a través de Amazon Simple Notification Service (Amazon SNS).nota
Si esta cuenta es una cuenta de miembro AWS Organizations, puede enviar los datos de conformidad a una cuenta de seguridad central mediante AWS Config o AWS Security Hub.
Lógica de evaluación de funciones Lambda
El siguiente diagrama muestra la lógica aplicada por la función Lambda para evaluar la conformidad de la elastic network interface.

Automatizar y escalar
Este patrón es una solución detectivesca. También puede complementarlo con una regla de corrección para resolver automáticamente cualquier recurso que no cumpla con las normas. Para obtener más información, consulte Corregir los recursos no conformes con reglas. AWS Config
Puede escalar esta solución de la siguiente manera:
Exigir la aplicación de las AWS etiquetas correspondientes que establezca para identificar las subredes públicas. Para obtener más información, consulte las políticas de etiquetas en la documentación. AWS Organizations
Configurar una cuenta de seguridad central que aplique la regla AWS Config personalizada a todas las cuentas de carga de trabajo de la organización. Para obtener más información, consulte Automatizar el cumplimiento de la configuración a gran escala AWS
(entrada del AWS blog). Integrarse AWS Config con AWS Security Hub para capturar, centralizar y notificar a escala. Para obtener más información, consulte Configuración AWS Config en la AWS Security Hub documentación.
Herramientas
AWS Configproporciona una vista detallada de los recursos que tiene Cuenta de AWS y de cómo están configurados. Le ayuda a identificar cómo se relacionan los recursos entre sí y cómo han cambiado sus configuraciones a lo largo del tiempo.
Elastic Load Balancing permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Por ejemplo, puede distribuir el tráfico entre instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2) en una o más zonas de disponibilidad.
AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
Amazon Simple Notification Service (Amazon SNS) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
Amazon Virtual Private Cloud (Amazon VPC) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.
Prácticas recomendadas
Para obtener más ejemplos y prácticas recomendadas para desarrollar AWS Config reglas personalizadas, consulte el repositorio de AWS Config reglas
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Crear la función de Lambda. |
| AWS general |
Añada permisos a la función de ejecución de la función Lambda. |
| AWS general |
Recupere la función de Lambda Amazon Resource Name (ARN). |
| AWS general |
Cree la regla AWS Config personalizada. |
| AWS general |
Configura las notificaciones. |
| AWS general |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un recurso que cumpla con las normas. |
| AWS general |
Cree un recurso que no cumpla con las normas. |
| AWS general |
Cree un recurso que no sea aplicable. |
| AWS general |
Recursos relacionados
AWS documentación
AWS Otros recursos
Información adicional
El siguiente es un ejemplo de función Lambda que se proporciona con fines de demostración.
import boto3 import json import os # Init clients config_client = boto3.client('config') ec2_client = boto3.client('ec2') def lambda_handler(event, context): # Init values compliance_value = 'NOT_APPLICABLE' invoking_event = json.loads(event['invokingEvent']) configuration_item = invoking_event['configurationItem'] status = configuration_item['configurationItemStatus'] eventLeftScope = event['eventLeftScope'] # First check if the event configuration applies. Ex. resource event is not delete if (status == 'OK' or status == 'ResourceDiscovered') and not eventLeftScope: compliance_value = evaluate_change_notification_compliance(configuration_item) config_client.put_evaluations( Evaluations=[ { 'ComplianceResourceType': invoking_event['configurationItem']['resourceType'], 'ComplianceResourceId': invoking_event['configurationItem']['resourceId'], 'ComplianceType': compliance_value, 'OrderingTimestamp': invoking_event['configurationItem']['configurationItemCaptureTime'] }, ], ResultToken=event['resultToken']) # Function with the logs to evaluate the resource def evaluate_change_notification_compliance(configuration_item): is_in_scope = is_in_scope_subnet(configuration_item['configuration']['subnetId']) if (configuration_item['resourceType'] != 'AWS::EC2::NetworkInterface') or not is_in_scope: return 'NOT_APPLICABLE' else: alb_condition = configuration_item['configuration']['requesterId'] in ['amazon-elb'] nlb_condition = configuration_item['configuration']['interfaceType'] in ['network_load_balancer'] nat_gateway_condition = configuration_item['configuration']['interfaceType'] in ['nat_gateway'] if alb_condition or nlb_condition or nat_gateway_condition: return 'COMPLIANT' return 'NON_COMPLIANT' # Function to check if elastic network interface is in public subnet def is_in_scope_subnet(eni_subnet): subnet_description = ec2_client.describe_subnets( SubnetIds=[eni_subnet] ) for subnet in subnet_description['Subnets']: for tag in subnet['Tags']: if tag['Key'] == os.environ.get('TAG_KEY') and tag['Value'] == os.environ.get('TAG_VALUE'): return True return False