Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Ingestión de logs de Oracle Cloud Infrastructure en Microsoft Azure Sentinel con funciones de OCI
Introducción
Oracle Cloud Infrastructure (OCI) Functions es una plataforma de funciones como servicio totalmente gestionada, multiinquilino, altamente escalable y bajo demanda. Se basa en Oracle Cloud Infrastructure para empresas y cuenta con la tecnología del motor de código abierto Fn Project.
Service Connector Hub es una plataforma de bus de mensajes en la nube que ofrece un único panel para describir, ejecutar y supervisar interacciones al mover datos entre servicios de Oracle Cloud Infrastructure. Utilice el servicio Service Connector Hub para transferir datos entre servicios en Oracle Cloud Infrastructure.
Mediante los servicios de conector de servicio y funciones, puede conectar la generación de logs desde su entorno en la nube de OCI con el envío automático y escalable de todos los registros de seguridad de la información desde su entorno a su instancia de Microsoft Azure Sentinel de información de seguridad y gestión de eventos (SIEM).
Objetivo
Ingiera los logs de OCI en Microsoft Azure Sentinel con OCI Functions.
Requisitos
- Acceso a un arrendamiento de Oracle Cloud
- Una configuración de red virtual en la nube en su arrendamiento
- Todas las configuraciones de políticas para Logs, Streaming y Functions.
Tarea 1: Inicio de la instancia de OCI
-
Cree una nueva instancia de OCI a través de la consola web y active cualquiera de sus plugins por defecto. Vaya a la página Instancias y haga clic en Crear instancia.
-
Rellene toda la información necesaria para la creación de instancias.
-
Vaya al final de la página y haga clic en Mostrar opciones avanzadas.
-
Aparecerán algunos separadores en la pantalla. Haga clic en Oracle Cloud Agent y seleccione los plugins que desea que estén activos una vez finalizada la creación de la instancia.
-
Todos los plugins seleccionados en este separador se activarán automáticamente una vez que la instancia esté lista para su uso.
-
Después de seleccionar los plugins, haga clic en Crear al final de la página.
Tarea 2: Configurar los valores de registro de OCI
Tarea 2.1: Configurar logs personalizados de instancia de Windows
Después de crear la instancia de Windows, debe configurar el entorno de OCI para capturar los logs del visor de eventos mediante Oracle Agent instalado en el servidor.
-
Antes de empezar, asegúrese de que el plugin "Logs personalizados" esté activo en el servidor del que desea recopilar logs. En la consola de OCI, vaya a Recursos informáticos, Instancias.
-
Seleccione la instancia que se va a supervisar.
-
Haga clic en el separador Oracle Cloud Agent y asegúrese de que el plugin denominado Supervisión de logs personalizados está activado.
- Si el plugin no está activado en la instancia, actívelo. Después de eso, configuremos el registro de OCI para que este agente pueda capturar los eventos del visor de eventos de Windows.
Tarea 2.2: Configuración del grupo dinámico de servidores
Para capturar los logs del visor de eventos de uno o más servidores Windows, se debe crear un grupo dinámico. Este grupo contendrá todas las instancias de Windows que deben tener sus logs capturados.
-
Para crear el grupo dinámico, haga clic en el menú principal de la consola de OCI y vaya a Identidad y seguridad, Identidad.
-
Desde el menú Identidad, acceda al submenú *Dominios".
-
Haga clic en su dominio de identidad (en este ejemplo de tutorial, utilizamos Valor por defecto).
-
Ahora, dentro del dominio de identidad, haga clic en el menú Grupos dinámicos para crear el grupo dinámico que contendrá todos los servidores de Windows que se van a supervisar. Una vez hecho esto, haga clic en Crear grupo dinámico.
-
Se abrirá una nueva página. Rellene la información relativa a la creación del grupo dinámico (nombre y descripción) y, en Reglas de coincidencia, haga clic en el enlace Creador de reglas para poder crear la regla para seleccionar instancias que se agruparán en este grupo dinámico.
-
La regla de ejemplo que crearemos agrupará todos los servidores existentes en nuestro compartimento. Para ello, solo tiene que capturar el ID de compartimento e insertarlo en el campo Valor, como se muestra en la imagen siguiente.
-
Para obtener más información sobre la creación de grupos dinámicos, consulte la documentación oficial: Creación de grupos dinámicos y políticas para acceder a otros recursos de Oracle Cloud Infrastructure a partir de sesiones del bloc de notas.
-
Cuando finalice la creación, estará disponible una página que contenga la información de grupo dinámico.
-
El grupo dinámico se crea y está listo para utilizarse para centralizar los logs del entorno de OCI.
-
Nota: Puede utilizar filtros avanzados y crear grupos dinámicos para capturar solo instancias con determinadas etiquetas. Para ello, recomendamos leer la documentación oficial de OCI en: Escritura de reglas de coincidencia para definir grupos dinámicos.
Tarea 2.3: Creación de un grupo de registro
También deberá crear un grupo de registro para poder concentrar todos los logs enviados por los agentes instalados en los servidores Windows del entorno.
-
Haga clic en el menú principal de la consola de OCI y vaya a Observación y gestión, Grupos de logs.
-
Al acceder a la página de servicio, haga clic en Crear grupo de logs.
-
Dentro de la página de creación del grupo de logs, rellene la información solicitada y haga clic en Crear.
Una vez finalizado este paso, empecemos a crear la captura de log del visor de eventos por parte del agente de Oracle Cloud instalado en la instancia de OCI.
Tarea 2.4: Configurar registro de OCI
-
Una vez configurada la instancia, el grupo dinámico y el grupo de logs, vaya a Observación y gestión y haga clic en Registro.
-
En la página Registro de OCI, haga clic en Configuraciones de agente para crear la configuración que permitirá el envío de logs del visor de eventos de Windows al registro de OCI. Una vez dentro de la página de configuración del agente, haga clic en Crear configuración de agente.
-
Rellene todos los campos necesarios de la página y seleccione el grupo dinámico que ha creado en el paso anterior.
-
Al rellenar estos elementos iniciales, desplácese por la página y rellene los campos Configuración de agente, informando de que desea capturar el "log de eventos de Windows" de cada uno de los canales disponibles (Aplicación, seguridad y sistema). Aquí deberá repetir el proceso de creación de entradas de log para cada uno de los canales.
-
Una vez finalizada la configuración, la página de configuración del agente estará disponible y se parecerá a esta.
Nota: La configuración del agente anterior se ha creado para capturar tanto los logs del visor de eventos como los logs generados en el archivo
/var/log/messages
de los servidores Linux. -
Una vez que la configuración del agente esté en estado Activo, espere aproximadamente 5 minutos hasta que se pueda realizar la primera recopilación de logs. Para ver los logs de las instancias supervisadas que se están recopilando, haga clic en el menú Explorar log, como se muestra en la imagen siguiente.
-
Tarea 3: Observe los detalles del centinela de Microsoft Azure
-
Después de configurar el entorno de registro centralizado en la región de OCI, vaya a su suscripción a Microsoft Azure y recopile la siguiente información:
- ID de espacio de trabajo: ID de espacio de trabajo de Log Analytics utilizado por Microsoft Azure Sentinel dentro de su suscripción a Microsoft Azure.
- Clave compartida: clave de acceso al espacio de trabajo de Log Analytics.
-
Estos valores se pueden encontrar en el menú Gestión de agentes, como se muestra en la siguiente imagen de la suscripción a Azure:
-
Tenga en cuenta estos valores.
Importante: no es el ámbito de esta documentación ofrecer orientación sobre la creación y configuración de Microsoft Azure Sentinel en su suscripción a Microsoft Azure. Para ello, acceda a la documentación oficial del producto en el sitio web de Microsoft.
Tarea 4: Creación de OCI Vault
Ahora que ya tenemos los datos de Microsoft Azure Log Analytics Workspace pertenecientes a SIEM Sentinel, vamos a crear un OCI Vault para almacenar el valor secreto copiado en la tarea anterior. Este secreto se debe almacenar en OCI Vault para que no sea necesario insertarlo dentro del código de funciones de OCI que crearemos en el siguiente paso.
-
Para crear OCI Vault, vaya al menú principal de la consola de OCI y vaya a Identidad y seguridad, Almacén.
-
Una vez cargada la página Almacén, haga clic en Crear almacén, seleccione el compartimento deseado y asigne un nombre al almacén.
-
Después de crear el almacén, deberá crear la clave de cifrado maestra. Esta clave se utilizará para cifrar todos los secretos de su almacén. Para ello, haga clic en Crear clave como se muestra en la imagen siguiente.
-
Cuando termine de crear la clave maestra, haga clic en el menú Secretos y cree el secreto de Microsoft Azure que anotó en el paso anterior.
-
Rellene los campos necesarios para crear el secreto en el almacén con los datos de clave primaria o secundaria de su espacio de trabajo de Log Analytics Sentinel de Microsoft Azure, como se muestra en la tarea 3.
-
Los otros elementos (Sentinel Workspace ID y el nombre de la tabla en la que se almacenarán los logs en Sentinel) pueden o no insertarse en el almacén. Aquí, vamos a insertarlos dentro del código de nuestra función.
Importante: Tome nota del OCID del secreto que crea en el almacén.
Tarea 5: Creación y configuración de funciones de OCI
Después de configurar el entorno de registro centralizado en la región de OCI, el almacén y el entorno de Azure están listos, es el momento de crear la función de OCI que enviará los logs personalizados y los logs de auditoría desde la región de OCI a Microsoft Azure Sentinel.
Tarea 5.1: Creación de la función OCI
-
Vaya al menú principal de la consola de OCI y vaya a Servicios para desarrolladores, Funciones.
-
Una vez cargada la página Funciones, haga clic en Crear aplicación.
-
Complete los campos necesarios y haga clic en Crear.
-
Después de la creación, tenga en cuenta que su función no estará protegida por ningún grupo de seguridad de red. Debe agregarlo a un grupo de seguridad de red.
Puntos importantes:
-
Dado que la función accederá al punto final público de Microsoft Azure para enviar logs al Sentinel de Microsoft Azure, esta función se debe crear en una subred que tenga acceso a Internet.
-
Valide también sus listas de seguridad de VNET para asegurarse de que ninguna de ellas impida que su función de OCI acceda a Internet.
-
Tarea 5.2: Configuración de funciones de OCI e inicio
Una vez que se haya creado la función OCI, verá en pantalla los comandos necesarios para configurar la función en el entorno. Aquí, como ejemplo, seguiremos paso a paso a través de Cloud Shell, pero también es posible llevar a cabo esta configuración directamente en su equipo.
-
Abra Cloud Shell directamente en la consola web de la región de OCI que se va a configurar (en este tutorial, la región es Este de Brasil).
-
Siga los pasos indicados en la página Función y ejecute los comandos solicitados en el terminal de Cloud Shell.
-
Los 3 primeros comandos que se van a ejecutar no requieren cambios; sin embargo, en el cuarto comando deberá proporcionar el nombre del repositorio donde se almacenará la imagen de la aplicación. En nuestro ejemplo, el nombre introducido era repo-ocilog-to-azuresiem.
$ fn update context registry gru.ocir.io/xxxxxxxxxa/repo-ocilog-to-azuresiem
-
Genere un token de autenticación en su perfil de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM). El token de autenticación es la credencial de acceso que le permitirá interactuar con el repositorio de OCI donde se almacenará la imagen de Docker de su función. Haga clic en el icono de usuario en la consola web de OCI y, a continuación, haga clic en Mi perfil.
-
Una vez dentro de la página de usuario, desplácese hacia abajo y haga clic en Tokens de autenticación.
-
En la sección Tokens de autenticación, haga clic en Generar token.
-
Rellene el nombre del token de autenticación y haga clic en Generar token.
Importante: Anote este token y guárdelo en un lugar seguro. Este token es su contraseña de acceso al registro de OCI donde se almacenarán las imágenes de función.
-
Vuelva a la página Funciones accediendo al menú principal de la consola web de OCI y accediendo a Servicios para desarrolladores, Funciones.
-
En la página Functions, acceda a la función creada en los pasos anteriores.
-
Haga clic en el menú Introducción y continúe paso a paso después del paso de creación del token de autenticación.
-
Ejecute el comando
docker login
y, como contraseña, utilice la cadena que acaba de copiar de la creación del token de autenticación en el último paso ejecutado. -
Ahora, en los siguientes pasos, crearemos, desplegaremos y llamaremos a la función. Para inicializar la función en Cloud Shell, cambie el comando sugerido en el ejemplo que se muestra en la pantalla. Este cambio es necesario porque el entorno de tiempo de ejecución que vamos a utilizar está en Python (y no en Java, como se muestra en el ejemplo hello-world sugerido por la creación de la función).
$ fn init --runtime python func-ocilog-to-azuresiem
Tarea 5.2.1: Escritura del código fuente de la función OCI
-
Una vez ejecutado el comando
init
, acceda al directorio Function recién creado.$ cd func-ocilog-to-azuresiem/
- Tenga en cuenta que dentro del directorio al que acaba de acceder hay un archivo Python (
func.py
), un archivo YAML (func.yaml
) y un archivo de requisitos (requirements.txt
). Tendremos que editar dos de estos archivos.
- Tenga en cuenta que dentro del directorio al que acaba de acceder hay un archivo Python (
-
Edite el archivo
func.py
, suprima todo el contenido e inserte el contenido siguiente en él.import io import json import requests import datetime import hashlib import hmac import base64 import logging import oci import base64 import sys from fdk import response # Global variable logger = logging.getLogger() # Get Resource Principal Credentials # OCI Functions get permission to read vault from OCI IAM signer = oci.auth.signers.get_resource_principals_signer() # Retrieve secret from OCI Vault def get_binary_secret(secret_ocid): try: client = oci.secrets.SecretsClient({}, signer=signer) secret_content = client.get_secret_bundle(secret_ocid).data.secret_bundle_content.content.encode('utf-8') secret_content_decoded = base64.b64decode(secret_content).decode('UTF-8') except Exception as ex: logger.critical("ERROR: failed to retrieve the secret content from OCI Vault. ", ex) raise return secret_content_decoded # Build the API signature def build_signature(customer_id, shared_key, date, content_length, method, content_type, resource): x_headers = 'x-ms-date:' + date string_to_hash = method + "\n" + str(content_length) + "\n" + content_type + "\n" + x_headers + "\n" + resource bytes_to_hash = bytes(string_to_hash, encoding= "utf-8" ) decoded_key = base64.b64decode(shared_key) encoded_hash = base64.b64encode(hmac.new(decoded_key, bytes_to_hash, digestmod=hashlib.sha256).digest()).decode() authorization = "SharedKey {}:{}" .format(customer_id,encoded_hash) return authorization # Build and send a request to the POST API (Microsoft Azure Sentinel public endpoint) def post_data(customer_id, shared_key, body, log_type, logger): method = 'POST' content_type = 'application/json' resource = '/api/logs' rfc1123date = datetime.datetime.utcnow().strftime( '%a, %d %b %Y %H:%M:%S GMT' ) content_length = len(body) signature = build_signature(customer_id, shared_key, rfc1123date, content_length, method, content_type, resource) uri = 'https://' + customer_id + '.ods.opinsights.azure.com' + resource + '?api-version=2016-04-01' headers = { 'content-type' : content_type, 'Authorization' : signature, 'Log-Type' : log_type, 'x-ms-date' : rfc1123date } response = requests.post(uri,data=body, headers=headers) if (response.status_code >= 200 and response.status_code <= 299 ): logger.critical( '===> Upload to Microsoft Azure Sentinel was accepted %s', content_length ) else: logger.critical( "Error during upload. Response code: {}" .format(response.status_code)) #### ## PART 3 #### # # Entrypoint and initialization # def handler(ctx, data: io.BytesIO=None): logger.info("OCI Function - Handler function init fired.") # Update the customer ID to your Log Analytics workspace ID customer_id = ‘<PUT_HERE_YOUR_AZURE_LOG_ANALYTICS_WORKSPACE_ID>' # For the shared key, use either the primary or the secondary Connected Sources client authentication key shared_key_OCID = "<PUT_HERE_THE_OCID_OF_YOUR_OCI_VAULT_SHARED_KEY_SECRET>" shared_key = get_binary_secret(shared_key_OCID) # The log type is the name of the event that is being submitted log_type = '<SENTINEL_TABLE_NAME>' try: log_body = data.getvalue() post_data(customer_id, shared_key, log_body, log_type, logger) except Exception as err: logger.error( "Error in main process: {}" .format(str(err))) return response.Response( ctx, response_data=json.dumps({ "status" : "Success" }), headers={ "Content-Type" : "application/json" } )
-
Este es el script de Python que se conectará al SIEM de Azure y enviará los logs de OCI al punto final remoto.
-
Además de copiar y pegar este script, deberá cambiar 3 campos en él
-
_customer_id: ID de espacio de trabajo de Log Analytics en la suscripción a Azure, en el menú Gestión de agentes.
-
_shared_key: clave primaria o secundaria que también se puede obtener del menú Gestión de agentes.
-
_log_type: nombre del espacio de trabajo de Log Analytics que SIEM Sentinel utiliza. Todos los logs que llegan a este espacio de trabajo se analizan mediante Sentinel. En nuestro ejemplo, hemos utilizado OCILogging.
-
-
A continuación se muestra un ejemplo de impresión de la pantalla donde puede obtener la información anterior.
Nota: Está fuera del ámbito de este documento configurar Log Analytics Workspace en su suscripción a Azure. Para ello, busque más información en la documentación oficial de Microsoft.
-
-
Después de cambiar el archivo
func.py
, es hora de editar el archivorequirements.txt
. Insertaremos un requisito en el que el gestor de paquetes de OCI Functions instale las dependencias de Python necesarias para que nuestro script funcione correctamente. Para este caso, inserte la palabra requests en la última línea del archivo: -
Una vez hecho esto, ejecute el paso de despliegue de la función.
$ fn -v deploy --app app-ocilog-to-azuresiem
Tras unos minutos, la configuración de la función y la creación de la imagen de Docker se completará correctamente.
Tarea 5.2.2: Proporcione los permisos necesarios para la función OCI
Para que la función OCI se ejecute sin problemas, necesitará permisos para leer el secreto de Azure dentro del almacén. Para ello, necesitaremos crear un grupo dinámico para la función que creamos y, para este grupo dinámico, daremos el permiso necesario (privilegio mínimo) para que nuestro código pueda leer el almacén y capturar la clave compartida de Azure de forma segura.
Por lo tanto, de la misma manera que en el punto 2.2 anterior, donde creamos un grupo dinámico para agregar los servidores que recopilarán los logs, volver a rastrear los pasos y crear un grupo dinámico para incluir nuestra función.
Durante la creación del grupo dinámico, necesitará una regla de coincidencia que se utilizará para capturar la función. Aquí, en nuestro ejemplo, crearemos una regla de coincidencia que mostrará todas las funciones del compartimento que estamos utilizando exclusivamente para este tutorial.
ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaxxxxgjxxxxglxxxxiqxxxxjdxxxxnxxxxmxxxxm3xxxxmoxxxxsxxx'}
-
Capture el OCID del compartimento, insértelo en la regla de coincidencia y cree el grupo dinámico.
-
Después de crear el grupo dinámico, vaya a Identidad y seguridad, Políticas para crear la política que permitirá a la función acceder al almacén en modo de lectura.
- Una vez creado el grupo dinámico, cree la política que permitirá a la función acceder al almacén.
-
Utilice la siguiente política para otorgar el acceso mínimo necesario a la función para ejecutar la actividad de lectura de credenciales de almacén.
Allow dynamic-group <FUNCTION\_DYNAMIC\_GROUP\_NAME> to read secret-bundles in compartment <COMPARTMENT\_NAME>
Tarea 5.2.3: Ejecución de la función OCI
-
Ejecute la función para validar que funciona correctamente.
$ fn -v deploy --app app-ocilog-to-azuresiem
Para finalizar, debemos configurar los conectores de servicio de OCI para capturar todos los logs de OCI de su región y enviarlos a Azure SIEM mediante la función que acabamos de crear.
Tarea 6: Configuración de los conectores de servicio
Para poder enviar los logs de las regiones de su inquilino de OCI para el análisis del centinela de Microsoft Azure, es necesario configurar los conectores de servicio.
Básicamente, este servicio capturará los logs de OCI que ya hemos configurado y los enviará a nuestra función que, a su vez, reenviará todos los logs a la suscripción de Azure.
-
Vaya al menú principal de la consola de OCI y, a continuación, vaya a Observación y gestión, **Conectores de servicio.
-
Una vez dentro de los conectores de servicio, haga clic en Crear conector de servicio.
-
Rellene los campos de nombre y descripción necesarios y seleccione el compartimento en el que desea crear el conector de servicio.
-
Ahora, seleccione el origen de los datos que se transmitirán mediante el conector de servicio. Aquí, utilice Registro. Y, como destino, es decir, donde se realizarán la transición de los datos, utilice Funciones.
-
Para finalizar la configuración, seleccione en Configurar origen, qué logs se enviarán a OCI Functions. En este paso, debemos seleccionar el log
\_Audit
y, al agregar un log más, seleccionaremos el grupo de logs que hemos creado en los pasos iniciales de este procedimiento.- Si desea agregar otro grupo de logs, haga clic en + Otro log.
-
Una vez finalizado este paso, ahora debemos definir los parámetros de destino, es decir, nuestra función de OCI que enviará los datos a la suscripción de Azure. Para ello, seleccione el compartimento donde se encuentra la función, seleccione la aplicación y, después, el nombre de la función. A continuación, haga clic en Crear como se muestra en la imagen siguiente.
El proceso ha terminado. En este punto, espere hasta que los logs comiencen a enviarse automáticamente a Microsoft Azure.
Puede supervisar el funcionamiento del conector de servicio creado por el menú "Métricas".
Tarea 7: Leer los registros en Microsoft Azure Sentinel
-
Tras unos instantes, los logs de todos los servidores se enviarán a la suscripción de Microsoft Azure como se muestra en la imagen siguiente.
-
Según la configuración de Microsoft Azure Sentinel, los incidentes comenzarán a aparecer en la interfaz a medida que se disparen las reglas de SIEM.
-
Incidente abierto para el servidor de región este de Brasil (creamos alguna regla personalizada denominada "[Lab] Regex Incident" para generar nuestros incidentes de ejemplo).
-
Abra el incidente para el servidor de región Us-Phoenix.
-
Enlaces relacionados
Agradecimientos
Autor: Rodrigo Pace de Barros (ingenier de soluciones de seguridad en la nube de Oracle LAD A-Team)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Ingest Oracle Cloud Infrastructure logs into Microsoft Azure Sentinel using OCI Functions
F80858-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.