Recopila registros de auditoría de Slack
En este documento, se explica cómo transferir Registros de auditoría de Slack a Google Security Operations con funciones de Google Cloud Run o Amazon S3 con AWS Lambda.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Plan de Enterprise Grid de Slack con acceso de propietario de la organización o administrador
- Acceso con privilegios a uno de los siguientes elementos:
- Google Cloud (para la opción 1: Cloud Run Functions y Cloud Scheduler)
- AWS (para la opción 2: S3, IAM, Lambda, EventBridge)
Recopila los requisitos previos de los registros de auditoría de Slack (ID de la app, token de OAuth y ID de la organización)
La API de Slack Audit Logs requiere un token de OAuth del usuario con el alcance auditlogs:read. Este token se debe obtener instalando una app a nivel de la organización de Enterprise Grid, no a nivel del espacio de trabajo.
Crea una app de Slack para los registros de auditoría
- Accede a la Consola del administrador de Slack con una cuenta de propietario de la organización de Enterprise Grid o de administrador.
- Ve a https://api.slack.com/apps y haz clic en Crear una app nueva > Desde cero.
- Proporciona los siguientes detalles de configuración:
- Nombre de la app: Ingresa un nombre descriptivo (por ejemplo,
Google SecOps Audit Integration). - Elige un espacio de trabajo para desarrollar tu app: Selecciona tu espacio de trabajo de Slack de desarrollo (cualquier espacio de trabajo de la organización).
- Nombre de la app: Ingresa un nombre descriptivo (por ejemplo,
- Haz clic en Crear app.
Configura los permisos de OAuth
- Navega a OAuth y permisos en la barra lateral izquierda.
- Ve a la sección Scopes.
- En User Token Scopes (NO en Bot Token Scopes), haz clic en Add an OAuth Scope.
- Agrega el alcance:
auditlogs:read.
Habilita la distribución pública
- Ve a Administrar distribución en la barra lateral izquierda.
- En Share Your App with Other Workspaces, asegúrate de que las cuatro secciones tengan marcas de verificación verdes:
- Cómo quitar la información codificada
- Activa la distribución pública
- Cómo establecer una URL de redireccionamiento
- Cómo agregar un permiso de OAuth
- Haz clic en Activar la distribución pública.
Instala la app en la organización de Enterprise Grid
- Navega a OAuth y permisos en la barra lateral izquierda.
- Haz clic en Install to Organization (NO en "Install to Workspace").
IMPORTANTE: Verifica el menú desplegable en la esquina superior derecha de la pantalla de instalación para confirmar que estás instalando en la organización de Enterprise, no en un espacio de trabajo individual.
- Revisa los permisos solicitados y haz clic en Permitir.
- Una vez que se complete la autorización, se te redireccionará de nuevo a la página OAuth y permisos.
Recupera credenciales
- En Tokens de OAuth para tu espacio de trabajo, busca el Token de OAuth del usuario.
Copia y guarda de forma segura el token que comienza con
xoxp-(por ejemplo,xoxp-1234567890-0987654321-1234567890-abc123def456).Anota tu ID de organización:
- Ve a la Consola del administrador de Slack.
- Navega a Configuración y permisos > Configuración de la organización.
- Copia el ID de la organización.
Opción 1: Configura la exportación de registros de auditoría de Slack con Cloud Run Functions de Google
Esta opción usa funciones de Google Cloud Run y Cloud Scheduler para recopilar registros de auditoría de Slack y transferirlos directamente a Google SecOps.
Cómo configurar el directorio
- Crea un directorio nuevo en tu máquina local para la implementación de la función de Cloud Run.
- Descarga los siguientes archivos del repositorio de GitHub de Chronicle ingestion-scripts:
- 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 tu directorio de implementación.
La estructura de tu directorio debería verse de la siguiente manera:
deployment_directory/ ├─common/ │ ├─__init__.py │ ├─auth.py │ ├─env_constants.py │ ├─ingest.py │ ├─status.py │ └─utils.py ├─.env.yml ├─main.py └─requirements.txt
Crea 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 para la cuenta de servicio de Chronicle:
- Nombre: Ingresa
chronicle-service-account. - Valor del secreto: Pega el contenido de tu archivo JSON de autenticación de la transferencia de Google SecOps.
- Nombre: Ingresa
- Haz clic en Crear secreto.
- Copia el nombre del recurso secreto en el formato
projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest. - Vuelve a hacer clic en Crear secreto para crear un segundo secreto.
- Proporciona los siguientes detalles de configuración para el token de Slack:
- Nombre: Ingresa
slack-admin-token. - Valor del secreto: Pega tu token de OAuth de usuario de Slack (comienza con
xoxp-).
- Nombre: Ingresa
- Haz clic en Crear secreto.
- Copia el nombre del recurso secreto en el formato
projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest.
Configura las variables de entorno 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"- Reemplaza lo siguiente:
<your-chronicle-customer-id>: Es tu ID de cliente de Google SecOps.<PROJECT_ID>: Es el ID del proyecto de Google Cloud .- CHRONICLE_REGION: Se debe configurar en 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-northeast2,southamerica-east1. - POLL_INTERVAL: Es el intervalo de frecuencia (en minutos) con el que se ejecuta la función. Esta duración debe ser la misma que el intervalo del trabajo de Cloud Scheduler.
- Reemplaza lo siguiente:
Guarda el archivo
.env.yml.
Implementa la Cloud Run Function
- Abre una terminal o Cloud Shell en la Google Cloud consola.
Navega al directorio de implementación:
cd /path/to/deployment_directoryEjecuta el siguiente comando para implementar 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>Reemplaza
<SERVICE_ACCOUNT_EMAIL>por la dirección de correo electrónico de la cuenta de servicio que deseas que use tu función de Cloud Run.
Espera a que se complete la implementación.
Una vez que se implemente, anota la URL de la función del resultado.
Configura Cloud Scheduler
- En la consola de Google Cloud, ve a Cloud Scheduler > Crear trabajo.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
slack-audit-scheduler. - Región: Selecciona la misma región en la que implementaste la Cloud Run Function.
- Frecuencia: Ingresa
*/5 * * * *(se ejecuta cada 5 minutos, lo que coincide con el valor dePOLL_INTERVAL). - Zona horaria: Selecciona UTC.
- Tipo de destino: Selecciona HTTP.
- URL: Ingresa la URL de la función de Cloud Run que se muestra en el resultado de la implementación.
- Método HTTP: Selecciona POST.
- Encabezado de autenticación: Selecciona Agregar token de OIDC.
- Cuenta de servicio: Selecciona la misma cuenta de servicio que se usó para la función de Cloud Run.
- Nombre: Ingresa
- Haz clic en Crear.
Opción 2: Configura la exportación de registros de auditoría de Slack con AWS S3
Esta opción usa AWS Lambda para recopilar registros de auditoría de Slack y almacenarlos en S3. Luego, configura un feed de SecOps de Google para transferir los registros.
Configura el bucket de AWS S3 y el IAM para Google SecOps
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket
- Guarda el Nombre y la Región del bucket para futuras referencias (por ejemplo,
slack-audit-logs). - Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como el Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega 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.
- Haz clic en Agregar permisos en la sección Políticas de permisos .
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura la política y el rol de IAM para las cargas de S3
- En la consola de AWS, ve a IAM > Policies > Create policy > pestaña JSON.
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" } ] }- Reemplaza
slack-audit-logssi ingresaste un nombre de bucket diferente.
- Reemplaza
Haz clic en Siguiente.
Ingresa 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 recién creada
SlackAuditS3Policy.Nombra el rol
SlackAuditToS3Roley haz clic en Crear rol.
Crea la función Lambda
- En la consola de AWS, ve a Lambda > Functions > Create function.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
Configuración 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.
Después de crear la función, abre la pestaña Code, borra el código auxiliar y, luego, ingresa 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 > Agregar variable de entorno.
Ingresa las siguientes variables de entorno y reemplaza 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 la organización conauditlogs:read)LIMIT200MAX_PAGES20LOOKBACK_SECONDS3600HTTP_TIMEOUT60HTTP_RETRIES3RETRY_AFTER_DEFAULT2ACTIONS(opcional, CSV) user_login,app_installedHaz clic en Guardar.
Selecciona 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.
Crea una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
slack-audit-1h. - Programación recurrente: Selecciona Programación basada en tarifas.
- Expresión de tarifa: Ingresa
1horas. - Ventana de tiempo flexible: Selecciona Desactivado.
- Nombre: Ingresa
- 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 la configuración opcional).
- Revisa la programación y haz clic en Crear programación.
Opcional: Crea un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Agregar usuarios.
- Haz clic en Agregar usuarios.
- Proporciona los siguientes detalles de configuración:
- Usuario: Ingresa
secops-reader. - Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
- Usuario: Ingresa
- Haz clic en Crear usuario.
- Adjunta una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Agregar permisos > Adjuntar políticas directamente > Crear política.
En el editor de JSON, ingresa 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.
Ingresa el nombre de la política
secops-reader-policy.Haz clic en Crear política.
Regresa 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.
Configura un feed en Google SecOps para transferir Registros de auditoría de Slack
- 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,
Slack Audit Logs). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Auditoría de Slack como el Tipo de registro.
- Haz clic en Siguiente.
- Especifica valores para los siguientes parámetros de entrada:
- URI de S3:
s3://slack-audit-logs/slack/audit/ - Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
- Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
- ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3 (de
secops-reader). - Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3 (de
secops-reader). - Espacio de nombres del recurso: Es el espacio de nombres del recurso.
- Etiquetas de transmisión: Es la etiqueta que se aplica a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz 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 en el registro sin procesar. |
actor.type |
principal.labels.value |
Se asigna directamente desde el campo actor.type, con la clave actor.type agregada. |
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 agregada. |
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 agregada. |
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 |
Es la información del usuario-agente analizada que se deriva del campo context.ua con 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 un array, se concatena con comas. |
details.type |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo details.type, con la clave details.type agregada. |
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 agregada. |
entity.file.filetype |
target.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.file.filetype, con la clave entity.file.filetype agregada. |
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 agregada. |
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 agregada. |
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 agregada. |
entity.huddle.id |
about.resource.attribute.labels.value |
Se asigna directamente desde el campo entity.huddle.id, con la clave entity.huddle.id agregada. |
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 agregada. |
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 agregada. |
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. Se determina según 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, según el valor de action. Está codificado como "SLACK_AUDIT". Se establece en "Enterprise Grid" si existe date_create; de lo contrario, se establece en "Registros de auditoría" si existe user_id. Se codificó de forma rígida como "Slack". Se codificó de forma rígida como "REMOTE". Se establece en "SSO" si action contiene "user_login" o "user_logout". De lo contrario, configúralo como "MACHINE". No se asigna en los ejemplos proporcionados. El valor predeterminado es "ALLOW", pero se establece en "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? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.