Note:

Reenvío de logs de Oracle Cloud Infrastructure a Rapid7 InsightOps

Introducción

Oracle Cloud Infrastructure (OCI) es un juego de servicios en la nube complementarios que permiten crear y ejecutar una serie de aplicaciones y servicios en un entorno alojado de alta disponibilidad. OCI proporciona funciones informáticas de alto rendimiento (como instancias de hardware físico) y capacidad de almacenamiento en una red virtual de superposición flexible accesible de forma segura desde su red local.

La plataforma Oracle Cloud Observability and Manageability tiene como objetivo satisfacer a nuestros clientes donde se encuentran. Entendemos que han estandarizado sus posturas operativas con las populares herramientas de observabilidad de 3a parte, y queremos ser interoperables con esas herramientas para que nuestros clientes puedan seguir utilizando las herramientas en las que han invertido con OCI.

En este tutorial, le mostraremos cómo puede reenviar logs de OCI a Rapid7 InsightOps. Rapid7 InsightOps es un servicio de análisis y gestión de logs fácil de utilizar. Proporciona capacidades de búsqueda de primera clase, herramientas de análisis de logs mejoradas y la capacidad de supervisar y consultar el estado de la infraestructura en tiempo real.

Ahora, veamos la representación de alto nivel de la arquitectura de la solución como se muestra a continuación.

Diagrama de arquitectura

Objetivos

Requisitos

Tarea 1: Crear un log-Webhook para enviar sus datos a Rapid7 InsightOps

HTTP POST es una forma sencilla de reenviar los mensajes de log a Rapid7 InsightOps.

  1. Conéctese a Rapid7 InsightOps y haga clic en Agregar datos en la navegación superior.

  2. Haga clic en Webhook.

    Rapid7 InsightOps: adición de un origen de datos

  3. Introduzca el nombre del log y seleccione un juego de logs existente o cree uno nuevo.

    Rapid7 InsightOps: agregue un log-Webhook

    Nota: Se mostrará una URL que utilizará para enviar los datos de log. La última parte de la URL es el token de log, que identifica el log al que se deben enviar los datos.

Tarea 2: Configurar los logs que desea capturar

  1. En la consola de OCI, vaya a Observability & Management, Logging y Log Groups.

  2. Seleccione el compartimento y haga clic en Crear grupo de logs y se abrirá el panel lateral.

  3. Introduzca *Rapid7_log_group* para el nombre y, de manera opcional, proporcione una descripción y etiquetas.

  4. Haga clic en Crear para configurar el nuevo grupo de logs.

  5. En Resources, haga clic en Logs.

  6. Haga clic en Crear log personalizado o Activar log de servicio como desee.

    Por ejemplo, vamos a activar los logs de escritura para un cubo de almacenamiento de objetos siguiendo estos pasos:

    1. Haga clic en Activar log de servicio. Se abrirá un panel lateral.

    2. Seleccione el compartimento de recursos y escriba Object Storage en el campo de servicios de búsqueda.

    3. Haga clic en Activar logs y seleccione el nombre del cubo de almacenamiento de objetos en el campo de recurso.

    4. Seleccione el grupo de logs creado anteriormente Rapid7_log_group y seleccione Escribir eventos de acceso en el campo Categoría de log. De manera opcional, proporcione un nombre de log, como Rapid7_bucket_write.

    5. Haga clic en Activar para crear el nuevo log de OCI.

Tarea 3: Creación de una función de Oracle para ingerir logs en Rapid7 InsightOps

  1. En la consola de OCI, vaya a Servicios para desarrolladores y Funciones.

  2. Haga clic en Crear aplicación. Asigne a la aplicación un nombre como Rapid7_App, seleccione VCN, subredes, unidad (GENERIC_X86) en las listas desplegables respectivas y haga clic en Crear.

  3. Realice los siguientes pasos para configurar el entorno de Cloud Shell:

    1. Inicie Cloud Shell y configure la CLI de fn en Cloud Shell.

    2. Utilice el contexto de su región.

      fn list context
      fn use context <region-context>
      
    3. Actualice el contexto con el ID de compartimento de la función

      fn update context oracle.compartment-id <compartment-id>
      
    4. Proporcione un prefijo de nombre de repositorio único para distinguir las imágenes de función.

      fn update context registry <region-key>.ocir.io/<tenancy_name>/[repo-name-prefix]
      
    5. Genere un token de autenticación para conectarse a Oracle Cloud Infrastructure Registry.

    6. Conéctese al registro usando el token de autenticación como contraseña.

      docker login -u '<tenancyname>/<username>' <region-key>.ocir.io
      
    7. Para verificar la configuración, muestre las aplicaciones del compartimento.

      fn list apps
      

