Saltar al contenido principal
Matcher implementa controles de seguridad integrales para proteger los datos de conciliación financiera. Esta guía cubre autenticación, autorización, aislamiento de inquilinos, cifrado y características de cumplimiento.

Descripción general


La arquitectura de seguridad de Matcher está construida en varias capas. Cada solicitud de API pasa por múltiples puntos de control de seguridad antes de llegar a sus datos.
1
Primero, TLS cifra la conexión.
2
Luego la autenticación verifica quién es usted:
  • El aislamiento de inquilinos asegura que solo vea sus propios datos.
  • RBAC verifica si tiene permiso para realizar la acción.
3
Finalmente, el sistema registra todo para propósitos de auditoría.

Protección por capas

CapaProtección
TransporteCifrado TLS 1.2+
AutenticaciónTokens JWT vía lib-auth
Aislamiento de inquilinosPostgreSQL con esquema por inquilino
AutorizaciónControl de acceso basado en roles
AuditoríaLogs inmutables de solo anexión
AlmacenamientoCifrado en reposo

Autenticación


Matcher usa la biblioteca compartida lib-auth (v2) para autenticación, soportando control de acceso basado en JWT con firma HMAC.

Configuración

Tres variables de entorno controlan la autenticación:
VariableRequeridaDescripción
AUTH_ENABLEDHabilitar o deshabilitar la autenticación (true/false)
AUTH_SERVICE_ADDRESSCuando auth está habilitadoDirección del servicio de autorización externo
AUTH_JWT_SECRETCuando auth está habilitadoSecreto compartido para la verificación de firma de tokens HMAC
Cuando AUTH_ENABLED=false (solo desarrollo), Matcher usa un ID de inquilino predeterminado (11111111-1111-1111-1111-111111111111) y omite las verificaciones de autorización.

Estructura del token JWT

Matcher valida JWTs firmados con algoritmos HMAC (HS256, HS384, HS512). El token debe incluir claims de identificación de inquilino:
{
  "sub": "user_123",
  "tenant_id": "11111111-1111-1111-1111-111111111111",
  "tenant_slug": "acme-corp",
  "iat": 1705749600,
  "exp": 1705753200,
  "nbf": 1705749600
}
ClaimRequeridoDescripción
tenant_id o tenantIdUUID del inquilino para aislamiento de esquema
tenant_slug o tenantSlugNoIdentificador legible del inquilino
subNoID de usuario (usado para registro de auditoría)
expTiempo de expiración del token
nbfNoTiempo not-before (el token es inválido antes de este momento)

Encabezados requeridos

Todas las solicitudes de API deben incluir autenticación:
curl -X GET "https://api.matcher.example.com/v1/config/contexts" \
 -H "Authorization: Bearer $JWT_TOKEN"

Validación de token

Matcher valida los tokens en cada solicitud:
  1. Verificación de firma: Valida la firma HMAC usando el secreto compartido configurado
  2. Verificación de expiración: Rechaza tokens expirados (claim exp)
  3. Verificación de not-before: Rechaza tokens usados antes de su tiempo nbf
  4. Extracción de inquilino: Extrae tenant_id para aislamiento de esquema

Autorización (RBAC)


El control de acceso basado en roles protege todos los endpoints de API. Matcher delega la autorización a un servicio de auth externo vía lib-auth. Los permisos son granulares y siguen el patrón resource:sub-resource:action.

Estructura de permisos

<resource>:<sub-resource>:<action>
Ejemplos:
  • configuration:context:create — Crear contextos de conciliación
  • matching:job:run — Ejecutar trabajos de coincidencia
  • exception:exception:resolve — Resolver excepciones

Lista completa de permisos

Matcher define seis dominios de recursos. Cada endpoint requiere un permiso específico verificado contra el servicio de autorización externo.

Configuration

