Blog de Amazon Web Services (AWS)

Cómo auditar los recursos en varios múltiples entornos de Microsoft mediante los servicios de AWS

Por Neuton Assis, Enterprise Solutions Architect, AWS WWCS

 

Auditar los diveros recursos de una organización requiere esfuerzo. El desafío aumenta cuando intentamos centralizar estos registros de auditoría, buscando la observabilidad y los controles centralizados para sustentar la toma de decisiones, ya sea automática o manual.

En esta publicación, presentaremos cómo es posible utilizar los servicios de AWS para auditar recursos importantes en un entorno híbrido con de cargas de trabajo Microsoft, centralizando el flujo de entrada de eventos y aplicando un proceso ETL para generar registros estandarizados. Los registros estandarizados se envían a un servicio de análisis de datos, lo que permite retenerlos durante el período deseado y crear dashboards personalizados, lo que permite una vista centralizada del entorno.

Vista general de la solución

El escenario del entorno auditado que se va a presentar está compuesto por:

  • Un bosque de Active Directory que representa el entorno local, con un controlador de dominio alojado en una instancia del servicio Amazon EC2.
  • AWS Managed AD, un servicio de directorio administrado de AWS para Microsoft Active Directory.
  • Amazon FSx para Windows File Server, un servicio de almacenamiento de archivos totalmente gestionado de AWS, compatible con Windows File Server.

Visión de la arquitectura

Pasos a realizar

En este blog mostraremos los siguientes temas:

  • Configuración del dominio local de Active Directory
  • Creación de una instancia de AWS Managed Microsoft AD
  • Configuración de Amazon FSx
  • Configuración del servicio Amazon OpenSearch
  • Configuración de la recopilación de eventos
  • Creación de dashboards con Amazon OpenSearch Dashboards
  • Conclusión

Prerrequisitos

Para la creación de este entorno, ústed necesitará:

  • Una cuenta activa en la nube de AWS
  • Conocimientos técnicos en administración de Active Directory
  • Conexión de red entre su entorno y su cuenta en la nube de AWS

Si aún no dispone de una conexión de red entre el entorno local y la red virtual de su cuenta en la nube, consulte cómo establecer una conexión VPN con su cuenta de AWS para establecer una conexión de red entre los dos entornos.

 

Configurar el dominio local de Active Directory

Para el escenario presentado, es necesario que tenga previamente el entorno local además de su extensión híbrida en la nube de AWS, que es el controlador de dominio de Amazon EC2, que forma parte del dominio local. En caso contrario, cree una instancia de Windows Server en el servicio Amazon EC2, únase al servidor en el dominio local y, a continuación, promuévala a un controlador de dominio.

Además, cree registros de resolución de nombres en Amazon Route 53 Resolver para poder comunicarse a través de DNS entre los diferentes dominios que decida.

También será necesario crear un Objeto de Política de Grupo o Group Policy Object (GPO) con la configuración de auditoría requerida y aplicarla a los controladores de dominio (OU Domain Controllers). De esta forma, las políticas de seguridad locales de cada controlador se habilitarán según sea necesario y el servidor podrá generar eventos de auditoría cuando se realicen acciones en el servicio de directorio.

Cree un GPO y habilite las categorías de eventos relacionadas con el servicio de directorio y los objetos que desea administrar.  Consulte los detalles sobre cómo planificar e implementar cambios en la configuración de auditoría, según las directrices de Microsoft.

Consulte los detalles y el propósito de cada elemento de la categoría en Configuración avanzada de la política de auditoría de seguridad.

Para esta demostración, se han habilitado las categorías mencionadas en la siguiente imagen:

El árbol de objetos de AD tiene una configuración específica de auditoría, similar a las configuraciones que se pueden realizar en una estructura de carpetas. Identifique y aplique la configuración de auditoría que mejor se adapte a su caso de uso.

Para cambiar la configuración del ejemplo que utilizamos en esta demostración, abra el ADSIEdit en un controlador de dominio y realice los cambios, como se muestra a continuación:

  1. En la raíz del dominio, haga clic con el botón derecho del ratón y seleccione «Properties» o su equivalente en el idioma configurado.

  1. Seleccione la pestaña «Security» y haga clic en el botón «Advanced», luego seleccione la pestaña «Auditing» y haga clic en el botón «Add».

  1. Añada el usuario «Everyone», seleccione el tipo «Success» y aplíquelo a «This object and all descendant objects».
  2. Desmarque las opciones de lectura que se seleccionaron de forma predeterminada y seleccione las opciones seleccionadas según la siguiente imagen. Tenga en cuenta que al seleccionar las opciones que se indican a continuación, el resto se marcarán de forma automática.