Tarea 4: Creación, despliegue y llamada a la función

  1. Se recomienda crear primero una función de Python fijo y sustituir los archivos generados automáticamente por el código como se indica a continuación.

    fn init --runtime python rapid7_func
    

    Nota: El comando fn init generará una carpeta denominada rapid7_func con 3 archivos dentro; func.py, func.yaml y requirements.txt.

  2. Cambie al directorio generado.

    cd rapid7_func
    
    • Sustituya el contenido de func.py por el siguiente código de ejemplo. Puede ajustar el código según sus requisitos.

      import io
      import os
      import json
      import requests
      import logging
      from fdk import response
      
      def process(body):
          try:
              data = body.get("data", {})
              source = body.get("source")
              time = body.get("time")
              oracle = body.get("oracle",{})
              type = body.get("type")
              regionID = body.get("regionID")
              origin = "OCI-CLOUD"
      
              #Get json data, time, type and source information
              payload = {}
              payload.update({"origin":origin})
              payload.update({"time": time})
              payload.update({"type":type})
              payload.update({"regionID":regionID})
              payload.update({"source":source})
              payload.update({"data":data})
              payload.update({"oracle":oracle})
      
              #Rapid7 endpoint URL with token to call the REST interface.Refer for more info https://docs.rapid7.com/insightops/insightops-webhook
              #This is defined in the func.yaml file.
              rapid7host = os.environ['RAPID7_HOST']
      
              #Invoke Rapid7 API with the payload. If the payload contains more than one log this will be ingested as once.
              headers = {'Content-type': 'application/json'}
              x = requests.post(rapid7host, data = json.dumps(payload), headers=headers)
              logging.getLogger().info(x.text)
      
          except (Exception, ValueError) as ex:
              logging.getLogger().error(str(ex))
      
      

      Esta función acepta el JSON de registro y dispara el punto final Rapid7 InsightOps para ingerir los logs. Para obtener más información sobre el formato de registro de nivel superior, consulte Visión general del formato de registro.

      Cuando se llama con varios logs, la función itera en cada log y dispara el punto final Rapid7 InsightOps para ingerirlos individualmente.

      def handler(ctx, data: io.BytesIO=None):
          try:
              body = json.loads(data.getvalue())
              if isinstance(body, list):
                  # Batch of CloudEvents format
                  for log in body:
                      process(log)
              else:
                  # Single log
                  process(body)
          except (Exception, ValueError) as ex:
              logging.getLogger().error(str(ex))
      
    • Sustituya el contenido de func.yaml de la siguiente forma. RAPID7_HOST se debe sustituir por la URL que hemos obtenido en el paso anterior.

      schema_version: 20180708
      name: rapid7_func
      version: 0.0.1
      runtime: python
      entrypoint: /python/bin/fdk /function/func.py handler
      memory: 1024
      timeout: 120
      config:
          RAPID7_HOST: https://us2.webhook.logs.insight.rapid7.com/v1/noformat/1a2345b1-1234-1ab2-1a2b-abcd1ef2345g
      
    • Sustituya el contenido de requirements.txt de la siguiente forma.

      fdk
      datetime
      requests
      oci
      
  3. Desplegar su función.

    fn -v deploy --app Rapid7_App
    
  4. Puede probar la función llamándola. Si no se observan errores, la función funciona como se esperaba.

    fn invoke Rapid7_App rapid7_func
    

Tarea 5: Configuración de un conector de servicio de OCI

  1. En la consola de OCI, vaya a Observability & Management, Logging y Service Connectors.

  2. Haga clic en Crear conector de servicio para ir a la página Crear conector de servicio.

  3. Introduzca *Rapid7_SC* para el nombre, si lo desea, proporcione una descripción y seleccione el compartimento.

  4. Seleccione el origen como Registro y el destino como Funciones.

  5. En Configurar conexión de origen, seleccione un nombre de compartimento, grupo de logs y log (Grupo de logs y log creados en el primer paso).

  6. Si también desea enviar Logs de auditoría, haga clic en +Another Log y seleccione el mismo compartimento al sustituir _Audit como grupo de logs.

  7. En Configurar destino, seleccione un compartimento, una aplicación de función y una función (la aplicación de función y la función creadas en el paso anterior).

  8. Si se le solicita que cree una política, haga clic en Crear en la petición de datos.

  9. Haga clic en Crear en la parte inferior para terminar de crear el conector de servicio.

Tarea 6: Visualización de logs de Oracle Cloud Infrastructure en los productos de la plataforma Rapid7 InsightOps

Para acceder a los logs, conéctese a Rapid7 InsightOps y vaya a la sección Búsqueda de logs.

Rapid7 InsightOps

Nota: Los logs ingeridos en Rapid7 InsightOps mediante la opción de publicación HTTP también están visibles en Rapid7 InsightIDR.

Rapid7 InsightIDR

Pasos Siguientes

En este tutorial se ha demostrado el proceso de reenvío de logs de Oracle Cloud Infrastructure (OCI) a la plataforma Rapid7 InsightOps mediante Service Connector Hub y Functions. En el lado de la información de seguridad y la gestión de eventos (SIEM), es esencial definir paneles de control para capturar métricas críticas y configurar alertas para que se disparen cuando se superen los umbrales predefinidos. Además, la definición de consultas específicas es crucial para detectar actividades maliciosas e identificar patrones dentro de tu arrendamiento de OCI. Estas acciones mejorarán aún más su estrategia de seguridad y permitirán un control proactivo de su entorno en la nube.

Confirmaciones

Autor: Chaitanya Chintala (Asesor de seguridad en la nube)

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 Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.