Recopila registros de auditoría de GitHub

Compatible con:

Descripción general

Este analizador controla los registros de auditoría de GitHub en formato JSON. Limpia la entrada quitando varios campos, realiza varias operaciones de grok y par clave-valor en función del campo process_type para extraer información relevante, asigna los campos extraídos a la UDM y estructura el resultado para la transferencia de SecOps de Google. También controla casos extremos específicos y realiza transformaciones de datos para diferentes subtipos de registros dentro de los registros de auditoría de GitHub.

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener acceso con privilegios a los repositorios de GitHub.

Configura un feed en Google SecOps para transferir los registros de GitHub

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de GitHub).
  4. Selecciona Webhook como el Tipo de origen.
  5. Selecciona GitHub como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Opcional: Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como \n.
    • Espacio de nombres de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
  10. Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
  11. Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
  12. En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
  13. Haz clic en Listo.

Crea una clave de API para el feed de webhook

  1. Ve a consola de Google Cloud > Credenciales.

    Ir a Credenciales

  2. Haz clic en Crear credenciales y selecciona Clave de API.

  3. Restringe el acceso de la clave de API a la API de Google Security Operations.

Especifica la URL del extremo

  1. En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
  2. Habilita la autenticación especificando la clave de API y la clave secreta como parte del encabezado personalizado en el siguiente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de consulta en el siguiente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Reemplaza lo siguiente:

  • ENDPOINT_URL: Es la URL del extremo del feed.
  • API_KEY: Es la clave de API para autenticarse en Google Security Operations.
  • SECRET: Es la clave secreta que generaste para autenticar el feed.

Crea un webhook en GitHub

En esta guía, se proporcionan instrucciones paso a paso para crear un webhook en GitHub y enviar datos a Google SecOps.

  1. Navega a tu repositorio de GitHub.
  2. Ve a Configuración.
  3. Haz clic en Webhooks.
  4. Haz clic en Add webhook (Agregar webhook).
  5. En el campo URL de la carga útil, ingresa la URL del extremo de la API de Google SecOps.
  6. Selecciona application/json como Tipo de contenido.

    Opcional: Para mejorar la seguridad, configura un Secreto. Esto genera una firma para las cargas útiles de webhook, lo que te permite verificar su autenticidad en el lado de SecOps de Google. Si usas un secreto, configúralo también en tu feed de Google SecOps.

  7. Elige los eventos que activarán el webhook. Para obtener un registro completo, selecciona Permitirme seleccionar eventos individuales y marca los eventos relevantes (por ejemplo, Push, Solicitud de extracción, Problema). Si no lo tienes claro, comienza con Solo el evento push.

  8. Asegúrate de que esté seleccionada la casilla de verificación Activo.

  9. Haz clic en Agregar webhook para guardar la configuración.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