Crear una instancia de AWS Managed Microsoft AD

AWS Managed Microsoft AD es un servicio de directorio totalmente administrado por AWS que permite unir instancias EC2 de Windows, servidores Windows locales, usuarios, grupos y otros servicios de AWS como miembros de un dominio de Active Directory. Esto hace posible todo el mecanismo de autenticación y control de acceso que ofrece de forma nativa este servicio de directorio.

Siga estas instrucciones para crear un servicio de directorio administrado. Tenga en cuenta los límites de uso gratuito y las condiciones que se ofrecen para AWS Managed Microsoft AD.Si desea aprovechar el repositorio de identidades (usuarios) existente en el dominio local, es posible establecer una relación de confianza entre los dos dominios que permita a los usuarios del dominio local acceder a los recursos que son miembros del dominio administrado por AWS.

Dado que este es un servicio que no es gratuito, recuerde mapear los recursos creados para su posterior eliminación a fin de no incurrir en cargos innecesarios.  Consulte la página de precios de AWS Managed Microsoft AD para obtener más información sobre cómo utilizar la capa gratuita y el precio del servicio.

Configurar Amazon FSx

Amazon FSx es un servicio gestionado que le permite lanzar, ejecutar y escalar sistemas de archivos de alto rendimiento en la nube de forma fiable y segura, y aprovechando una amplia gama de funciones.  Puede elegir entre cuatro sistemas de archivos muy utilizados: ONTAP, OpenZFS, Windows File Server y Lustre de NetApp.

Con el fin de demostrar el entorno auditado de Microsoft, utilizaremos Amazon FSx para Windows File Server en esta publicación.

Cree un servidor de archivos compatible con Windows Server en Amazon FSx (como se muestra en este enlace), habilitando la opción de auditoría de acceso a archivos.

Al igual que con los demás temas, mapee los recursos creados para poder eliminarlos más adelante.  Consulte los precios de este servicio en la página de precios de Amazon FSx para Windows File Server.

Configuración de Amazon OpenSearch Service

Amazon OpenSearch Service es un servicio gestionado para buscar, supervisar y analizar en tiempo real datos empresariales y operativos. Es una suite distribuida de investigación y análisis de código abierto derivada de Elasticsearch.

Es compatible con 19 versiones de Elasticsearch, así como con las funciones de visualización proporcionadas por OpenSearch Dashbo a rds y Kibana.  Esto le permite realizar fácilmente tareas como realizar análisis de registros interactivos, monitorear aplicaciones en tiempo real, buscar sitios web y mucho más.

En esta publicación vamos a utilizar Amazon OpenSearch Service para analizar y ver los registros extraídos de los eventos que provienen de los entornos monitoreados, a través de Amazon CloudWatch.

Si aún no tiene uno, cree un dominio en Amazon OpenSearch Service.

No olvides mapear los recursos creados para poder eliminarlos después de la prueba.  Consulte los detalles sobre los precios de los servicios en la página de precios de Amazon OpenSearch Service.

Configurar la colección de eventos

Instale y configure el agente ClowdWatch en el controlador de dominio mediante AWS System Manager.

  1. Cambie el archivo de configuración de CloudWatch para recopilar eventos y métricas específicos y enviar los datos a la región deseada. El siguiente ejemplo de archivo de configuración está configurado para que CloudWatch envíe eventos a la región del norte de Virginia (us-east-1) a los controladores de dominio de las instancias de EC2:
{

"IsEnabled": false,

"EngineConfiguration": {

"PollInterval": "00:00:15",

"Components": [

{

"Id": "ApplicationEventLog",

"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogName": "Application",

"Levels": "1"

}

},

{

"Id": "SystemEventLog",

"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogName": "System",

"Levels": "7"

}

},

{

"Id": "SecurityEventLog",

"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogName": "Security",

"Levels": "7"

}

},

{

"Id": "ETW",

"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogName": "Microsoft-Windows-WinINet/Analytic",

"Levels": "7"

}

},

{

"Id": "IISLogs",

"FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1",

"TimestampFormat": "yyyy-MM-dd HH:mm:ss",

"Encoding": "UTF-8",

"Filter": "",

"CultureName": "en-US",

"TimeZoneKind": "UTC",

"LineCount": "3"

}

},

{

"Id": "CustomLogs",

"FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"LogDirectoryPath": "C:\\CustomLogs\\",

"TimestampFormat": "MM/dd/yyyy HH:mm:ss",

"Encoding": "UTF-8",

"Filter": "",

"CultureName": "en-US",

"TimeZoneKind": "Local"

}

},

