Recoger registros de auditoría de Slack
En este documento se explica cómo ingerir registros de auditoría de Slack en Google Security Operations mediante funciones de Google Cloud Run o Amazon S3 con AWS Lambda.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Plan Slack Enterprise Grid con acceso de propietario de la organización o administrador
- Acceso privilegiado a una de las siguientes opciones:
- Google Cloud (para la opción 1: Cloud Run functions y Cloud Scheduler)
- AWS (para la opción 2: S3, IAM, Lambda y EventBridge)
Requisitos previos para recoger registros de auditoría de Slack (ID de aplicación, token de OAuth e ID de organización)
La API de registros de auditoría de Slack requiere un token de OAuth de usuario con el ámbito auditlogs:read. Este token se debe obtener instalando una aplicación en el nivel de organización de Enterprise Grid, no en el nivel del espacio de trabajo.
Crear una aplicación de Slack para los registros de auditoría
- Inicia sesión en la consola de administración de Slack con una cuenta de propietario de organización de Enterprise Grid o de administrador.
- Ve a https://api.slack.com/apps y haz clic en Crear aplicación > Desde cero.
- Proporcione los siguientes detalles de configuración:
- Nombre de la aplicación: introduce un nombre descriptivo (por ejemplo,
Google SecOps Audit Integration). - Elige un espacio de trabajo para desarrollar tu aplicación: selecciona tu espacio de trabajo de desarrollo de Slack (cualquier espacio de trabajo de la organización).
- Nombre de la aplicación: introduce un nombre descriptivo (por ejemplo,
- Haz clic en Create App (Crear aplicación).
Configurar los permisos de OAuth
- En la barra lateral de la izquierda, ve a OAuth y permisos.
- Ve a la sección Scopes (Ámbitos).
- En Permisos de token de usuario (NO en Permisos de token de bot), haz clic en Añadir permiso de OAuth.
- Añade el ámbito:
auditlogs:read.
Habilitar la distribución pública
- En la barra lateral de la izquierda, vaya a Gestionar distribución.
- En Comparte tu aplicación con otros espacios de trabajo, comprueba que las cuatro secciones tengan marcas de verificación verdes:
- Eliminar información codificada
- Activar la distribución pública
- Definir una URL de redirección
- Añadir un permiso de OAuth
- Haz clic en Activar distribución pública.
Instalar una aplicación en una organización de Enterprise Grid
- En la barra lateral de la izquierda, ve a OAuth y permisos.
- Haz clic en Instalar en la organización (NO en "Instalar en Workspace").
IMPORTANTE: Comprueba el menú desplegable de la parte superior derecha de la pantalla de instalación para verificar que estás instalando el complemento en la organización Enterprise y no en un espacio de trabajo individual.
- Revisa los permisos solicitados y haz clic en Permitir.
- Una vez completada la autorización, se te redirigirá a la página OAuth y permisos.
Recuperar credenciales
- En Tokens de OAuth de tu espacio de trabajo, busca el token de OAuth de usuario.
Copia y guarda de forma segura el token que empieza por
xoxp-(por ejemplo,xoxp-1234567890-0987654321-1234567890-abc123def456).Anota el ID de organización:
- Ve a la consola de administración de Slack.
- Ve a Configuración y permisos > Configuración de la organización.
- Copia el ID de organización.
Opción 1: Configurar la exportación de registros de auditoría de Slack mediante funciones de Google Cloud Run
Esta opción usa funciones de Google Cloud Run y Cloud Scheduler para recoger registros de auditoría de Slack e insertarlos directamente en Google SecOps.
Configurar el directorio
- Crea un directorio en tu máquina local para la implementación de la función de Cloud Run.
- Descarga los siguientes archivos del repositorio de GitHub ingestion-scripts de Chronicle:
- En la carpeta slack, descarga lo siguiente:
.env.ymlmain.pyrequirements.txt
- Desde la raíz del repositorio, descarga todo el directorio common con todos sus archivos:
common/__init__.pycommon/auth.pycommon/env_constants.pycommon/ingest.pycommon/status.pycommon/utils.py
- En la carpeta slack, descarga lo siguiente:
- Coloca todos los archivos descargados en el directorio de implementación.
La estructura de tu directorio debería ser similar a esta:
deployment_directory/ ├─common/ │ ├─__init__.py │ ├─auth.py │ ├─env_constants.py │ ├─ingest.py │ ├─status.py │ └─utils.py ├─.env.yml ├─main.py └─requirements.txt
Crear secretos en Google Secret Manager
- En la consola de Google Cloud, ve a Seguridad > Secret Manager.
- Haz clic en Crear secreto.
- Proporciona los siguientes detalles de configuración de la cuenta de servicio de Chronicle:
- Nombre: escribe
chronicle-service-account. - Valor secreto: pega el contenido de tu archivo JSON de autenticación de ingestión de Google SecOps.
- Nombre: escribe
- Haz clic en Crear secreto.
- Copia el nombre de recurso del secreto con el formato
projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest. - Haz clic en Crear secreto de nuevo para crear un segundo secreto.
- Proporcione los siguientes detalles de configuración del token de Slack:
- Nombre: escribe
slack-admin-token. - Valor de secreto: pega tu token de OAuth de usuario de Slack (empieza por
xoxp-).
- Nombre: escribe
- Haz clic en Crear secreto.
- Copia el nombre de recurso del secreto con el formato
projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest.
Definir las variables de entorno de tiempo de ejecución necesarias
- Abre el archivo
.env.ymlen el directorio de implementación. Configura las variables de entorno con tus valores:
CHRONICLE_CUSTOMER_ID: "<your-chronicle-customer-id>" CHRONICLE_REGION: us CHRONICLE_SERVICE_ACCOUNT: "projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest" CHRONICLE_NAMESPACE: "" POLL_INTERVAL: "5" SLACK_ADMIN_TOKEN: "projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest"- Sustituye lo siguiente:
<your-chronicle-customer-id>: tu ID de cliente de Google SecOps.<PROJECT_ID>: tu ID de proyecto Google Cloud .- CHRONICLE_REGION asigna tu región de Google SecOps. Valores válidos:
us,asia-northeast1,asia-south1,asia-southeast1,australia-southeast1,europe,europe-west2,europe-west3,europe-west6,europe-west9,europe-west12,me-central1,me-central2,me-west1,northamerica-northeast2ysouthamerica-east1. - POLL_INTERVAL intervalo de frecuencia (en minutos) con el que se ejecuta la función. Esta duración debe ser la misma que el intervalo de la tarea de Cloud Scheduler.
- Sustituye lo siguiente:
Guarda el archivo
.env.yml.
Desplegar la función de Cloud Run
- Abre un terminal o Cloud Shell en la Google Cloud consola.
Ve al directorio de implementación:
cd /path/to/deployment_directoryEjecuta el siguiente comando para desplegar la función de Cloud Run:
gcloud functions deploy slack-audit-to-chronicle \ --entry-point main \ --trigger-http \ --runtime python39 \ --env-vars-file .env.yml \ --timeout 300s \ --memory 512MB \ --service-account <SERVICE_ACCOUNT_EMAIL>Sustituye
<SERVICE_ACCOUNT_EMAIL>por la dirección de correo de la cuenta de servicio que quieras que use tu función de Cloud Run.
Espera a que se complete la implementación.
Una vez desplegada, anota la URL de la función del resultado.
Configurar Cloud Scheduler
- En la consola de Google Cloud, ve a Cloud Scheduler > Crear trabajo.
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
slack-audit-scheduler. - Región: selecciona la misma región en la que has implementado la función de Cloud Run.
- Frecuencia: introduce
*/5 * * * *(se ejecuta cada 5 minutos, lo que coincide con el valor dePOLL_INTERVAL). - Zona horaria: selecciona UTC.
- Tipo de destino: selecciona HTTP.
- URL: introduce la URL de la función de Cloud Run del resultado de la implementación.
- Método HTTP: selecciona POST.
- Encabezado de autorización: selecciona Añadir token de OIDC.
- Cuenta de servicio: selecciona la misma cuenta de servicio que se ha usado para la función de Cloud Run.
- Nombre: escribe
- Haz clic en Crear.
Opción 2: Configurar la exportación de registros de auditoría de Slack mediante AWS S3
Esta opción usa AWS Lambda para recoger los registros de auditoría de Slack y almacenarlos en S3. Después, configura un feed de SecOps de Google para ingerir los registros.
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
slack-audit-logs). - Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros como Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos .
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
- En la consola de AWS, ve a IAM > Policies > Create policy > JSON tab.
Copia y pega la siguiente política.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::slack-audit-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::slack-audit-logs/slack/audit/state.json" } ] }- Sustituye
slack-audit-logssi has introducido otro nombre de segmento.
- Sustituye
Haz clic en Siguiente.
Introduce el nombre de la política
SlackAuditS3Policy.Haz clic en Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunta la política que acabas de crear
SlackAuditS3Policy.Dale el nombre
SlackAuditToS3Roleal rol y haz clic en Crear rol.
Crear la función Lambda
- En la consola de AWS, ve a Lambda > Funciones > Crear función.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
Ajuste Valor Nombre slack_audit_to_s3Tiempo de ejecución Python 3.13 Arquitectura x86_64 Rol de ejecución SlackAuditToS3RoleHaz clic en Crear función.
Una vez creada la función, abra la pestaña Código, elimine el stub e introduzca el siguiente código (
slack_audit_to_s3.py):#!/usr/bin/env python3 # Lambda: Pull Slack Audit Logs (Enterprise Grid) to S3 (no transform) import os, json, time, urllib.parse from urllib.request import Request, urlopen from urllib.error import HTTPError, URLError import boto3 BASE_URL = "https://api.slack.com/audit/v1/logs" TOKEN = os.environ["SLACK_AUDIT_TOKEN"] # org-level user token with auditlogs:read BUCKET = os.environ["S3_BUCKET"] PREFIX = os.environ.get("S3_PREFIX", "slack/audit/") STATE_KEY = os.environ.get("STATE_KEY", "slack/audit/state.json") LIMIT = int(os.environ.get("LIMIT", "200")) # Slack recommends <= 200 MAX_PAGES = int(os.environ.get("MAX_PAGES", "20")) LOOKBACK_SEC = int(os.environ.get("LOOKBACK_SECONDS", "3600")) # First-run window HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60")) HTTP_RETRIES = int(os.environ.get("HTTP_RETRIES", "3")) RETRY_AFTER_DEFAULT = int(os.environ.get("RETRY_AFTER_DEFAULT", "2")) # Optional server-side filters (comma-separated "action" values), empty means no filter ACTIONS = os.environ.get("ACTIONS", "").strip() s3 = boto3.client("s3") def _get_state() -> dict: try: obj = s3.get_object(Bucket=BUCKET, Key=STATE_KEY) st = json.loads(obj["Body"].read() or b"{}") return {"cursor": st.get("cursor")} except Exception: return {"cursor": None} def _put_state(state: dict) -> None: body = json.dumps(state, separators=(",", ":")).encode("utf-8") s3.put_object(Bucket=BUCKET, Key=STATE_KEY, Body=body, ContentType="application/json") def _http_get(params: dict) -> dict: qs = urllib.parse.urlencode(params, doseq=True) url = f"{BASE_URL}?{qs}" if qs else BASE_URL req = Request(url, method="GET") req.add_header("Authorization", f"Bearer {TOKEN}") req.add_header("Accept", "application/json") attempt = 0 while True: try: with urlopen(req, timeout=HTTP_TIMEOUT) as r: return json.loads(r.read().decode("utf-8")) except HTTPError as e: # Respect Retry-After on 429/5xx if e.code in (429, 500, 502, 503, 504) and attempt < HTTP_RETRIES: retry_after = 0 try: retry_after = int(e.headers.get("Retry-After", RETRY_AFTER_DEFAULT)) except Exception: retry_after = RETRY_AFTER_DEFAULT time.sleep(max(1, retry_after)) attempt += 1 continue # Re-raise other HTTP errors raise except URLError: if attempt < HTTP_RETRIES: time.sleep(RETRY_AFTER_DEFAULT) attempt += 1 continue raise def _write_page(payload: dict, page_idx: int) -> str: ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime()) key = f"{PREFIX}{ts}-slack-audit-p{page_idx:05d}.json" body = json.dumps(payload, separators=(",", ":")).encode("utf-8") s3.put_object(Bucket=BUCKET, Key=key, Body=body, ContentType="application/json") return key def lambda_handler(event=None, context=None): state = _get_state() cursor = state.get("cursor") params = {"limit": LIMIT} if ACTIONS: params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()] if cursor: params["cursor"] = cursor else: # First run (or reset): fetch a recent window by time params["oldest"] = int(time.time()) - LOOKBACK_SEC pages = 0 total = 0 last_cursor = None while pages < MAX_PAGES: data = _http_get(params) _write_page(data, pages) entries = data.get("entries") or [] total += len(entries) # Cursor for next page meta = data.get("response_metadata") or {} next_cursor = meta.get("next_cursor") or data.get("next_cursor") if next_cursor: params = {"limit": LIMIT, "cursor": next_cursor} if ACTIONS: params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()] last_cursor = next_cursor pages += 1 continue break if last_cursor: _put_state({"cursor": last_cursor}) return {"ok": True, "pages": pages + (1 if total or last_cursor else 0), "entries": total, "cursor": last_cursor} if __name__ == "__main__": print(lambda_handler())Ve a Configuración > Variables de entorno > Editar > Añadir variable de entorno.
Introduce las siguientes variables de entorno y sustituye los valores por los tuyos.
Clave Valor de ejemplo S3_BUCKETslack-audit-logsS3_PREFIXslack/audit/STATE_KEYslack/audit/state.jsonSLACK_AUDIT_TOKENxoxp-***(token de usuario a nivel de organización conauditlogs:read)LIMIT200MAX_PAGES20LOOKBACK_SECONDS3600HTTP_TIMEOUT60HTTP_RETRIES3RETRY_AFTER_DEFAULT2ACTIONS(opcional, CSV) user_login,app_installedHaz clic en Guardar.
Seleccione la pestaña Configuración.
En el panel Configuración general, haz clic en Editar.
Cambia Tiempo de espera a 5 minutos (300 segundos) y haz clic en Guardar.
Crear una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Programador > Crear programación).
- Proporcione los siguientes detalles de configuración:
- Nombre: escribe
slack-audit-1h. - Programación periódica: selecciona Programación basada en tarifas.
- Expresión de tarifa: introduce
1horas. - Ventana de tiempo flexible: selecciona Desactivado.
- Nombre: escribe
- Haz clic en Siguiente.
- Selecciona Objetivo:
- API de destino: selecciona AWS Lambda Invoke.
- Función LAMBDA: selecciona
slack_audit_to_s3.
- Haz clic en Siguiente.
- Haz clic en Siguiente (omite los ajustes opcionales).
- Revísala y haz clic en Crear programación.
Opcional: Crear un usuario y claves de gestión de identidades y accesos de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Añadir usuarios.
- Haz clic en Add users (Añadir usuarios).
- Proporcione los siguientes detalles de configuración:
- Usuario: introduce
secops-reader. - Tipo de acceso: selecciona Clave de acceso – Acceso programático.
- Usuario: introduce
- Haz clic en Crear usuario.
- Asigna una política de lectura mínima (personalizada): Usuarios > lector-secops > Permisos > Añadir permisos > Asignar políticas directamente > Crear política.
En el editor de JSON, introduce la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::slack-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::slack-audit-logs" } ] }Haz clic en Siguiente.
Introduce el nombre de la política
secops-reader-policy.Haz clic en Crear política.
Vuelve a la página de creación de usuarios, actualiza la lista de políticas y selecciona
secops-reader-policy.Haz clic en Siguiente.
Haz clic en Crear usuario.
Selecciona el usuario creado
secops-reader.Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Selecciona Servicio de terceros.
Haz clic en Siguiente.
Haz clic en Crear clave de acceso.
Haz clic en Descargar archivo .csv para guardar las credenciales.
Configurar un feed en Google SecOps para ingerir registros de auditoría de Slack
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir nuevo.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
Slack Audit Logs). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Selecciona Auditoría de Slack como Tipo de registro.
- Haz clic en Siguiente.
- Especifique valores para los siguientes parámetros de entrada:
- URI de S3:
s3://slack-audit-logs/slack/audit/ - Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.
- ID de clave de acceso: clave de acceso de usuario con acceso al segmento de S3 (de
secops-reader). - Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3 (del paso
secops-reader). - Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la nueva configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
action |
metadata.product_event_type |
Se asigna directamente desde el campo action del registro sin procesar. |
actor.type |
principal.labels.value |
Se asigna directamente desde el campo actor.type, con la clave actor.type añadida. |
actor.user.email |
principal.user.email_addresses |
Se asigna directamente desde el campo actor.user.email. |
actor.user.id |
principal.user.product_object_id |
Se asigna directamente desde el campo actor.user.id. |
actor.user.id |
principal.user.userid |
Se asigna directamente desde el campo actor.user.id. |
actor.user.name |
principal.user.user_display_name |
Se asigna directamente desde el campo actor.user.name. |
actor.user.team |
principal.user.group_identifiers |
Se asigna directamente desde el campo actor.user.team. |
context.ip_address |
principal.ip |
Se asigna directamente desde el campo context.ip_address. |
context.location.domain |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo context.location.domain, con la clave context.location.domain añadida. |
context.location.id |
about.resource.id |
Se asigna directamente desde el campo context.location.id. |
context.location.name |
about.resource.name |
Se asigna directamente desde el campo context.location.name. |
context.location.name |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo context.location.name, con la clave context.location.name añadida. |
context.location.type |
about.resource.resource_subtype |
Se asigna directamente desde el campo context.location.type. |
context.session_id |
network.session_id |
Se asigna directamente desde el campo context.session_id. |
context.ua |
network.http.user_agent |
Se asigna directamente desde el campo context.ua. |
context.ua |
network.http.parsed_user_agent |
Información analizada del user-agent derivada del campo context.ua mediante el filtro parseduseragent. |
country |
principal.location.country_or_region |
Se asigna directamente desde el campo country. |
date_create |
metadata.event_timestamp.seconds |
La marca de tiempo de época del campo date_create se convierte en un objeto de marca de tiempo. |
details.inviter.email |
target.user.email_addresses |
Se asigna directamente desde el campo details.inviter.email. |
details.inviter.id |
target.user.product_object_id |
Se asigna directamente desde el campo details.inviter.id. |
details.inviter.name |
target.user.user_display_name |
Se asigna directamente desde el campo details.inviter.name. |
details.inviter.team |
target.user.group_identifiers |
Se asigna directamente desde el campo details.inviter.team. |
details.reason |
security_result.description |
Se asigna directamente desde el campo details.reason o, si es una matriz, se concatena con comas. |
details.type |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo details.type, con la clave details.type añadida. |
details.type |
security_result.summary |
Se asigna directamente desde el campo details.type. |
entity.app.id |
target.resource.id |
Se asigna directamente desde el campo entity.app.id. |
entity.app.name |
target.resource.name |
Se asigna directamente desde el campo entity.app.name. |
entity.channel.id |
target.resource.id |
Se asigna directamente desde el campo entity.channel.id. |
entity.channel.name |
target.resource.name |
Se asigna directamente desde el campo entity.channel.name. |
entity.channel.privacy |
target.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.channel.privacy, con la clave entity.channel.privacy añadida. |
entity.file.filetype |
target.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.file.filetype, con la clave entity.file.filetype añadida. |
entity.file.id |
target.resource.id |
Se asigna directamente desde el campo entity.file.id. |
entity.file.name |
target.resource.name |
Se asigna directamente desde el campo entity.file.name. |
entity.file.title |
target.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.file.title, con la clave entity.file.title añadida. |
entity.huddle.date_end |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.date_end, con la clave entity.huddle.date_end añadida. |
entity.huddle.date_start |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.date_start, con la clave entity.huddle.date_start añadida. |
entity.huddle.id |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.id, con la clave entity.huddle.id añadida. |
entity.huddle.participants.0 |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.participants.0, con la clave entity.huddle.participants.0 añadida. |
entity.huddle.participants.1 |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.participants.1, con la clave entity.huddle.participants.1 añadida. |
entity.type |
target.resource.resource_subtype |
Se asigna directamente desde el campo entity.type. |
entity.user.email |
target.user.email_addresses |
Se asigna directamente desde el campo entity.user.email. |
entity.user.id |
target.user.product_object_id |
Se asigna directamente desde el campo entity.user.id. |
entity.user.name |
target.user.user_display_name |
Se asigna directamente desde el campo entity.user.name. |
entity.user.team |
target.user.group_identifiers |
Se asigna directamente desde el campo entity.user.team. |
entity.workflow.id |
target.resource.id |
Se asigna directamente desde el campo entity.workflow.id. |
entity.workflow.name |
target.resource.name |
Se asigna directamente desde el campo entity.workflow.name. |
id |
metadata.product_log_id |
Se asigna directamente desde el campo id. |
ip |
principal.ip |
Se asigna directamente desde el campo ip. Determinado por la lógica basada en el campo action. El valor predeterminado es USER_COMMUNICATION, pero cambia a otros valores, como USER_CREATION, USER_LOGIN, USER_LOGOUT, USER_RESOURCE_ACCESS, USER_RESOURCE_UPDATE_PERMISSIONS o USER_CHANGE_PERMISSIONS, en función del valor de action. Codificado como "SLACK_AUDIT". Se asigna el valor "Enterprise Grid" si existe date_create. De lo contrario, se asigna el valor "Registros de auditoría" si existe user_id. Codificado como "Slack". Codificado como "REMOTE". Asigna el valor "SSO" si action contiene "user_login" o "user_logout". De lo contrario, asigna el valor "MACHINE". No se ha asignado en los ejemplos proporcionados. El valor predeterminado es "ALLOW", pero se define como "BLOCK" si action es "user_login_failed". Se establece en "Slack" si existe date_create. De lo contrario, se establece en "SLACK" si existe user_id. |
user_agent |
network.http.user_agent |
Se asigna directamente desde el campo user_agent. |
user_id |
principal.user.product_object_id |
Se asigna directamente desde el campo user_id. |
username |
principal.user.product_object_id |
Se asigna directamente desde el campo username. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.