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 numerosos campos, realiza varias operaciones de grok y de clave-valor según el campo process_type para extraer información pertinente, asigna los campos extraídos al UDM y estructura el resultado para la transferencia de datos de Google SecOps. 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 cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso privilegiado a los repositorios de GitHub
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds en Configuración del SIEM > Feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración del SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- 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
.
- 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 Generar clave secreta 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 regenerar 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.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
- Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Haz clic en Generar clave secreta 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 regenerar 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.
Crea una clave de API para el feed del webhook
Ve a Google Cloud consola > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso a 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.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con 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 búsqueda 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 SecOps de Google.
- 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 carga útil, ingresa la URL del extremo de API de Google SecOps.
Selecciona application/json como el Tipo de contenido.
Opcional: Para mejorar la seguridad, establece un secreto. Esto genera una firma para las cargas útiles de webhook, lo que te permite verificar su autenticidad del lado de Google SecOps. Si usas un secreto, configúralo también en tu feed de Google SecOps.
Elige los eventos que activan el webhook. Para un registro integral, selecciona Permitirme seleccionar eventos individuales y marca los eventos pertinentes (por ejemplo, Push, Pull Request, Issue). Si no lo sabes, 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 del 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 el 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 del encabezado 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 gancho 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, se extrae la parte del nombre de usuario y se asigna a target.user.userid , y se agrega el correo electrónico completo 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 de 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 permisos del token 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 la 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 del encabezado 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 del flujo de trabajo de la 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 tipo de evento lo determina el analizador en función de 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 como "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. En el caso de 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 , se convierte a mayúsculas y se verifica si contiene "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 signo. |
(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 deriva 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 principal 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 deriva 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 del usuario 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 del grupo 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 deriva 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 objetivo 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 ubicación principal se deriva 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 del 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 del 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 del registro del producto se deriva 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 del resultado 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 signo. |
(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 de 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 , y se convierte 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. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.