{

"Id": "PerformanceCounter",

"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"CategoryName": "Memory",

"CounterName": "Available MBytes",

"InstanceName": "",

"MetricName": "Memory",

"Unit": "Megabytes",

"DimensionName": "",

"DimensionValue": ""

}

},

{

"Id": "CloudWatchLogs",

"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",

"Parameters": {

"AccessKey": "",

"SecretKey": "",

"Region": "us-east-1",

"LogGroup": "DomainControllers-Log-Group",

"LogStream": "{ip_address}-{hostname}"

}

},

{

"Id": "CloudWatch",

"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",

"Parameters":

{

"AccessKey": "",

"SecretKey": "",

"Region": "us-east-1",

"NameSpace": "Windows/Default"

}

}

],

"Flows": {

"Flows":

[

"(ApplicationEventLog,SystemEventLog,SecurityEventLog),CloudWatchLogs",

"PerformanceCounter,CloudWatch"

]

}

}

}
Code
  1. Configure el directorio de AWS Managed AD para reenviar los eventos generados por las instancias a CloudWatch. Después, configure el reenvío de los logs de  CloudWatch Logs a Amazon OpenSearch para cada grupo de logs generado por el agente de CloudWatch en los controladores de dominio de las instancias EC2 y por los servicios gestionados (AWS Managed AD y Amazon FSx).Personalice la función Lambda generada automáticamente después de configurar el reenvío de los logs, para obtener un proceso ETL personalizado. El nombre de la función Lambda generada comienza por «LogsToElasticSearch_», seguido del dominio de Amazon OpenSearch Service seleccionado al configurar el enrutamiento de los grupos de registro o log.

    Todos los grupos de logs configurados enviarán los logs a la misma función Lambda, donde se someterán a un proceso ETL centralizado.

    Para este ejemplo, utilizamos un código que consume un archivo de configuración JSON, responsable de mapear los eventos generados por los entornos monitoreados, como Microsoft Active Directory:

{

"captureAllEvents": false,

"windowsEvent":{

"default": {

"indexPrefixName": "auditlog-default",

"category": "Default Event Auditing",

"action": "{default}",

"eventDataMap": {

"user": "Event/EventData/Data/[0]",

"computerName": "Event/System/Computer",

"affectedResource": "Event/EventData/Data/[0]",

"detail": "Event/RenderingInfo/Message"

}

},

"4670": {

"indexPrefixName": "auditlog-fs",

"category": "Object Access",

"action": "Permissions on an object were changed",

"eventDataMap": {

"user": "Event/EventData/Data/[5]+\\+Event/EventData/Data/[4]",

"computerName": "Event/System/Computer",

"affectedResource": "Event/EventData/Data/[1]+\\+Event/EventData/Data/[0]",

"detail": "Event/RenderingInfo/Message"

}

},

"4726": {

"indexPrefixName": "auditlog-ad",

"category": "Active Directory Auditing",

"action": "{default}",

"eventDataMap": {

"user": "Event/EventData/Data/[5]+\\+Event/EventData/Data/[4]",

"computerName": "Event/System/Computer",

"affectedResource": "Event/EventData/Data/[1]+\\+Event/EventData/Data/[0]",

"detail": "Event/RenderingInfo/Message"

}

}

}

}
JSON

Este archivo JSON especifica el código sobre cómo asignar los datos del evento al nuevo formato de registro, para aquellos tipos de datos que no siempre están en el mismo lugar durante los eventos.

Los eventos de Windows llegan en formato XML a la función Lambda, donde se extrae la información principal. Dado que la mayoría de los datos contenidos en el XML del evento no son obligatorios a efectos de cumplimiento en la auditoría del sistema, se recomienda evaluarlos y limitarlos a la información necesaria para su caso de uso.

Esto reducirá drásticamente el volumen de datos a almacenar, además de que algunos eventos generados pueden descartarse por completo, de acuerdo con el propósito de la auditoría.

La estructura de un log o registro de auditoría debe contener información básica sobre la acción realizada, que permita responder a las siguientes preguntas, por ejemplo:

  • ¿Quién llevó a cabo la acción?
  • ¿Cuándo se realizó la acción?
  • ¿Qué hace?
  • ¿Dónde se llevó a cabo la acción?

Teniendo esto en cuenta, a continuación se muestra un ejemplo de un log generado a partir de la ETL realizada, a modo de demostración:

