Recopila registros de OneLogin de One Identity

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de OneLogin de One Identity a Google Security Operations con Google Cloud Storage V2.

OneLogin de One Identity es una plataforma de administración de identidades y accesos (IAM) basada en la nube que proporciona inicio de sesión único (SSO), autenticación de varios factores (MFA) y aprovisionamiento de usuarios para aplicaciones empresariales. La API de OneLogin Events proporciona acceso programático a los registros de eventos, incluidos la autenticación de usuarios, el aprovisionamiento, los cambios en las políticas y las acciones administrativas.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un proyecto de GCP con la API de Cloud Storage habilitada
  • Permisos para crear y administrar buckets de GCS
  • Permisos para administrar políticas de IAM en buckets de GCS
  • Permisos para crear servicios de Cloud Run, temas de Pub/Sub y trabajos de Cloud Scheduler
  • Acceso con privilegios al portal de administración de OneLogin con el rol de administrador avanzado o un rol equivalente
  • Credenciales de la API (ID de cliente y secreto del cliente) configuradas en el portal de administración de OneLogin

Crea un bucket de Google Cloud Storage

  1. Ve a Google Cloud Console.
  2. Selecciona tu proyecto o crea uno nuevo.
  3. En el menú de navegación, ve a Cloud Storage > Buckets.
  4. Haz clic en Crear bucket.
  5. Proporciona los siguientes detalles de configuración:

    Parámetro de configuración Valor
    Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, onelogin-sso-logs).
    Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional)
    Ubicación Selecciona la ubicación (por ejemplo, us-central1).
    Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia)
    Control de acceso Uniforme (recomendado)
    Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención
  6. Haz clic en Crear.

Recopila las credenciales de la API de OneLogin by One Identity

Crea credenciales de API

  1. Accede al portal de administración de OneLogin.
  2. Ve a Developers > API Credentials.
  3. Haz clic en New Credential.
  4. Ingresa un nombre para la credencial (por ejemplo, Google SecOps Integration).
  5. Selecciona Leer todo como el alcance de los permisos.
  6. Haz clic en Guardar.

  7. Copia y guarda los siguientes detalles en una ubicación segura:

    • ID de cliente: Es el ID de cliente de la API que se muestra en la página de credenciales.
    • Secreto del cliente: Es el secreto del cliente de la API que se muestra en la página de credenciales.

Determina la región de la API de OneLogin

La URL base de la API de OneLogin depende de la región de tu centro de datos:

Región URL base de la API
EE.UU. https://api.us.onelogin.com
UE https://api.eu.onelogin.com

Verifica los permisos

Para verificar que las credenciales de la API tengan los permisos necesarios, haz lo siguiente:

  1. Accede al portal de administración de OneLogin.
  2. Ve a Developers > API Credentials.
  3. Haz clic en el nombre de la credencial (por ejemplo, Google SecOps Integration).
  4. Confirma que esté seleccionado el alcance Leer todo. De lo contrario, actualiza el permiso y haz clic en Guardar.

Prueba el acceso a la API

  • Prueba tus credenciales antes de continuar con la integración:

    # Replace with your actual credentials
    ONELOGIN_CLIENT_ID="your-client-id"
    ONELOGIN_CLIENT_SECRET="your-client-secret"
    ONELOGIN_API_BASE="[https://api.us.onelogin.com](https://api.us.onelogin.com)"
    
    # Get access token
    TOKEN=$(curl -s -X POST "${ONELOGIN_API_BASE}/auth/oauth2/v2/token" \
      -H "Content-Type: application/json" \
      -d "{\"grant_type\": \"client_credentials\", \"client_id\": \"${ONELOGIN_CLIENT_ID}\", \"client_secret\": \"${ONELOGIN_CLIENT_SECRET}\"}" \
      | jq -r '.access_token')
    
    # Test API access - list recent events
    curl -s -X GET "${ONELOGIN_API_BASE}/api/2/events?limit=1" \
      -H "Authorization: Bearer ${TOKEN}"
    

Crea una cuenta de servicio para la función de Cloud Run

La función de Cloud Run necesita una cuenta de servicio con permisos para escribir en el bucket de GCS y ser invocada por Pub/Sub.