PermisoDescripción
configuration:context:createCrear contextos de conciliación
configuration:context:readVer contextos
configuration:context:updateActualizar contextos
configuration:context:deleteEliminar contextos
configuration:source:createCrear fuentes de datos
configuration:source:readVer configuración de fuente
configuration:source:updateModificar configuración de fuente
configuration:source:deleteEliminar fuentes de datos
configuration:field-map:createCrear mapeos de campos
configuration:field-map:readVer mapeos de campos
configuration:field-map:updateActualizar mapeos de campos
configuration:field-map:deleteEliminar mapeos de campos
configuration:rule:createCrear reglas de coincidencia
configuration:rule:readVer reglas de coincidencia
configuration:rule:updateActualizar reglas de coincidencia
configuration:rule:deleteEliminar reglas de coincidencia
configuration:fee-schedule:createCrear cronogramas de tarifas
configuration:fee-schedule:readVer cronogramas de tarifas
configuration:fee-schedule:updateActualizar cronogramas de tarifas
configuration:fee-schedule:deleteEliminar cronogramas de tarifas
configuration:schedule:createCrear programaciones
configuration:schedule:readVer programaciones
configuration:schedule:updateActualizar programaciones
configuration:schedule:deleteEliminar programaciones

Ingestion

PermisoDescripción
ingestion:import:createCargar archivos de transacciones
ingestion:job:readVer trabajos de importación y detalles de transacciones
ingestion:transaction:ignoreMarcar transacciones como ignoradas
ingestion:transaction:searchBuscar transacciones

Matching

PermisoDescripción
matching:job:runEjecutar ejecuciones de coincidencia
matching:job:readVer resultados de ejecuciones de coincidencia y grupos
matching:job:deleteEliminar grupos de coincidencia (deshacer coincidencia)
matching:adjustment:createCrear entradas de ajuste

Exception

PermisoDescripción
exception:exception:readVer excepciones e historial
exception:exception:resolveForzar coincidencia o ajustar entradas
exception:exception:dispatchDespachar excepciones a sistemas externos
exception:callback:processProcesar callbacks de webhooks externos
exception:dispute:readVer disputas
exception:dispute:writeCrear disputas, cerrar disputas, enviar evidencia
exception:comment:writeAgregar o eliminar comentarios en excepciones

Governance

PermisoDescripción
governance:audit:readVer logs de auditoría
governance:archive:readVer y descargar archivos
governance:actor-mapping:readVer mapeos de actores
governance:actor-mapping:writeCrear o actualizar mapeos de actores
governance:actor-mapping:deleteEliminar mapeos de actores

Reporting

PermisoDescripción
reporting:dashboard:readAcceder a analíticas y métricas del dashboard
reporting:export:readVer y exportar reportes (coincidentes, no coincidentes, resumen, varianza)
reporting:export-job:writeCrear y cancelar trabajos de exportación
reporting:export-job:readVer estado de trabajos de exportación y descargar exportaciones

Gestión de roles

El servicio de autorización externo gestiona los roles, no Matcher en sí. Configure los roles y sus permisos asociados en su proveedor de identidad o servicio de auth. Matcher verifica los permisos en cada solicitud llamando al servicio de auth con el recurso y la acción requeridos.

Aislamiento de inquilinos


Matcher usa aislamiento de esquema por inquilino en PostgreSQL, proporcionando una fuerte separación de datos entre inquilinos.

Cómo funciona

Cuando llega una solicitud, Matcher extrae el ID del inquilino del token JWT (nunca de parámetros de consulta o encabezados que usted controla). Luego establece la conexión de base de datos para usar el esquema de ese inquilino vía SET LOCAL search_path, por lo que cada consulta se ejecuta en completo aislamiento.
Incluso si existiera un bug en la capa de aplicación, la base de datos impone la separación. El aislamiento de esquema se aplica por transacción para prevenir contaminación del pool de conexiones.
Detalles de implementación
  1. ID de inquilino solo desde JWT: Nunca aceptado desde parámetros de solicitud
  2. Selección automática de esquema: Aplicado vía auth.ApplyTenantSchema()
  3. Aislamiento por transacción: Usa SET LOCAL search_path para delimitar cada transacción de base de datos
  4. Sin acceso entre inquilinos: La base de datos impone el aislamiento

Garantías de aislamiento

GarantíaImplementación
Aislamiento de datosEsquemas PostgreSQL separados
Alcance de consultasSET LOCAL search_path por transacción
Sin suplantación de inquilinoInquilino solo desde JWT
Separación de auditoríaTablas de auditoría por inquilino

Pista de auditoría


Matcher registra todas las acciones en un log de auditoría inmutable de solo anexión para cumplimiento y análisis forense.

Eventos auditados

CategoríaEventos
Acceso a datosVer coincidencias, ver excepciones, exportar datos
Modificación de datosCrear coincidencia, resolver excepción, actualizar reglas
ConfiguraciónCrear contexto, modificar fuente, cambiar configuración