{

"@timestamp": "2022-11-10T17:27:06.363Z",

"@user": "AnyCompany\\amznfsxaa72r7vf$",

"@computerName": "WIN-3N63JPN084X",

"@IP": null,

"@windowsEventID": "4724",

"@source": "10.0.1.108",

"@category": "User Account Management",

"@action": "An attempt was made to reset an account's password",

"@affectedResource": "AnyCompany\\amznfsxaa72r7vf$",

"@detail": "An attempt was made to reset an account's password.\r\n\r\nSubject:\r\n\tSecurity ID:\t\tS-1-5-21-1808963962-929642046-3816600178-1611\r\n\tAccount Name:\t\tamznfsxaa72r7vf$\r\n\tAccount Domain:\t\tAnyCompany\r\n\tLogon ID:\t\t0x1B316C90B\r\n\r\nTarget Account:\r\n\tSecurity ID:\t\tS-1-5-21-1808963962-929642046-3816600178-1611\r\n\tAccount Name:\t\tamznfsxaa72r7vf$\r\n\tAccount Domain:\t\tAnyCompany",

"@auditSuccess": true

}
Code

Creación del dashboard en Amazon OpenSearch

necesidades de visualizacion de los logs. Aquí mostraremos la creación de dos visualizaciones, la primera en formato gráfico y la segunda en formato de lista.

Primero, crearemos un índice:

  1. Para empezar, abra el menú de Amazon OpenSearch y acceda a “Stack Management en la sección “Management”.

  1. Seleccione “Index Patterns” y haga clic en “Create Index Pattern”para crear un nuevo patrón de índice.

  1. En “Index pattern name”, escriba “auditlog*” y seleccione “Next”.
  2. En la siguiente sección, selecciona el campo “@timestamp» y haga clic en “Create index pattern”.

Cree una visualización gráfica, en formato circular:

  1. Vaya a “Dashboard” en la sección “OpenSearch Dashboards”.

  1. Haga clic en “Create dashboard” y, en la página siguiente, en “Create new”. Seleccione el tipo “Pie” para ver un gráfico circular o en anillo.

  1. Seleccione el índice creado en el paso anterior.

  1. Como medida de precaución, asegúrese de que el intervalo de fechas que se muestra en la parte superior izquierda de la pantalla esté configurado para mostrar datos de los últimos 30 días.

  1. En la sección “Buckets” haga clic en “ Add” y seleccione “Split chart”.

  1. Para “Aggregation”, seleccione “Term” y en Field seleccione “@source .keyword”.

  1. De nuevo, en la sección“Buckets” haga clic en “Add” y seleccione “Split slices”.

  1. Para “Aggregation”, seleccione “Term” y en “Field” seleccione «@action .keyword».

  1. Haga clic en el botón “Update” en la parte inferior derecha de la pantalla y se actualizará el gráfico.
  2. No olvides guardar la vista previa haciendo clic en el botón “Save”en la parte superior derecha de la pantalla y definir un nombre significativo para la visualización creada.

Cree una visualización de lista para ver los datos como prefiera:

  1. En la sección “OpenSearch Dashboards”, selecciona “Discover”.

  1. Elija el índice creado y en “Available fields”, seleccione los campos de la lista que desea mostrar haciendo clic en el icono “+” que aparece al pasar el ratón sobre el campo.

  1. Para filtrar un valor de un campo que no desee mostrar, coloque el cursor sobre la celda que contiene el valor en el resultado de la lista y haga clic en el icono ““.

Dado que este es un servicio que no es gratuito, recuerde asignar los recursos creados para su posterior eliminación a fin de no incurrir en cargos innecesarios.  Consulte la página de precios de Amazon OpenSearch para obtener más información sobre el uso del límite gratuito (Free tier) y el precio del servicio.

Conclusión

Esta solución presenta cómo implementar observabilidad en un entorno con cargas de trabajo de Microsoft, mediante el uso de servicios nativos de AWS y la reducción del coste de licenciamiento.

Alternativamente, los eventos analizados en el proceso de ETL se pueden reenviar a un servicio de colas con temas, como Amazon Simple Notification Service (Amazon SNS), que permiten acciones en tiempo real, como el análisis del comportamiento y el envío a sistemas SIEM (Security Information and Event Management), además del almacenamiento en Amazon OpenSearch.

Este artículo fue traducido del Blog de AWS en Portugués.


Acerca del autor

Neuton Assis es arquitecto de soluciones en AWS para el segmento empresarial.  Antes de eso, trabajó durante más de 10 años en la arquitectura y el desarrollo de software destinados a automatizar las actividades de TI, la auditoría de sistemas y la gestión de identidades y accesos, trabajando principalmente en entornos Microsoft.  Actualmente, ayuda a los clientes y socios de AWS a tener éxito en su transición hacia la computación en nube.

 

 

 

 

Revisor

Borja Prado es Senior Solutions Architect en AWS, especializado en tecnologías Microsoft. Trabaja ayudando a nuestros clientes en la migración, despliegue y modernización de cargas de trabajo Windows en AWS. Además, está especializado en el diseño y arquitectura de soluciones escalables con .NET