Crear cuenta de servicio

  1. En Google Cloud Console, ve a IAM y administración > Cuentas de servicio.
  2. Haz clic en Crear cuenta de servicio.
  3. Proporciona los siguientes detalles de configuración:

    • Nombre de la cuenta de servicio: Ingresa onelogin-sso-logs-collector-sa.
    • Descripción de la cuenta de servicio: Ingresa Service account for Cloud Run function to collect OneLogin by One Identity logs.
  4. Haz clic en Crear y continuar.

  5. En la sección Otorga a esta cuenta de servicio acceso al proyecto, agrega los siguientes roles:

    1. Haz clic en Selecciona un rol.
    2. Busca y selecciona Administrador de objetos de Storage.
    3. Haz clic en + Agregar otro rol.
    4. Busca y selecciona Invocador de Cloud Run.
    5. Haz clic en + Agregar otro rol.
    6. Busca y selecciona Invocador de Cloud Functions.
  6. Haz clic en Continuar.

  7. Haz clic en Listo.

Estos roles son necesarios para las siguientes acciones:

  • Administrador de objetos de Storage: Escribe registros en el bucket de GCS y administra archivos de estado
  • Invocador de Cloud Run: Permite que Pub/Sub invoque la función
  • Invocador de Cloud Functions: Permite la invocación de funciones

Otorga permisos de IAM en el bucket de GCS

Otorga permisos de escritura a la cuenta de servicio en el bucket de GCS:

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket (por ejemplo, onelogin-sso-logs).
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:

    • Agregar entidades: Ingresa el correo electrónico de la cuenta de servicio (por ejemplo, onelogin-sso-logs-collector-sa@PROJECT_ID.iam.gserviceaccount.com).
    • Asignar roles: Selecciona Administrador de objetos de almacenamiento.
  6. Haz clic en Guardar.

Crea un tema de Pub/Sub

Crea un tema de Pub/Sub en el que Cloud Scheduler publicará y al que se suscribirá la función de Cloud Run.

  1. En Google Cloud Console, ve a Pub/Sub > Temas.
  2. Haz clic en Crear un tema.
  3. Proporciona los siguientes detalles de configuración:

    • ID del tema: Ingresa onelogin-sso-logs-trigger.
    • Deja el resto de la configuración con sus valores predeterminados.
  4. Haz clic en Crear.

Crea una función de Cloud Run para recopilar registros

La función de Cloud Run se activará con mensajes de Pub/Sub de Cloud Scheduler para recuperar registros de la API de OneLogin Events y escribirlos en GCS.

  1. En Google Cloud Console, ve a Cloud Run.
  2. Haz clic en Crear servicio.
  3. Selecciona Función (usa un editor intercalado para crear una función).
  4. En la sección Configurar, proporciona los siguientes detalles de configuración:

    Parámetro de configuración Valor
    Nombre del servicio onelogin-sso-logs-collector
    Región Selecciona la región que coincida con tu bucket de GCS (por ejemplo, us-central1).
    Tiempo de ejecución Selecciona Python 3.12 o una versión posterior.
  5. En la sección Activador (opcional), haz lo siguiente:

    1. Haz clic en + Agregar activador.
    2. Selecciona Cloud Pub/Sub.
    3. En Selecciona un tema de Cloud Pub/Sub, elige el tema onelogin-sso-logs-trigger.
    4. Haz clic en Guardar.
  6. En la sección Autenticación, haz lo siguiente:

    1. Selecciona Necesita autenticación.
    2. Verifica Identity and Access Management (IAM).
  7. Desplázate hacia abajo y expande Contenedores, redes y seguridad.

  8. Ve a la pestaña Seguridad:

    • Cuenta de servicio: Selecciona la cuenta de servicio onelogin-sso-logs-collector-sa.
  9. Ve a la pestaña Contenedores:

    1. Haz clic en Variables y secretos.
    2. Haz clic en + Agregar variable para cada variable de entorno:
    Nombre de la variable Valor de ejemplo Descripción
    GCS_BUCKET onelogin-sso-logs Nombre del bucket de GCS
    GCS_PREFIX onelogin Prefijo para los archivos de registro
    STATE_KEY onelogin/state.json Ruta de acceso al archivo de estado
    ONELOGIN_CLIENT_ID your-client-id ID de cliente de la API de OneLogin
    ONELOGIN_CLIENT_SECRET your-client-secret Secreto del cliente de la API de OneLogin
    ONELOGIN_API_BASE https://api.us.onelogin.com URL base de la API de OneLogin
    MAX_RECORDS 5000 Cantidad máxima de registros por ejecución
    PAGE_SIZE 250 Registros por página (máx. 250)
    LOOKBACK_HOURS 24 Período de visualización inicial
  10. En la sección Variables y Secrets, desplázate hacia abajo hasta Solicitudes:

    • Tiempo de espera de la solicitud: Ingresa 600 segundos (10 minutos).
  11. Ve a la pestaña Configuración:

    • En la sección Recursos, haz lo siguiente:
      • Memoria: Selecciona 512 MiB o más.
      • CPU: Selecciona 1.
  12. En la sección Escalamiento de revisión, haz lo siguiente:

    • Cantidad mínima de instancias: Ingresa 0.
    • Cantidad máxima de instancias: Ingresa 100 (o ajusta según la carga esperada).
  13. Haz clic en Crear.

  14. Espera a que se cree el servicio (de 1 a 2 minutos).

  15. Después de crear el servicio, se abrirá automáticamente el editor de código intercalado.

