Recopila registros de auditoría de GitHub
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
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de GitHub).
- Selecciona Webhook como el Tipo de origen.
- Selecciona GitHub como el Tipo de registro.
- Haz clic en Siguiente.
- 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.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
- 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.
- 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.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
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.
- Navega a tu repositorio de GitHub.
- Ve a Configuración.
- Haz clic en Webhooks.
- Haz clic en Add webhook (Agregar webhook).
- En el campo URL de la carga útil, ingresa la URL del extremo de la API de Google SecOps.
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.
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
.Asegúrate de que esté seleccionada la casilla de verificación Activo.
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.