Ir al contenido

Seguridad y cumplimiento

Esta página es la referencia de los controles de seguridad de cuenta, control de acceso y cumplimiento de CORE-M. Para la autenticación a nivel de petición (JWT vs API key, headers, códigos de error) consulta Visión general de la API; para saber cómo se aíslan los tenants consulta Auth y multi-tenancy.

La MFA es configurable por tenant, usando TOTP más códigos de recuperación de un solo uso. Los factores se almacenan cifrados en el namespace sessions de Aerospike, set mfa, con clave {tenant_id}:{user_id}.

AcciónComportamiento
Enrolar TOTPEl usuario confirma un código válido; el secreto cifrado se almacena; los códigos de recuperación se generan y se devuelven exactamente una vez; se escribe el audit mfa.enrolled
Login (MFA requerida)La autenticación solo por contraseña no emite un token; la respuesta de login exige un challenge de MFA; el access token se emite únicamente tras un código TOTP válido
Usar un código de recuperaciónEl login tiene éxito, el código se invalida y se escribe el audit mfa.recovery_code.used

Los tenants configuran la fuerza de las contraseñas, la duración de la sesión y la rotación de refresh tokens; los usuarios pueden listar y revocar sus propias sesiones.

ControlComportamiento
Política de contraseñasLas contraseñas débiles se rechazan con INVALID_ARGUMENT; la respuesta lista las reglas no superadas sin reflejar la contraseña
Rotación de refreshCada refresh emite un nuevo par de tokens e invalida el refresh token anterior
Revocar una sesiónEl refresh token de la sesión se invalida; su access token falla tras el retardo de propagación de revocación configurado; se escribe el audit session.revoked
Revocar todas las demás sesionesTodas las sesiones excepto la actual se invalidan

Los API tokens con scope y las cuentas de servicio son independientes de las keys de provisioning de dispositivos. Los tokens viven en el namespace sessions de Aerospike, set api_tokens, con clave {tenant_id}:{token_id}. El valor del token en crudo se devuelve exactamente una vez; solo se almacenan el hash, el prefix, los scopes y los timestamps.

Un token lleva:

AtributoSignificado
subject_typeuser o service_account
scopesEl conjunto de permisos que otorga el token (tabla abajo)
expires_atTimestamp de expiración
ip_allowlistRestricción opcional de CIDR de origen
prefixPrefix no secreto mostrado en los listados y el audit
created_at / last_used_atTimestamps de ciclo de vida
ScopeOtorga
devices:readLeer el device registry
devices:writeCrear / actualizar / eliminar dispositivos
telemetry:ingestEnviar telemetry
telemetry:readConsultar telemetry y snapshots
rules:writeGestionar reglas
rpc:executeEmitir RPCs de servidor a dispositivo
exports:createCrear jobs de export
anchoring:readLeer lotes (batch) de anchor y pruebas
EscenarioResultado
El token carece del scope para una llamada (p. ej. un token telemetry:read llama a CreateDevice)PERMISSION_DENIED; el audit api_token.denied registra missing_scope="devices:write"
Rotar el token de una cuenta de servicioSe crea un nuevo token; el anterior se programa para expirar tras overlap_seconds; ambos prefixes son visibles durante la ventana de solapamiento

Las allowlists aplican tanto a nivel de tenant (UI, API, ingesta de protocolo) como a nivel de token individual.

EscenarioResultado
Petición de token desde fuera de su CIDR allowlistPERMISSION_DENIED; ningún handler downstream se ejecuta
Login desde una IP excluida por la allowlist de UI del tenantRechazado antes de la verificación de contraseña; se escribe el audit login.denied_ip

Cada acción de seguridad, administración, gobierno de datos, ejecución de comandos, despliegue de reglas, perfil, dashboard y política de anchoring escribe un evento de audit inmutable. Los eventos se almacenan en el namespace sessions de Aerospike, set audit, con clave {tenant_id}:{event_id}, y pueden copiarse a almacenamiento de largo plazo.

CampoSignificado
event_idID único del evento
tenant_idTenant propietario
actor_type / actor_idQuién actuó (usuario o cuenta de servicio)
actionQué ocurrió, p. ej. device.deleted, retention.policy.updated
target_type / target_idEl recurso afectado
result / reasonResultado y, cuando se deniega, por qué
source_ip / user_agentOrigen de la petición
trace_idCorrelaciona con la traza distribuida
created_atTimestamp del evento
before_hash / after_hashHashes de integridad alrededor del cambio
redacted_details_jsonPayload de detalle con los secretos removidos
CapacidadComportamiento
BúsquedaFiltra por rango de tiempo, actor y action; los resultados se paginan y ordenan de forma descendente por created_at
RedacciónLos valores sensibles nunca se registran — una rotación de token solo registra token_id, prefix, scopes y la expiración, nunca el token en crudo
ExportLos eventos de audit pueden exportarse con un manifiesto (consulta Jobs de export)

Export de cumplimiento y eliminación de datos

Sección titulada «Export de cumplimiento y eliminación de datos»

CORE-M admite flujos de derechos del titular de los datos con salvaguardas explícitas para las pruebas inmutables.

FlujoComportamiento
Export de datos del usuarioEl bundle contiene el perfil del usuario, sus sesiones, los eventos de audit que lo involucran, las preferencias de dashboard y las preferencias de notificación; la URL de descarga tiene un expires_at
Eliminación de datos (dispositivo con pruebas finales)La telemetry operacional en crudo se elimina o redacta según la política; los registros de prueba permanecen; las respuestas de verificación indican que los datos en crudo no se retienen; el audit compliance.delete.completed registra el número de pruebas preservadas

Los controles de custodia cubren los secretos que configuras: client secrets de SSO, credenciales de protocolo, secretos de conectores y secretos de proveedores de notificación.

SecretoComportamiento de custodia
Secreto de conector (p. ej. bearer token de webhook)Almacenado en el backend de secretos configurado; la configuración de la rule-chain conserva solo una referencia; las respuestas de la API nunca devuelven el valor
Credencial de protocolo / SSOAlmacenada hasheada o como referencia de backend; los valores en crudo nunca los devuelve la API

La plataforma prefiere referencias respaldadas por KMS frente al material de clave en crudo allí donde haya un backend de secretos disponible.