_document_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El _document_id del registro sin procesar se asigna a un par clave-valor en el array additional.fields dentro de la UDM.
action read_only_udm.metadata.product_event_type, read_only_udm.security_result.summary El campo action se asigna a product_event_type en los metadatos y a summary en security_result.
actor read_only_udm.principal.user.userid El campo actor, que representa al usuario que realiza la acción, se asigna a principal.user.userid.
actor_id read_only_udm.principal.user.attribute.labels.[].key, read_only_udm.principal.user.attribute.labels.[].value El actor_id se asigna como una etiqueta dentro del array principal.user.attribute.labels.
actor_ip read_only_udm.principal.ip La dirección IP del actor se asigna a principal.ip.
actor_location.country_code read_only_udm.principal.location.country_or_region El código de país del actor se asigna a principal.location.country_or_region.
application_name read_only_udm.target.application El nombre de la aplicación se asigna a target.application.
business read_only_udm.target.user.company_name, read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El nombre de la empresa se asigna a target.user.company_name y como un par clave-valor en additional.fields.
business_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value El ID de la empresa se asigna como una etiqueta dentro del array target.resource.attribute.labels.
config.url read_only_udm.target.url La URL de configuración se asigna a target.url.
created_at read_only_udm.metadata.event_timestamp La marca de tiempo created_at se convierte al formato adecuado y se asigna a metadata.event_timestamp.
data.cancelled_at read_only_udm.extensions.vulns.vulnerabilities.scan_end_time La marca de tiempo data.cancelled_at se convierte y se asigna a extensions.vulns.vulnerabilities.scan_end_time.
data.email read_only_udm.target.email La dirección de correo electrónico del campo de datos se asigna a target.email.
data.event read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El evento del campo de datos se asigna como una etiqueta dentro del array security_result.about.labels.
data.events read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Los eventos del campo de datos se asignan como etiquetas dentro del array security_result.about.labels.
data.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value La rama principal del campo de datos se asigna como una etiqueta dentro del array security_result.about.labels.
data.head_sha read_only_udm.target.file.sha256 El SHA principal del campo de datos se asigna a target.file.sha256.
data.hook_id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value El ID del hook del campo de datos se asigna como una etiqueta dentro del array target.resource.attribute.labels.
data.started_at read_only_udm.extensions.vulns.vulnerabilities.scan_start_time La marca de tiempo data.started_at se convierte y se asigna a extensions.vulns.vulnerabilities.scan_start_time.
data.team read_only_udm.target.user.group_identifiers El equipo del campo de datos se asigna a target.user.group_identifiers.
data.trigger_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El ID del activador del campo de datos se asigna como una etiqueta dentro del array security_result.about.labels.
data.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El ID del flujo de trabajo del campo de datos se asigna como una etiqueta dentro del array security_result.about.labels.
data.workflow_run_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El ID de ejecución del flujo de trabajo del campo de datos se asigna como una etiqueta dentro del array security_result.about.labels.
enterprise.name read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El nombre de la empresa se asigna como un par clave-valor en additional.fields.
external_identity_nameid read_only_udm.target.user.userid, read_only_udm.target.user.email_addresses Si external_identity_nameid es una dirección de correo electrónico, la parte del nombre de usuario se extrae y se asigna a target.user.userid, y el correo electrónico completo se agrega a target.user.email_addresses. De lo contrario, todo el valor se asigna a target.user.userid.
external_identity_username read_only_udm.target.user.user_display_name El nombre de usuario de la identidad externa se asigna a target.user.user_display_name.
hashed_token read_only_udm.network.session_id El token con codificación hash se asigna a network.session_id.
org read_only_udm.target.administrative_domain La organización se asigna a target.administrative_domain.
org_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El ID de la organización se asigna como un par clave-valor en additional.fields.
programmatic_access_type read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El tipo de acceso programático se asigna como un par clave-valor en additional.fields.
public_repo read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value, read_only_udm.target.location.name El valor public_repo determina el valor asignado a un par clave-valor en additional.fields y target.location.name. "false" se asigna a "PRIVATE" y otros valores se asignan a "PUBLIC".
query_string read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value La cadena de consulta se asigna como un par clave-valor en additional.fields.
rate_limit_remaining read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El límite de frecuencia restante se asigna como un par clave-valor en additional.fields.
repo read_only_udm.target.resource.name El repositorio se asigna a target.resource.name.
repo_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El ID del repositorio se asigna como un par clave-valor en additional.fields.
repository_public read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value La marca pública del repositorio se asigna como un par clave-valor en additional.fields.
request_body read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El cuerpo de la solicitud se asigna como un par clave-valor en additional.fields.
request_method read_only_udm.network.http.method El método de solicitud se convierte a mayúsculas y se asigna a network.http.method.
route read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value La ruta se asigna como un par clave-valor en additional.fields.
status_code read_only_udm.network.http.response_code El código de estado se convierte en un número entero y se asigna a network.http.response_code.
token_id read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El ID del token se asigna como un par clave-valor en additional.fields.
token_scopes read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Los alcances de los tokens se asignan como un par clave-valor en additional.fields.
transport_protocol_name read_only_udm.network.application_protocol El nombre del protocolo de transporte se convierte a mayúsculas y se asigna a network.application_protocol.
url_path read_only_udm.target.url La ruta de URL se asigna a target.url.
user read_only_udm.target.user.user_display_name El usuario se asigna a target.user.user_display_name.
user_agent read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent El usuario-agente se asigna a network.http.user_agent y su versión analizada se asigna a network.http.parsed_user_agent.
user_id read_only_udm.target.user.userid El ID de usuario se asigna a target.user.userid.
workflow.name read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El nombre del flujo de trabajo se asigna como una etiqueta dentro del array security_result.about.labels.
workflow_run.event read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value El evento de ejecución del flujo de trabajo se asigna como un par clave-valor en additional.fields.
workflow_run.head_branch read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value La rama principal de ejecución del flujo de trabajo se asigna como una etiqueta dentro del array security_result.about.labels.
workflow_run.head_sha read_only_udm.target.file.sha256 El SHA de la ejecución del flujo de trabajo se asigna a target.file.sha256.
workflow_run.id read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value El ID de ejecución del flujo de trabajo se asigna como una etiqueta dentro del array target.resource.attribute.labels.
workflow_run.workflow_id read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value El ID de ejecución del flujo de trabajo se asigna como una etiqueta dentro del array security_result.about.labels.
(lógica del analizador) read_only_udm.metadata.event_type El analizador determina el tipo de evento según la presencia y los valores de otros campos, como data.team, action y actor. El valor predeterminado es USER_RESOURCE_ACCESS si no se cumple ninguna otra condición específica.
(lógica del analizador) read_only_udm.metadata.log_type El tipo de registro está codificado en "GITHUB".
(lógica del analizador) read_only_udm.metadata.product_name El nombre del producto está codificado como "GITHUB".
(lógica del analizador) read_only_udm.metadata.vendor_name El nombre del proveedor está codificado como "GITHUB".
(lógica del analizador) read_only_udm.target.resource.resource_type El tipo de recurso se establece en STORAGE_OBJECT cuando el campo repo está presente.
(lógica del analizador) read_only_udm.target.resource.type El tipo de recurso se deriva del campo action.
(lógica del analizador) read_only_udm.security_result.action La acción de seguridad (ALLOW/BLOCK) se deriva de los campos at o raw.at si están presentes y son iguales a "success" o no.
(lógica del analizador) read_only_udm.security_result.severity La gravedad de la seguridad se deriva de los campos level o SeverityText si están presentes. "INFO" se asigna a "INFORMATIONAL", "WARN" a "MEDIUM" y otros valores se asignan directamente. Para los registros de git-daemon, "fatal" se asigna a "CRITICAL".
(lógica del analizador) read_only_udm.network.application_protocol El protocolo de la aplicación se deriva de los campos protocol, proto, babeld_proto, transport_protocol_name o raw.protocol, que se convierten a mayúsculas y se verifican si contienen "HTTP", "HTTPS" y "SSH".
(lógica del analizador) read_only_udm.network.application_protocol_version La versión del protocolo de la aplicación se deriva del campo http_version, si está presente.
(lógica del analizador) read_only_udm.network.http.parsed_user_agent El usuario-agente analizado se deriva de los campos user_agent, column5, http_ua o content, si están presentes.
(lógica del analizador) read_only_udm.network.received_bytes Los bytes recibidos se derivan de los campos column3, read_bytes, fs_recv o uploaded_bytes, si están presentes, y se convierten en un número entero sin signo.
(lógica del analizador) read_only_udm.network.received_packets Los paquetes recibidos se derivan del campo client_recv, si está presente, y se convierten en un número entero.
(lógica del analizador) read_only_udm.network.response_code El código de respuesta se deriva de los campos column2, status, status_code o http_status, si están presentes, y se convierte en un número entero.
(lógica del analizador) read_only_udm.network.sent_bytes Los bytes enviados se derivan del campo client_sent, si está presente, y se convierten en un número entero sin firma.
(lógica del analizador) read_only_udm.network.sent_packets Los paquetes enviados se derivan del campo fs_sent, si está presente, y se convierten en un número entero.
(lógica del analizador) read_only_udm.network.session_duration.seconds La duración de la sesión en segundos se deriva del campo time_duration, si está presente, y se convierte en un número entero.
(lógica del analizador) read_only_udm.target.file.full_path La ruta de acceso completa del archivo de destino se deriva de los campos path, git_dir o dir, si están presentes.
(lógica del analizador) read_only_udm.target.file.sha1 El SHA1 del archivo de destino se deriva del campo sha si está presente.
(lógica del analizador) read_only_udm.target.hostname El nombre de host de destino se deriva del campo client_hostname, si está presente.
(lógica del analizador) read_only_udm.target.ip La IP de destino se obtiene de los campos x_real_ip, remote_address, client_ip o remote_addr, si están presentes.
(lógica del analizador) read_only_udm.target.location.name El nombre de la ubicación de destino se deriva de los campos datacenter o public_repo, si están presentes.
(lógica del analizador) read_only_udm.target.port El puerto de destino se deriva de los campos client_port, dstp o remote_port, si están presentes, y se convierte en un número entero.
(lógica del analizador) read_only_udm.target.process.command_line La línea de comandos del proceso de destino se deriva de los campos command, ssh_cmd, cmdline o cmd, si están presentes.
(lógica del analizador) read_only_udm.target.process.parent_process.pid El ID del proceso superior del proceso de destino se deriva del campo ppid, si está presente, y se convierte en una cadena.
(lógica del analizador) read_only_udm.target.process.pid El ID del proceso de destino se deriva del campo pid, si está presente, y se convierte en una cadena.
(lógica del analizador) read_only_udm.target.url La URL de destino se obtiene de los campos url, http_url, request_url, http_request, dest_url, config.url o url_path, si están presentes. También se puede construir a partir de path_info y query_string.
(lógica del analizador) read_only_udm.target.user.attribute.roles.[].name Los roles de usuario objetivo se derivan de los campos actor_type o user_type, si están presentes.
(lógica del analizador) read_only_udm.target.user.email_addresses Las direcciones de correo electrónico de los usuarios objetivo se derivan del campo external_identity_nameid si es una dirección de correo electrónico.
(lógica del analizador) read_only_udm.target.user.group_identifiers Los identificadores de grupos de usuarios objetivo se derivan del campo data.team, si está presente.
(lógica del analizador) read_only_udm.target.user.userid El ID de usuario objetivo se obtiene de los campos userid, external_identity_nameid, current_user, member, user_id, actor_id o raw.user_id, si están presentes.
(lógica del analizador) read_only_udm.target.user.user_display_name El nombre visible del usuario de destino se deriva de los campos login, user, external_identity_username, user_login o raw.login, si están presentes.
(lógica del analizador) read_only_udm.principal.asset.asset_id El ID del activo principal se deriva del campo guid, con el prefijo "GUID: ".
(lógica del analizador) read_only_udm.principal.hostname El nombre de host principal se deriva de los campos hostname, request_host, host o principal_hostname, si están presentes.
(lógica del analizador) read_only_udm.principal.ip La IP principal se deriva de los campos column6, ip, x_real_ip, remote_address, raw.ip, actor_ip o log:source:ip, si están presentes.
(lógica del analizador) read_only_udm.principal.location.country_or_region El país o la región de la ubicación principal se derivan del campo actor_location.country_code, si está presente.
(lógica del analizador) read_only_udm.principal.port El puerto principal se deriva de los campos srcp o log:source:port, si están presentes, y se convierte en un número entero.
(lógica del analizador) read_only_udm.principal.resource.name El nombre del recurso principal se deriva del campo service.name, si está presente.
(lógica del analizador) read_only_udm.principal.resource.product_object_id El ID del objeto de producto del recurso principal se deriva de los campos service.instance.id o subject_id, si están presentes.
(lógica del analizador) read_only_udm.principal.url La URL principal se deriva del campo repo si está presente.
(lógica del analizador) read_only_udm.principal.user.userid El ID de usuario principal se deriva del campo repository_owner_id, si está presente, y se convierte en una cadena.
(lógica del analizador) read_only_udm.principal.user.user_display_name El nombre visible del usuario principal se deriva del campo repo_name, si está presente.
(lógica del analizador) read_only_udm.intermediary.hostname El nombre de host intermedio se deriva del campo hostname si está presente.
(lógica del analizador) read_only_udm.intermediary.ip La IP intermedia se deriva de los campos x_forwarded_for o xff_ip, si están presentes.
(lógica del analizador) read_only_udm.metadata.description La descripción de los metadatos se deriva de los campos content, at o raw.message, si están presentes.
(lógica del analizador) read_only_udm.metadata.product_event_type El tipo de evento de producto se deriva de los campos process_type o action, si están presentes.
(lógica del analizador) read_only_udm.metadata.product_log_id El ID de registro del producto se obtiene de los campos github_request_id, id, request_id o raw.request_id, si están presentes.
(lógica del analizador) read_only_udm.metadata.product_version La versión del producto se deriva del campo version, si está presente.
(lógica del analizador) read_only_udm.security_result.about.labels.[].key, read_only_udm.security_result.about.labels.[].value Se agregan varias etiquetas al array security_result.about.labels según la presencia y los valores de campos como data.events, data.workflow_id, workflow.name, data.head_branch, data.trigger_id, data.workflow_run_id y data.event.
(lógica del analizador) read_only_udm.security_result.description La descripción del resultado de seguridad se deriva de los campos auth_status, data_msg, msg, Body, desc o content, si están presentes.
(lógica del analizador) read_only_udm.security_result.severity_details Los detalles de gravedad del resultado de seguridad se derivan del campo userid, si está presente.
(lógica del analizador) read_only_udm.security_result.summary El resumen de los resultados de seguridad se deriva de los campos creason, action o reason, si están presentes.
(lógica del analizador) read_only_udm.network.http.referral_url La URL de referencia HTTP se deriva de los campos column4 o referer, si están presentes.
(lógica del analizador) read_only_udm.network.http.user_agent El usuario-agente HTTP se deriva de los campos column5, http_ua o user_agent, si están presentes.
(lógica del analizador) read_only_udm.network.sent_bytes Los bytes enviados por la red se derivan de los campos client_sent o fs_sent, si están presentes, y se convierten en un número entero sin firmar.
(lógica del analizador) read_only_udm.additional.fields.[].key, read_only_udm.additional.fields.[].value.string_value Muchos campos se asignan de forma condicional como pares clave-valor en el array additional.fields, incluidos auth_fingerprint, controller, oauth_access_id, oauth_application_id, oauth_scopes, route, worker_request_count, repo, repo_visibility, auth, content_length, elapsed, catalog_service, action, method, failure_type, failure_reason, hashed_token, token_type, gitauth_version, enterprise.name, programmatic_access_type, token_id, token_scopes, integration, query_string, rate_limit_remaining, request_body, org_id, repo_id, repository_public, raw.method, raw.failure_type, raw.failure_reason, raw.from, raw.raw_login, device_cookie, operation, operation_type, category_type, business, note, read, pre_perform_allocation_count, backend, queue, class, success, env, job_id y job. La lógica específica de cada campo se detalla en el código del analizador.
(lógica del analizador) read_only_udm.security_result.detection_fields.[].key, read_only_udm.security_result.detection_fields.[].value Los campos controller_action, two_factor, delay_time, queued_time, delivery_build, delivery_send y stages se asignan de forma condicional al array security_result.detection_fields.
(lógica del analizador) read_only_udm.target.resource.attribute.labels.[].key, read_only_udm.target.resource.attribute.labels.[].value Los campos hook_id, job_name, job_workflow_ref, runner_group_id, runner_group_name, runner_name, runner_id, workflow_run_id y business_id se asignan de forma condicional como etiquetas dentro del array target.resource.attribute.labels.
(lógica del analizador) read_only_udm.metadata.event_timestamp Si la marca de tiempo no está disponible directamente en un formato compatible, el analizador intenta extraerla y convertirla desde varios campos, incluidos ts, now, created_at, Timestamp, time y raw.now.
(lógica del analizador) read_only_udm.network.http.method El método HTTP se deriva de los campos method, column1, request_method, http_method o raw.method, que se convierten a mayúsculas.
(lógica del analizador) read_only_udm.target.application La aplicación de destino se deriva de los campos process, program o app, si están presentes.