Agregar el código de función

  1. Ingresa main en el campo Punto de entrada.
  2. En el editor de código intercalado, crea dos archivos:

    • main.py:
    import functions_framework
    from google.cloud import storage
    import json
    import os
    import urllib3
    from datetime import datetime, timezone, timedelta
    import time
    
    # Initialize HTTP client with timeouts
    http = urllib3.PoolManager(
      timeout=urllib3.Timeout(connect=5.0, read=30.0),
      retries=False,
    )
    
    # Initialize Storage client
    storage_client = storage.Client()
    
    # Environment variables
    GCS_BUCKET = os.environ.get('GCS_BUCKET')
    GCS_PREFIX = os.environ.get('GCS_PREFIX', 'onelogin')
    STATE_KEY = os.environ.get('STATE_KEY', 'onelogin/state.json')
    ONELOGIN_CLIENT_ID = os.environ.get('ONELOGIN_CLIENT_ID')
    ONELOGIN_CLIENT_SECRET = os.environ.get('ONELOGIN_CLIENT_SECRET')
    ONELOGIN_API_BASE = os.environ.get('ONELOGIN_API_BASE')
    MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '5000'))
    PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '250'))
    LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
    
    def parse_datetime(value: str) -> datetime:
      """Parse ISO datetime string to datetime object."""
      if value.endswith("Z"):
        value = value[:-1] + "+00:00"
      return datetime.fromisoformat(value)
    
    def get_access_token():
      """
      Obtain OAuth2 access token using client credentials grant.
      OneLogin uses /auth/oauth2/v2/token endpoint.
      """
      base_url = ONELOGIN_API_BASE.rstrip('/')
      token_url = f"{base_url}/auth/oauth2/v2/token"
    
      headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      }
    
      body = json.dumps({
        'grant_type': 'client_credentials',
        'client_id': ONELOGIN_CLIENT_ID,
        'client_secret': ONELOGIN_CLIENT_SECRET
      })
    
      backoff = 1.0
      for attempt in range(3):
        response = http.request('POST', token_url, body=body, headers=headers)
    
        if response.status == 429:
          retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
          print(f"Rate limited (429) on token request. Retrying after {retry_after}s...")
          time.sleep(retry_after)
          backoff = min(backoff * 2, 30.0)
          continue
    
        if response.status != 200:
          raise RuntimeError(f"Failed to get access token: {response.status} - {response.data.decode('utf-8')}")
    
        data = json.loads(response.data.decode('utf-8'))
        return data['access_token']
    
      raise RuntimeError("Failed to get access token after 3 retries")
    
    @functions_framework.cloud_event
    def main(cloud_event):
      """
      Cloud Run function triggered by Pub/Sub to fetch OneLogin
      event logs and write to GCS.
    
      Args:
        cloud_event: CloudEvent object containing Pub/Sub message
      """
    
      if not all([GCS_BUCKET, ONELOGIN_CLIENT_ID, ONELOGIN_CLIENT_SECRET, ONELOGIN_API_BASE]):
        print('Error: Missing required environment variables')
        return
    
      try:
        bucket = storage_client.bucket(GCS_BUCKET)
    
        # Load state
        state = load_state(bucket, STATE_KEY)
    
        # Determine time window
        now = datetime.now(timezone.utc)
        last_time = None
    
        if isinstance(state, dict) and state.get("last_event_time"):
          try:
            last_time = parse_datetime(state["last_event_time"])
            # Overlap by 2 minutes to catch any delayed events
            last_time = last_time - timedelta(minutes=2)
          except Exception as e:
            print(f"Warning: Could not parse last_event_time: {e}")
    
        if last_time is None:
          last_time = now - timedelta(hours=LOOKBACK_HOURS)
    
        print(f"Fetching logs from {last_time.isoformat()} to {now.isoformat()}")
    
        # Get access token
        token = get_access_token()
    
        # Fetch events
        records, newest_event_time = fetch_logs(
          token=token,
          start_time=last_time,
          end_time=now,
          page_size=PAGE_SIZE,
          max_records=MAX_RECORDS,
        )
    
        if not records:
          print("No new log records found.")
          save_state(bucket, STATE_KEY, now.isoformat())
          return
    
        # Write to GCS as NDJSON
        timestamp = now.strftime('%Y%m%d_%H%M%S')
        object_key = f"{GCS_PREFIX}/logs_{timestamp}.ndjson"
        blob = bucket.blob(object_key)
    
        ndjson = '\n'.join([json.dumps(record, ensure_ascii=False) for record in records]) + '\n'
        blob.upload_from_string(ndjson, content_type='application/x-ndjson')
    
        print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}")
    
        # Update state with newest event time
        if newest_event_time:
          save_state(bucket, STATE_KEY, newest_event_time)
        else:
          save_state(bucket, STATE_KEY, now.isoformat())
    
        print(f"Successfully processed {len(records)} records")
    
      except Exception as e:
        print(f'Error processing logs: {str(e)}')
        raise
    
    def load_state(bucket, key):
      """Load state from GCS."""
      try:
        blob = bucket.blob(key)
        if blob.exists():
          state_data = blob.download_as_text()
          return json.loads(state_data)
      except Exception as e:
        print(f"Warning: Could not load state: {e}")
    
      return {}
    
    def save_state(bucket, key, last_event_time_iso: str):
      """Save the last event timestamp to GCS state file."""
      try:
        state = {'last_event_time': last_event_time_iso}
        blob = bucket.blob(key)
        blob.upload_from_string(
          json.dumps(state, indent=2),
          content_type='application/json'
        )
        print(f"Saved state: last_event_time={last_event_time_iso}")
      except Exception as e:
        print(f"Warning: Could not save state: {e}")
    
    def fetch_logs(token: str, start_time: datetime, end_time: datetime, page_size: int, max_records: int):
      """
      Fetch event logs from the OneLogin Events API v2
      with cursor-based pagination and rate limiting.
    
      Args:
        token: OAuth2 access token
        start_time: Start time for log query
        end_time: End time for log query
        page_size: Number of records per page (max 250)
        max_records: Maximum total records to fetch
    
      Returns:
        Tuple of (records list, newest_event_time ISO string)
      """
      base_url = ONELOGIN_API_BASE.rstrip('/')
      endpoint = f"{base_url}/api/2/events"
    
      headers = {
        'Authorization': f'Bearer {token}',
        'Accept': 'application/json',
        'User-Agent': 'GoogleSecOps-OneLoginSSOCollector/1.0'
      }
    
      records = []
      newest_time = None
      page_num = 0
      backoff = 1.0
    
      start_iso = start_time.strftime('%Y-%m-%dT%H:%M:%SZ')
      end_iso = end_time.strftime('%Y-%m-%dT%H:%M:%SZ')
    
      cursor = None
    
      while True:
        page_num += 1
    
        if len(records) >= max_records:
          print(f"Reached max_records limit ({max_records})")
          break
    
        params = [
          f"limit={min(page_size, max_records - len(records))}",
          f"since={start_iso}",
          f"until={end_iso}"
        ]
        if cursor:
          params.append(f"cursor={cursor}")
    
        url = f"{endpoint}?{'&'.join(params)}"
    
        try:
          response = http.request('GET', url, headers=headers)
    
          # Handle rate limiting with exponential backoff
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
            print(f"Rate limited (429). Retrying after {retry_after}s...")
            time.sleep(retry_after)
            backoff = min(backoff * 2, 30.0)
            continue
    
          backoff = 1.0
    
          if response.status != 200:
            print(f"HTTP Error: {response.status}")
            response_text = response.data.decode('utf-8')
            print(f"Response body: {response_text}")
            return records, newest_time
    
          data = json.loads(response.data.decode('utf-8'))
    
          page_results = data.get('data', [])
    
          if not page_results:
            print(f"No more results (empty page)")
            break
    
          print(f"Page {page_num}: Retrieved {len(page_results)} events")
          records.extend(page_results)
    
          # Track newest event time
          for event in page_results:
            try:
              event_time = event.get('created_at')
              if event_time:
                if newest_time is None or parse_datetime(event_time) > parse_datetime(newest_time):
                  newest_time = event_time
            except Exception as e:
              print(f"Warning: Could not parse event time: {e}")
    
          # Check for next page using cursor from pagination
          pagination = data.get('pagination', {})
          cursor = pagination.get('after_cursor')
          if not cursor:
            print("No more pages (no next cursor)")
            break
    
        except Exception as e:
          print(f"Error fetching logs: {e}")
          return records, newest_time
    
      print(f"Retrieved {len(records)} total records from {page_num} pages")
      return records, newest_time
    

    • requirements.txt:
    functions-framework==3.*
    google-cloud-storage==2.*
    urllib3>=2.0.0
    
  3. Haz clic en Implementar para guardar y, luego, implementar la función.

  4. Espera a que se complete la implementación (de 2 a 3 minutos).

