Lookup Tables
RolAdministrador | AnalistaLectura12 min
Pantalla
Lookup Tables
/management/lookup-tablesConjuntos de datos de referencia reutilizables (IPs bloqueadas, cuentas de confianza, usuarios VIP, etc.) que vivís en Affinity y referenciás en consultas SQL y reglas de detección con placeholders `{{nombre_tabla}}`.
Para qué sirve
Crear, importar y mantener listas de referencia en Management → Lookup Tables, y usarlas en Logs y Detection Rules con el botón Lists.
Antes de empezar
- Permisos de administrador sobre
/management/lookup-tables. - Para importar CSV: la primera fila son los encabezados de columna.
- Creá las tablas antes de referenciarlas en SQL o reglas — si la tabla no existe o está vacía, la query falla.
Resultado esperado
- La tabla aparece en la lista lateral con su contador de filas y columnas.
- Podés insertarla en Logs o Detection Rules con Lists y referencias
{{nombre}}. - Al ejecutar la query, los placeholders se resuelven con los datos actuales de la tabla.
Consejos
- Para listas grandes (IPs, hashes, dominios) usá Quick List o CSV en vez de cargar fila por fila.
- En reglas de detección, preferí Reference sobre Value list — así actualizás la lista sin editar cada regla.
- Elegí bien el tipo de columna: las comparaciones numéricas o de fecha dependen de eso.
Acceder al panel
- MANAGEMENT → LOOKUP TABLES (ruta
/management/lookup-tables). - Subtítulo de la pantalla: Reusable reference sets for SQL queries and detection rules.
La pantalla — tres zonas
- Izquierda — Tables: lista de tablas con buscador Filter tables… y botón + para crear. Cada fila muestra nombre y
{filas} rows · {cols} cols. - Centro — detalle: al seleccionar una tabla ves su nombre (editable inline), contadores, tags, grilla de datos y acciones Export, Add Row y eliminar tabla.
- Derecha — Create Table (panel deslizable): se abre con + y tiene tres pestañas: Manual, Quick List y CSV.
Crear · Manual
- Table Name — nombre único (p. ej.
blocked_ips); se usa en{{placeholders}}. Si ya existe, Affinity agrega un sufijo de fecha automáticamente. - Description — qué contiene la tabla.
- Columns — nombre + tipo (
string,number,boolean,date). Arranca conkeyyvalue; Add column para sumar más. - Tags — etiquetas separadas por coma (p. ej.
threat-intel, malware). - Confirmá con Create Table. La tabla queda vacía; agregá filas con Add Row o editando celdas inline.
Crear · Quick List
- Ideal para listas simples: IPs, dominios, hashes, etc.
- List Name — nombre de la tabla (p. ej.
blocked_ips). - Column Name — nombre de la columna (default
value). - Values — pegá los valores en texto plano; el delimitador se detecta automáticamente (salto de línea, coma o punto y coma).
- Vista previa:
{N} values detectedcon los primeros valores. - Confirmá con Create List ({N} rows).
Crear · CSV
- Arrastrá o seleccioná un archivo
.csv; la primera fila define las columnas. - Vista previa:
{N} rows · {M} columns detectedcon mini-tabla de las primeras filas. - Table Name y Description (optional).
- Confirmá con Import CSV.
Gestionar datos
- Click any cell to edit inline · Enter to save · Esc to cancel — edición directa en la grilla.
- Add Row — agrega una fila vacía (valores
null). - Hover sobre una fila → ícono de basura para eliminarla.
- Click en el nombre de la tabla → renombrar inline.
- Export — descarga CSV; eliminar tabla con el ícono de basura del header (pide confirmación).
Usar en Logs — botón Lists
- En LOGS → Query Editor, el botón Lists (icono de libro) abre un popover con tus lookup tables.
- Buscá con Search lookup tables…, elegí una tabla y seleccioná el modo de inserción:
- Reference ✦ recommended — inserta
({{nombre_tabla}})o({{nombre_tabla.columna}}). Recomendado: los valores se resuelven en tiempo de ejecución y se mantienen sincronizados cuando actualizás la lista. - Value list — inserta literales
'a','b','c'(snapshot estático en el SQL). - IN list — inserta
IN ('a','b','c')(filtro ad-hoc en Logs). - WITH CTE — inserta
WITH lookup_name AS (SELECT * FROM (VALUES …))para usar la tabla como subconsulta. - El editor resalta
{{…}}en ámbar y muestra un popup con los valores al pasar el mouse.
Sintaxis de placeholders
- Tabla de una columna
trusted_ips:WHERE "src_endpoint_ip" NOT IN ({{trusted_ips}}) - Tabla multi-columna
vip_users, columnaemail:WHERE "actor_user_uid" IN ({{vip_users.email}}) - En tiempo de ejecución el motor resuelve los placeholders a literales SQL.
- Los placeholders funcionan en Logs (Run Query) y en el motor de alertas (Detection Rules).
Usar en Detection Rules — botón Lists
- En el wizard Add Detection Rule, paso 1 (Detection Logic), el toolbar tiene el mismo botón Lists.
- Usá el modo Reference ✦ recommended para que la regla siga sincronizada cuando cambies la lista — no hardcodees IPs en el SQL.
- Ejemplo:
SELECT time, activity_name, src_endpoint_ip FROM cloudtrail WHERE src_endpoint_ip NOT IN ({{blocked_ips}}) - El motor de detección resuelve
{{lookup_table}}antes de ejecutar la query. La query guardada debe serSELECT … FROM … WHERE …(sinORDER BY,LIMIT, etc.).