Consultar logs de auditoría

Use los endpoints de logs de auditoría de gobernanza para recuperar registros de auditoría:
curl -X GET "https://api.matcher.example.com/v1/governance/audit-logs" \
 -H "Authorization: Bearer $TOKEN"
Referencia de API: Listar logs de auditoría

Mapeos de actores y privacidad


Los mapeos de actores asocian identificadores del sistema (como los claims sub de JWT) con nombres legibles y direcciones de correo electrónico. Esto mejora la legibilidad de los logs de auditoría sin almacenar datos personales en cada entrada de log.

Gestionar mapeos de actores

cURL
curl -X PUT "https://api.matcher.example.com/v1/governance/actor-mappings/user-abc-123" \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "display_name": "John Doe",
   "email": "john.doe@company.com"
 }'

Pseudonimización GDPR

Para cumplir con las solicitudes de derecho al olvido, pseudonimice un actor para reemplazar sus datos personales con [REDACTED]. Esta acción es irreversible.
cURL
curl -X POST "https://api.matcher.example.com/v1/governance/actor-mappings/user-abc-123/pseudonymize" \
 -H "Authorization: Bearer $TOKEN"
Referencia de API: Pseudonimizar actor

Archivos de logs de auditoría

Los logs de auditoría históricos se comprimen periódicamente y se mueven a almacenamiento a largo plazo. Use los endpoints de archivos para listar y descargar datos archivados para revisiones de cumplimiento.
cURL
curl -X GET "https://api.matcher.example.com/v1/governance/archives" \
 -H "Authorization: Bearer $TOKEN"
Referencia de API: Listar archivos | Descargar archivo

Cifrado de datos


Cifrado en tránsito

TLS cifra todos los datos transmitidos hacia y desde Matcher.
RequisitoConfiguración
ProtocoloTLS 1.2 o superior
Suites de cifradoSolo cifrados fuertes
CertificadoCertificado válido firmado por CA
HSTSHabilitado con max-age de 1 año

Cifrado en reposo

Tipo de datosMétodo de cifrado
Base de datosPostgreSQL TDE (Transparent Data Encryption)
Almacenamiento de archivosCifrado AES-256
RespaldosCifrados antes de almacenamiento
SecretosVault con cifrado de sobre

Cumplimiento SOX


Matcher mantiene registros para los requisitos de auditoría SOX (Sarbanes-Oxley).

Características de control SOX

ControlCaracterística de Matcher
Segregación de funcionesRBAC con permisos granulares
Gestión de cambiosPista de auditoría para todos los cambios de configuración
Control de accesoAutenticación JWT con aplicación de roles
Pista de auditoríaLogs inmutables de solo anexión
Integridad de datosChecksums y validación de transacciones

Seguridad de API


Limitación de tasa

Algunos endpoints incluyen limitación de tasa adicional para proteger contra abuso:
Tipo de endpointLimitación de tasa
Despacho de excepciones
Endpoints de exportación
Procesamiento de callbacks

Protección SSRF

Matcher bloquea las solicitudes HTTP salientes a rangos de IP privados al despachar excepciones a sistemas externos. Esto previene ataques de Server-Side Request Forgery (SSRF). Los rangos bloqueados incluyen 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8 y equivalentes IPv6.

Verificación de firma de webhooks

Matcher firma los payloads de webhooks salientes con HMAC-SHA256 usando un secreto compartido. La firma aparece en el encabezado X-Signature-256, permitiendo a los receptores verificar la autenticidad.

Mejores prácticas


Otorgue a los usuarios solo los permisos que necesitan. Comience con acceso mínimo y agregue permisos según sea necesario.
Implemente rotación automática para credenciales de servicio y secretos JWT. Use tokens de corta duración cuando sea posible.
Mantenga los logs de auditoría habilitados y revíselos regularmente. Configure alertas para actividad sospechosa.
Mantenga los límites de tasa predeterminados habilitados para proteger contra abuso. Ajuste los umbrales según los patrones de tráfico esperados.
Realice revisiones periódicas de acceso. Elimine el acceso rápidamente cuando los usuarios cambien de rol o se vayan.
Siempre valide las firmas HMAC-SHA256 en los payloads de webhooks para confirmar que se originan de Matcher.
Configure monitoreo y alertas en tiempo real para eventos de seguridad. Investigue anomalías de inmediato.

Próximos pasos