Crea un trabajo de Cloud Scheduler

Cloud Scheduler publicará mensajes en el tema de Pub/Sub a intervalos regulares, lo que activará la función de Cloud Run.

  1. En Google Cloud Console, ve a Cloud Scheduler.
  2. Haz clic en Crear trabajo.
  3. Proporciona los siguientes detalles de configuración:

    Parámetro de configuración Valor
    Nombre onelogin-sso-logs-collector-hourly
    Región Selecciona la misma región que la función de Cloud Run
    Frecuencia 0 * * * * (cada hora, en punto)
    Zona horaria Selecciona la zona horaria (se recomienda UTC)
    Tipo de objetivo Pub/Sub
    Tema Selecciona el tema onelogin-sso-logs-trigger.
    Cuerpo del mensaje {} (objeto JSON vacío)
  4. Haz clic en Crear.

Opciones de frecuencia de programación

Elige la frecuencia según el volumen de registros y los requisitos de latencia:

Frecuencia Expresión cron Caso de uso
Cada 5 minutos */5 * * * * Alto volumen y baja latencia
Cada 15 minutos */15 * * * * Volumen medio
Cada 1 hora 0 * * * * Estándar (recomendado)
Cada 6 horas 0 */6 * * * Procesamiento por lotes de bajo volumen
Diario 0 0 * * * Recopilación de datos históricos