Cambios

2023-12-18

  • Corrección de errores:
  • Si "process_type" es "github_production", se agregó un patrón Grok para extraer "kv_data".
  • Si "process_type" es "github_production", se asignó "user" a "target.user.user_display_name".
  • Si "process_type" es "github_production", se asignó "user_id" a "target.user.userid".
  • Se asignó "referrer" a "network.http.referral_url".
  • Se asignó "user_session_id" a "network.session_id".
  • Se asignó "ip" a "principal.ip".
  • Se asignó "from" a "additional.fields".
  • Se asignó "request_category" a "additional.fields".
  • Se asignó "device_cookie" a "additional.fields".
  • Se asignó "operation_type" a "additional.fields".
  • Se asignó "category_type" a "additional.fields".
  • Se asignó "note" a "additional.fields".
  • Se asignó "read" a "additional.fields".
  • Se asignó "pre_perform_allocation_count" a "additional.fields".
  • Se asignó "backend" a "additional.fields".
  • Se asignó "queue" a "additional.fields".
  • Se asignó "class" a "additional.fields".
  • Se asignó "success" a "additional.fields".
  • Se asignó "controller_action" a "security_result.detection_fields".
  • Se asignó "two_factor" a "security_result.detection_fields".

2023-10-25

  • Cuando "public_repo" sea "false", establece "target.location.name" en "PRIVATE", de lo contrario, configúralo en "PUBLIC".

