Recopila registros de auditoría de Slack
En esta guía, se explica cómo transferir registros de auditoría de Slack a Google Security Operations con Google Cloud Run Functions o Amazon S3 con AWS Lambda.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Plan Slack Enterprise Grid con acceso de propietario de la organización o administrador
- Acceso con privilegios a cualquiera de los siguientes:
- Google Cloud (para la opción 1: Cloud Run Functions y Cloud Scheduler)
- AWS (para la opción 2: S3, IAM, Lambda, EventBridge).
Requisitos previos para recopilar registros de auditoría de Slack (ID de la app, token de OAuth, ID de la organización)
La API de registros de auditoría de Slack requiere un token de OAuth de usuario con el permiso auditlogs:read. Para obtener este token, debes instalar una app en el nivel de la organización de Enterprise Grid, no en el 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 administrador.
- Ve a https://api.slack.com/apps y haz clic en Create New App > From scratch.
- Proporciona los siguientes detalles de configuración:
- Nombre de la aplicación: Ingresa un nombre descriptivo (por ejemplo,
Google SecOps Audit Integration). - Pick a workspace to develop your app in: Selecciona tu Development Slack Workspace (cualquier espacio de trabajo de la organización).
- Nombre de la aplicación: Ingresa un nombre descriptivo (por ejemplo,
- Haz clic en Create App.
Configura los permisos de OAuth
- Navega a OAuth & Permissions en la barra lateral izquierda.
- Desplázate hacia abajo hasta la sección Scopes.
- En User Token Scopes (NO en Bot Token Scopes), haz clic en Add an OAuth Scope.
- Agrega el permiso:
auditlogs:read.
Habilita la distribución pública
- Navega a Manage Distribution 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:
- Remove Hard Coded Information
- Activate Public Distribution
- Set a Redirect URL
- Add an OAuth Scope
- Haz clic en Activate Public Distribution.
Instala la app en la organización de Enterprise Grid
- Navega a OAuth & Permissions en la barra lateral izquierda.
- Haz clic en Install to Organization (NO en "Install to Workspace").
IMPORTANTE: Revisa el menú desplegable en la parte superior derecha de la pantalla de instalación para verificar que la instalación se realice en la organización de Enterprise, no en un espacio de trabajo individual.
- Revisa los permisos solicitados y haz clic en Allow.
- Una vez que se complete la autorización, se te redireccionará a la página OAuth & Permissions.
Recupera las credenciales
- En OAuth Tokens for Your Workspace, busca el token de OAuth de usuario.
- Copia y guarda de forma segura el token que comienza con
xoxp-(por ejemplo,xoxp-1234567890-0987654321-1234567890-abc123def456).
Importante: Este es tu SLACK_ADMIN_TOKEN para la función de Lambda o la función de Cloud Run. Almacénalo de forma segura.
- Anota tu ID de la organización:
- Ve a la Consola del administrador de Slack.
- Navega a Settings & Permissions > Organization settings.
- Copia el ID de la organización.
Opción 1: Configura la exportación de registros de auditoría de Slack con Google Cloud Run Functions
En esta opción, se usan Google Cloud Run Functions y Cloud Scheduler para recopilar registros de auditoría de Slack y transferirlos directamente a Google SecOps.
Configura 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 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. - Haz clic en Crear secreto nuevamente 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 (que 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 obligatorias
- Abre el archivo
.env.ymlen tu 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: Configura 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) en el que se ejecuta la función. Esta duración debe ser la misma que el intervalo del trabajo de Cloud Scheduler.
- Guarda el archivo
.env.yml.
Implementa la función de Cloud Run
- Abre una terminal o Cloud Shell en la Google Cloud Console.
- Navega hasta el directorio de implementación:
cd /path/to/deployment_directory
- Ejecuta 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 implementada, anota la URL de la función en el 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 función de Cloud Run.
- 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 del resultado de la implementación.
- Método HTTP: Selecciona POST.
- Encabezado de la 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
En esta opción, se usa AWS Lambda para recopilar registros de auditoría de Slack y almacenarlos en S3. Luego, se configura un feed de Google SecOps para transferir los registros.
Configura el bucket de AWS S3 y 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 consultarlos en el futuro (por ejemplo,
slack-audit-logs). - Crea un usuario siguiendo esta guía del usuario: Crea un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Security credentials.
- Haz clic en Create Access Key en la sección Access Keys.
- Selecciona Third-party service como Use case.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Create access key.
- Haz clic en Descargar archivo .csv para guardar la clave de acceso y la clave de acceso secreta para consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permissions.
- Haz clic en Add permissions en la sección Permissions policies.
- Selecciona Add permissions.
- Selecciona Attach policies directly.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- 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 > JSON tab.
- Copia y pega la siguiente política.
- JSON de la política (reemplaza
slack-audit-logssi ingresaste un nombre de bucket diferente):
{
"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"
}
]
}
- Haz clic en Siguiente.
- Ingresa el nombre de la política
SlackAuditS3Policy. - Haz clic en Crear política.
- Ve a IAM > Roles > Create role > AWS service > Lambda.
- Adjunta la política recién creada
SlackAuditS3Policy. - Nombra el rol
SlackAuditToS3Roley haz clic en Create role.
Crea la función de Lambda
- En la consola de AWS, ve a Lambda > Functions > Create function.
- Haz clic en Author from scratch.
- Proporciona los siguientes detalles de configuración:
| Configuración | Valor |
|---|---|
| Nombre | slack_audit_to_s3 |
| Tiempo de ejecución | Python 3.13 |
| Arquitectura | x86_64 |
| Rol de ejecución | SlackAuditToS3Role |
- Haz clic en Crear función.
- Después de crear la función, abre la pestaña Code, borra el código auxiliar y pega el siguiente código (
slack_audit_to_s3.py).
#!/usr/bin/env python3
# Lambda: Pull Slack Audit Logs (Enterprise Grid) to S3 (JSONL format)
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(data: dict, page_idx: int) -> str:
"""
Extract entries from Slack API response and write as JSONL (one event per line).
Chronicle requires newline-delimited JSON, not a JSON array.
"""
entries = data.get("entries") or []
if not entries:
# No entries to write, skip file creation
return None
# Convert each entry to a single-line JSON string
lines = [json.dumps(entry, separators=(",", ":")) for entry in entries]
# Join with newlines to create JSONL format
body = "\n".join(lines).encode("utf-8")
# Write to S3
ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
key = f"{PREFIX}{ts}-slack-audit-p{page_idx:05d}.json"
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 entries in JSONL format
written_key = _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 Configuration > Environment variables > Edit > Add environment variable.
- Ingresa las variables de entorno que se proporcionan a continuación y reemplaza por tus valores.
Variables de entorno
| Clave | Valor de ejemplo |
|---|---|
S3_BUCKET |
slack-audit-logs |
S3_PREFIX |
slack/audit/ |
STATE_KEY |
slack/audit/state.json |
SLACK_AUDIT_TOKEN |
xoxp-*** (token de usuario a nivel de la organización con auditlogs:read) |
LIMIT |
200 |
MAX_PAGES |
20 |
LOOKBACK_SECONDS |
3600 |
HTTP_TIMEOUT |
60 |
HTTP_RETRIES |
3 |
RETRY_AFTER_DEFAULT |
2 |
ACTIONS |
(opcional, CSV) user_login,app_installed |
- Haz clic en Guardar.
- Selecciona la pestaña Configuration.
- En el panel General configuration , haz clic en Edit.
- Cambia Timeout a 5 minutes (300 seconds) y haz clic en Save.
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. - Recurring schedule: Selecciona Rate-based schedule.
- Rate expression: Ingresa
1horas. - Flexible time window: Selecciona Off.
- Nombre: Ingresa
- Haz clic en Siguiente.
- Selecciona Target:
- Target API: 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 y haz clic en Create schedule.
(Opcional) Crea un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a AWS Console > IAM > Users > Create user.
- Proporciona los siguientes detalles de configuración:
- Nombre de usuario: Ingresa
secops-reader. - Tipo de acceso: Selecciona Acceso programático.
- Nombre de usuario: Ingresa
- Haz clic en Siguiente.
- Selecciona Attach policies directly.
- Haz clic en Crear política.
- En la pestaña JSON, pega lo siguiente:
{
"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.
- 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 Security credentials > Access keys > Create access key.
- Selecciona Third-party service.
- Haz clic en Siguiente.
- Haz clic en Create access key.
- 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 Feed name, ingresa un nombre para el feed (por ejemplo,
Slack Audit Logs). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Slack Audit como 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 eliminación de origen: Selecciona la opción de eliminación según tu preferencia.
- Maximum File Age: Incluye los archivos modificados en la última cantidad de días. El valor predeterminado es de 180 días.
- Access Key ID: Clave de acceso de usuario con acceso al bucket de S3 (de
secops-reader). - Secret Access Key: Clave secreta de usuario con acceso al bucket de S3 (de
secops-reader). - Espacio de nombres del recurso: Es el espacio de nombres del recurso.
- Etiquetas de ingesta: Es la etiqueta que se aplica a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revisa la configuración de tu nuevo feed en la pantalla Finalize 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 |
Información del usuario-agente analizada derivada 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 la é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 mediante 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. Codificado como "SLACK_AUDIT". Se establece en "Enterprise Grid" si date_create existe; de lo contrario, se establece en "Audit Logs" si user_id existe. Codificado como "Slack". Codificado como "REMOTE". Se establece en "SSO" si action contiene "user_login" o "user_logout". De lo contrario, se establece en "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 date_create existe; de lo contrario, se establece en "SLACK" si user_id existe. |
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.