Prueba la integración

  1. En la consola de Cloud Scheduler, busca tu trabajo.
  2. Haz clic en Ejecutar forzosamente para activar el trabajo de forma manual.
  3. Espera unos segundos.
  4. Ve a Cloud Run > Servicios.
  5. Haz clic en onelogin-sso-logs-collector:
  6. Haz clic en la pestaña Registros.
  7. Verifica que la función se haya ejecutado correctamente. Busca lo siguiente:

    Fetching logs from YYYY-MM-DDTHH:MM:SS+00:00 to YYYY-MM-DDTHH:MM:SS+00:00
    Page 1: Retrieved X events
    Wrote X records to gs://onelogin-sso-logs/onelogin/logs_YYYYMMDD_HHMMSS.ndjson
    Successfully processed X records
    
  8. Ve a Cloud Storage > Buckets.

  9. Haz clic en el nombre de tu bucket (onelogin-sso-logs).

  10. Navega a la carpeta onelogin/:

  11. Verifica que se haya creado un archivo .ndjson nuevo con la marca de tiempo actual.

Si ves errores en los registros, haz lo siguiente:

  • HTTP 401: Verifica las credenciales de la API en las variables de entorno
  • HTTP 403: Verifica que las credenciales de la API tengan el permiso Read All en el portal de administración de OneLogin.
  • HTTP 429: Limitación de frecuencia. La función volverá a intentarlo automáticamente con una espera exponencial.
  • Faltan variables de entorno: Verifica que estén configuradas todas las variables requeridas.

Configura un feed en Google SecOps para transferir registros de OneLogin by One Identity

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. Haz clic en Configura un feed único.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, OneLogin SSO Logs).
  5. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  6. Selecciona OneLogin como el Tipo de registro.
  7. Haz clic en Obtener cuenta de servicio. Se mostrará un correo electrónico único de la cuenta de servicio, por ejemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia esta dirección de correo electrónico.

  9. Haz clic en Siguiente.

  10. Especifica valores para los siguientes parámetros de entrada:

    • URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS con la ruta de acceso del prefijo:

      gs://onelogin-sso-logs/onelogin/
      
      • Reemplaza:
        • onelogin-sso-logs: Es el nombre de tu bucket de GCS.
        • onelogin: Es el prefijo o la ruta de carpeta opcional en la que se almacenan los registros (déjalo vacío para la raíz).
    • Opción de eliminación del código fuente: Selecciona la opción de eliminación según tu preferencia:

      • Nunca: Nunca borra ningún archivo después de las transferencias (se recomienda para las pruebas).
      • Borrar archivos transferidos: Borra los archivos después de que se transfirieron correctamente.
      • Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de que se transfirieron correctamente.

    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada (el valor predeterminado es 180 días).

    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.

    • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.

  11. Haz clic en Siguiente.

  12. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Otorga permisos de IAM a la cuenta de servicio de Google SecOps