2023-10-11

  • Se asignó "user_agent" a "network.http.user_agent" y "network.http.parsed_user_agent".
  • Se asignó "request_method" a "network.http.method".
  • Se asignó "application_name" a "target.application".
  • Se asignó "status_code" a "network.http.response_code".
  • Se asignó "url_path" a "target.url".
  • Se asignó "user_id" a "target.userid".
  • Se asignó "transport_protocol_name" a "network.application_protocol".
  • Se asignó "raw.now" a "metadata.event_timestamp".
  • Se asignó "raw.ip" a "principal.ip".
  • Se asignó "raw.request_id" a "metadata.product_log_id".
  • Se asignó "raw.repo" a "target.url".
  • Se asignó "raw.action" a "security_result.summary".
  • Se asignó "raw.protocol" a "network.application_protocol".
  • Se asignó "raw.message" a "metadata.description".
  • Se asignó "raw.at" a "security_result.action".
  • Se asignó "raw.login" a "target.user_display_name".
  • Se asignó "raw.user_id" a "target.userid".
  • Se asignaron "raw.failure_reason", "raw.failure_type", "raw.raw_login" y "raw.from" a "additional.fields".
  • Se asignaron "programmatic_access_type", "actor_id", "token_id", "token_scopes", "integration", "query_string", "rate_limit_remaining", "request_body", "route", "business", "org_id", "repo_id", "public_repo", "_document_id", "operation_type" y "repository_public" a "additional.fields".