La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de Storage en tu bucket de GCS.

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre del bucket.
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:

    • Agregar entidades: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
    • Asignar roles: Selecciona Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
id metadata.product_log_id Asignado directamente
created_at metadata.event_timestamp Se convirtió en marca de tiempo
account_id principal.namespace Se asigna directamente y se convierte en cadena.
actor_user_id principal.user.userid Se asigna directamente y se convierte en cadena.
actor_user_name principal.user.user_display_name Asignado directamente
user_id target.user.userid Se asigna directamente y se convierte en cadena.
user_name target.user.user_display_name Asignado directamente
event_type_id metadata.product_event_type Se asigna directamente y se convierte en cadena.
ipaddr principal.ip Asignado directamente
notas metadata.description Asignado directamente
app_id target.application Se asigna directamente y se convierte en cadena.
app_name target.resource.name Asignado directamente
group_id target.group.product_object_id Se asigna directamente y se convierte en cadena.
group_name target.group.group_display_name Asignado directamente
directory_id additional.fields.value.string_value (clave: directory_id) Asignado directamente
role_id principal.user.attribute.roles.id Se asigna directamente y se convierte en cadena.
role_name principal.user.attribute.roles.name Asignado directamente
otp_device_id additional.fields.value.string_value (clave: otp_device_id) Asignado directamente
otp_device_name additional.fields.value.string_value (clave: otp_device_name) Asignado directamente
policy_id security_result.rule_id Se asigna directamente y se convierte en cadena.
policy_name security_result.rule_name Asignado directamente
client_id additional.fields.value.string_value (clave: client_id) Asignado directamente
browser_fingerprint additional.fields.value.string_value (clave: browser_fingerprint) Asignado directamente
custom_message security_result.description Asignado directamente
error_description security_result.description Se asigna directamente si custom_message está vacío.
metadata.vendor_name Se establece en "OneLogin".
metadata.product_name Se establece en "SSO de OneLogin".
metadata.log_type Se establece en "ONELOGIN_SSO".
metadata.event_type Se determina según event_type_id: USER_LOGIN para eventos de autenticación, USER_RESOURCE_ACCESS para eventos de acceso a la app, USER_CHANGE_PERMISSIONS para cambios de roles o permisos, y GENERIC_EVENT para otros casos.
user_attributes.username event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
adc_id event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
adc_name event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
user_attributes.openid_name event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
user_attributes.samaccountname event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
user_attributes.member_of event.idm.read_only_udm.additional.fields Se asignó desde el registro de cambios
user_attributes.group_id event.idm.read_only_udm.target.group.product_object_id Se asignó desde el registro de cambios
user_attributes.lastname principal.user.last_name Se asignó desde el registro de cambios
user_attributes.firstname principal.user.first_name Se asignó desde el registro de cambios
user_attributes.department principal.user.department Se asignó desde el registro de cambios
user_attributes.title principal.user.title Se asignó desde el registro de cambios
user_attributes.email principal.user.email_addresses Se asignó desde el registro de cambios
id metadata.product_object_id Se asignó desde el registro de cambios
assuming_acting_user_id additional.fields Se asignó desde el registro de cambios
directory_sync_run_id additional.fields Se asignó desde el registro de cambios
resource_type_id additional.fields Se asignó desde el registro de cambios
user_agent network.http.parsed_user_agent Se asignó desde el registro de cambios
otp_device_id principal.asset_id Se asignó desde el registro de cambios
actor_system additional.fields Se asignó desde el registro de cambios
operation_name additional.fields Se asignó desde el registro de cambios
resolution additional.fields Se asignó desde el registro de cambios
risk_cookie_id additional.fields Se asignó desde el registro de cambios
event_type_ids additional.fields Se asignó desde el registro de cambios
since additional.fields Se asignó desde el registro de cambios
until additional.fields Se asignó desde el registro de cambios
proxy_ip intermediary.ip Se asignó desde el registro de cambios

Registro de cambios

Consulta el registro de cambios de este analizador

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.