2023-07-31

  • Corrección de errores:
  • Se agregó "on_error" a los patrones de Grok.
  • Se asignó "workflow_run.id" a "target.resource.attribute.labels".
  • Se asignó "workflow_run.event" a "additional.fields".
  • Se asignó "workflow_run.actor.login" a "principal.user.userid".
  • Se asignó "workflow_run.head_branch" a "security_result.about.labels".
  • Se asignó "workflow_run.head_sha" a "target.file.sha256".
  • Se asignó "enterprise.name" a "additional.fields".
  • Se asignó "workflow.name" a "security_result.about.labels".
  • Se asignó "workflow_run.workflow_id" a "security_result.about.labels".

2023-06-22

  • Se agregó compatibilidad con los formatos de registro de syslog "github_auth", "haproxy", "github_access", "github_unicorn", "github_production", "hookshot-go", "babeld", "github_gitauth", "babeld2hydro", "authzd", "gitrpcd", "agent", "git-daemon", "github_resqued", "sudo", "systemd" y "github_audit".

2023-06-09

  • Mejoras:
  • Se asignó "external_identity_nameid" a "target.user.email_addresses" si está en formato de correo electrónico.
  • Recupera el nombre de usuario de "external_identity_nameid" y asócialo a "target.user.userid".

2023-01-13

  • Mejoras:
  • Se asignó "actor_ip" a "principal.ip".
  • Se asignó "hashed_token" a "network.session_id".
  • Se asignó "external_identity_nameid" a "target.user.userid ".
  • Se asignó "external_identity_username" a "target.user.user_display_name".

2022-11-28

  • Mejora: Se asignó "config.url" a "target.url".

2022-07-07

  • Mejora: Se procesaron y analizaron los registros en formato JSON recién transferidos que tienen las acciones "git.clone","git.push" y "workflows.prepared_workflow_job".
  • "job_name" asignado a "target.resource.attribute.labels".
  • "job_workflow_ref" se asignó a "target.resource.attribute.labels".
  • "runner_group_id" asignado a "target.resource.attribute.labels".
  • "runner_group_name" asignado a "target.resource.attribute.labels".
  • "runner_name" asignado a "target.resource.attribute.labels".
  • "runner_id" se asignó a "target.resource.attribute.labels".
  • "workflow_run_id" se asignó a "target.resource.attribute.labels".
  • "actor_location.country_code" asignado a "principal.location.country_or_region"

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