Descripción general de la arquitectura técnica para equipos de TI que evalúan AccessPoint

Last updated: September 03, 2026 by Steve

Arquitectura técnica

Este documento ofrece una descripción general técnica de la plataforma AccessPoint para arquitectos de soluciones, ingenieros de ciberseguridad y directores de TI que evalúan el producto para su organización. Se basa en la Guía de Arquitectura de Soluciones de AccessPoint (v2.1.0).

Descripción general de la plataforma

AccessPoint es una plataforma de gestión de acceso a la información y privacidad construida sobre Microsoft 365 y Azure. Comenzó como una herramienta de gestión de solicitudes de acceso del interesado (SAR) y ha evolucionado hasta convertirse en una suite integrada de oficina de ATIP/privacidad que cubre todo el ciclo de vida de las solicitudes y el programa de privacidad en su conjunto. Se ejecuta enteramente dentro del propio inquilino de Microsoft 365 y Azure de su organización: no existen servidores externos, bases de datos ni dependencias de nube de terceros en tiempo de ejecución, y todos los datos permanecen en su entorno, bajo su control.

La plataforma está organizada en módulos que comparten un mismo eje de identidad, RBAC, notificaciones, auditoría e informes:

  • Solicitudes de acceso — recepción de ATI/FOIA/GDPR, asignación de tareas a custodios, revisión y redacción de documentos, empaquetado de respuestas e informes estatutarios
  • Registros de video y audio — grabaciones revisadas en el mismo espacio de trabajo de documentos: cargas reanudables de hasta 2 GB, transcripciones y subtítulos, tachado basado en tiempo (recuadro, desenfoque, pixelado, silenciar, pitido, distorsión de voz, retención) con una excepción en cada marca, detección y seguimiento de rostros dentro del inquilino, y copias de divulgación MP4/MP3 con las marcas grabadas y un manifiesto hash
  • Evaluaciones de privacidad — un motor configurable de evaluaciones PIA/AIA/de seguridad
  • Incidentes y vulneraciones de privacidad — recepción, contención, riesgo de daño y flujos de trabajo de notificación de vulneraciones
  • Quejas y apelaciones — ciclo de vida de la queja con partes, plazos estatutarios e investigación
  • Registro de riesgos de privacidad — riesgos de estilo ISO 31000, planes de tratamiento e indicadores clave de riesgo
  • Registros de actividades de tratamiento (ROPA) — registros del artículo 30 del GDPR y exportación del registro
  • Registro de compromisos — compromisos de privacidad rastreados con periodicidad y seguimientos
  • Asistencia con IA (opcional) — sugerencias y generación de borradores respaldadas por Azure OpenAI que se ejecutan enteramente en la propia suscripción del cliente: resúmenes de documentos, sugerencias de tachado con IA, generación de borradores fundamentada, clasificación de recepción, prellenado de respuestas de evaluación, búsqueda semántica y detección de duplicados, un asistente por caso consciente del estatuto (Ask AccessPoint — citas en las que se puede hacer clic, conversaciones guardadas, un modo Mi carga de casos), respuestas de datos de «Ask AccessPoint», un manual de la jurisdicción que fundamenta las respuestas de procedimiento, traducción automática y un resumen diario — todo opcional por inquilino, registrado solo con metadatos, con divulgación de actividad de IA por registro

Todos los módulos se basan en paquetes de jurisdicción, sin datos semilla estáticos.

Características clave:

  • Nativo del inquilino — se implementa como una solución de SharePoint Framework (SPFx) y servicios de Azure PaaS dentro de su inquilino existente
  • Sin dependencias de Power Platform — no se requiere licenciamiento de Dataverse, Power Automate ni Power Apps
  • Soberanía de datos — todos los datos residen en la geografía configurada del inquilino de Azure
  • Sin acceso del proveedor en tiempo de ejecución — el editor no puede acceder a sus datos durante la operación normal
  • Licenciamiento de tarifa plana — licenciamiento departamental sin medición por usuario
  • Privacidad desde el diseño — los roles de custodio y colaborador están estructuralmente aislados de la información personal del solicitante y del interesado
  • Configuración en lugar de código — los tipos de solicitud, los códigos de exención y los campos de selección están basados en datos
  • Multilingüe desde el diseño — un sistema de traducción de tres niveles que admite 11 idiomas
  • Instantes en UTC, días de calendario en la zona del usuario — cada marca de tiempo se almacena como un instante UTC, pero los hechos de calendario estatutarios (fecha de recepción, fecha límite, vencido, días restantes) se calculan sobre el calendario local de quien llama, a partir de la zona horaria que el elemento web envía con cada solicitud

Diagrama de arquitectura

Customer's Microsoft 365 Tenant          Customer's Azure Subscription
┌──────────────────────────────┐         ┌─────────────────────────────────────────┐
│                              │         │                                         │
│  SPFx Web Part               │         │  Azure App Service (Linux)              │
│  (SharePoint Online /        │──HTTPS──│  ASP.NET Core 10 Web API               │
│   Teams Personal App /       │  (JWT)  │    ├─ Entra ID JWT validation          │
│   Teams Tab)                 │         │    ├─ Role-based authorization          │
│                              │         │    ├─ PII filter middleware             │
│  Installed from AppSource    │         │    ├─ User upsert from JWT claims      │
│  or Tenant App Catalog       │         │    ├─ License validation middleware    │
│                              │         │    └─ AccessPoint document engine      │
│                              │         │                                         │
│  SharePoint Tenant Storage   │         │  Azure SQL Database                     │
│  (API URL override,          │         │  (224 tables, 3,474 fields)            │
│   optional)                  │         │                                         │
└──────────────────────────────┘         │  Azure Blob Storage                     │
                                         │  (Documents, converted PDFs, renditions)│
        Microsoft Graph API              │                                         │
        ┌──────────────────────┐         │  Application Insights + Log Analytics   │
        │  Mail.Send           │◄────────│  (Telemetry, diagnostics)               │
        │  User.ReadBasic.All  │         │                                         │
        │  TeamsActivity.Send  │         │  (opt-in) Azure AI Search               │
        │  TeamsAppInstall     │         │  (opt-in) Azure OpenAI                  │
        │  Calendars.Read      │         │  (opt-in) Azure Document Intelligence   │
        │  AiEnterprise…Read   │         │  (opt-in) Azure AI Speech               │
        │  OnlineMeeting…Read  │         │  (opt-in) Defender for Storage          │
        │                      │         │  (opt-in) Container Apps media job      │
        │                      │         └─────────────────────────────────────────┘
        └──────────────────────┘  ← M365 record capture (delegated + app-only Copilot)

Inventario de componentes

Componente Tecnología Implementado en Finalidad
Componente web de SPFx TypeScript, React 17, Fluent UI 8, SPFx 1.23.2 SharePoint Online / Teams del cliente Interfaz de usuario para todos los roles
Aplicación de Teams Manifiesto de Teams v1.19, en sincronía de versión con la solución SPFx y ApiVersion.Current (sellado por CI) Centro de administración de Teams del cliente Aplicación personal, pestaña configurable, notificaciones de fuente de actividad con vínculos profundos
API web C# / ASP.NET Core 10, .NET 10 (~103 controladores, ~124 interfaces de servicio) Azure App Service (Linux) del cliente Lógica de negocio, acceso a datos, procesamiento de documentos
Base de datos SQL Server (DacPac) Azure SQL Database del cliente Almacén de datos relacional (224 tablas, 3474 campos)
Blob Storage Azure Blob Storage (contenedores documents y migration-staging; evidence opcional) Cuenta de Azure Storage del cliente Archivos de documentos, PDF convertidos y variantes de medios (proxies, imágenes de portada, formas de onda, transcripciones, copias para el visor, grabaciones divulgadas); solo OAuth, con el acceso por clave compartida deshabilitado
Monitoreo Application Insights + Log Analytics Suscripción de Azure del cliente Telemetría, diagnóstico, alertas
AI Search (opcional) Azure AI Search Suscripción de Azure del cliente Búsqueda de texto completo en el contenido de documentos, además de búsqueda vectorial semántica (índice de documentos + casos); se aprovisiona solo cuando deployAiSearch=true
Azure OpenAI (opcional) Azure OpenAI Service Suscripción de Azure del cliente Asistencia con IA — generación de borradores fundamentada, sugerencias, búsqueda semántica, asistente del caso (Ask AccessPoint); autenticación de identidad administrada (sin claves de API), se aprovisiona solo cuando se implementa Asistencia con IA
Document Intelligence (opcional) Azure AI Document Intelligence (prebuilt-read) Suscripción de Azure del cliente OCR para escaneos solo con imagen que alimenta la búsqueda de contenido, la detección de duplicados, los resúmenes y las sugerencias de tachado, y la detección de texto en pantalla en fotogramas de video muestreados; autenticación de identidad administrada, se aprovisiona solo cuando deployDocumentIntelligence=true
Azure AI Speech (opcional) Azure AI Speech (transcripción por lotes, S0) Suscripción de Azure del cliente Transcripciones y subtítulos con marcas de tiempo y etiquetado de interlocutor para registros de video y audio; la cuenta lee el audio desde la cuenta de almacenamiento de documentos mediante su propia identidad administrada; se aprovisiona solo cuando deploySpeech=true
Defender for Storage (opcional) Microsoft Defender for Storage (análisis de malware al cargar archivos) Suscripción de Azure del cliente Cada carga se analiza; un archivo marcado nunca puede obtenerse en vista previa, reproducirse, descargarse ni divulgarse; se aprovisiona solo cuando deployDefenderForStorage=true
Ejecutor de medios (opcional) Dos colas de almacenamiento + un entorno de Container Apps y un trabajo de Container Apps controlado por eventos que escala a cero, ejecutando la imagen del trabajador de medios del editor (ffmpeg más el mismo núcleo de medios que la API ejecuta en proceso) Suscripción de Azure del cliente Transcodificaciones, miniaturas, formas de onda, generación de la divulgación y conversión de documentos muy grandes fuera del App Service; la imagen es solo código y puede reflejarse en el propio registro del cliente; se aprovisiona solo cuando deployMediaProcessing=true. Sin él, el App Service procesa las grabaciones en proceso

Qué opera el editor

Servicio Finalidad
Realizer Platform Validación de licencia, proxy de notificaciones de Teams, descubrimiento de la URL de la API de SPFx, el enrutador inteligente de la pestaña personal de Teams y la página Finalizar instalación posterior a la implementación (no se transmiten datos de casos del cliente)
Publicación en AppSource Distribución del paquete SPFx
Plantilla de implementación Plantilla Bicep/ARM para el backend de Azure, implementada con un clic desde el portal de Azure en la suscripción del cliente
Registro de contenedores Registro de extracción anónima que sirve la imagen del trabajador de medios, solo código, cuando el ejecutor de medios opcional se implementa con la imagen predeterminada; se recomienda a los clientes reflejarla en su propio registro para producción
Paquete de la aplicación de Teams Distribución del manifiesto de Teams (carga lateral o tienda de aplicaciones de la organización)

Ningún dato del cliente se transmite ni se almacena en ningún servicio operado por el editor.

Módulos funcionales

Todos los módulos se ejecutan dentro de la misma API web / componente web de SPFx y comparten un mismo eje de identidad, RBAC, comentarios, notificaciones, Mi Día, auditoría, horas, flujo de trabajo de revisión e informes. Cada uno está basado en datos mediante Paquetes de Jurisdicción.

Módulo Resumen
Solicitudes (ATIP/SAR) Recepción de solicitudes → asignación de tareas a custodios → recopilación → respuesta. Tipos, estados, numeración, calendarios y SLA configurables.
Documentos y redacción Espacio de trabajo de documentos por facetas, compartido por todos los tipos de caso: etiquetas, carpetas, familias de correo electrónico con adjuntos extraídos, seguimiento de lectura, vistas guardadas, detección de duplicados basada en decisiones, visor de PDF compuesto en el cliente (Original / Redline / Vista previa con tachados, generadas a partir de los registros de tachado sobre un único PDF base), canal de redacción con exenciones, modos de etiqueta por marca e ida y vuelta XFDF, patrones de buscar y tachar, sugerencias de tachado basadas en reglas y con IA, reutilización de tachados de solicitudes anteriores, empaquetado de respuestas con combinación de membrete.
Registros de medios (procesadores opcionales) Evidencia de video y audio en el espacio de trabajo de documentos: cargas fragmentadas y reanudables, preparación con ffmpeg (proxy, imagen de portada, mosaico de miniaturas, forma de onda), transcripciones y subtítulos de Azure AI Speech, marcas basadas en tiempo (recuadro, desenfoque, pixelado, silenciar, pitido, distorsión de voz, retención) grabadas en los archivos MP4/MP3 divulgados, detección de rostros y seguimiento de regiones dentro del inquilino, divulgación en ZIP con MANIFEST.sha256. Se ejecuta en proceso en el App Service o, con deployMediaProcessing, en un trabajo de Container Apps alimentado por colas de almacenamiento; el análisis de Defender for Storage condiciona la divulgación cuando está implementado.
Solicitantes / Contactos Identidad reutilizable de solicitante de primera clase, control del flujo de recepción, espacio de trabajo de conducta frívola y vejatoria, tarifas y verificación, fusión; consultas; redactor de correspondencia con firewall de información personal.
Evaluaciones de privacidad Motor configurable de PIA/AIA/evaluación de seguridad: plantillas, cuestionarios de detección, asignación de secciones, puntuación/niveles, registro de riesgos, resúmenes de cierre/regulador.
Incidentes de privacidad / vulneraciones Recepción de incidentes, contención, riesgo de daño, reglas de notificación de vulneraciones por régimen, remediación.
Quejas y apelaciones Ciclo de vida de la queja: partes, plazos estatutarios, admisibilidad, investigación, revisión de alegatos.
Riesgos y compromisos Registro de riesgos ISO 31000 con apetito de riesgo, KRI y tareas de tratamiento; registro de compromisos con periodicidad y seguimientos.
ROPA / Sujetos de privacidad Programas/sistemas reutilizables con registros del artículo 30 del GDPR y exportación del registro.
Revisiones Motor configurable de revisión y aprobación secuencial/paralelo, reutilizado en todas las entidades de casos.
Informes y auditoría Informes fijos, editor de informes personalizados basado en catálogo (paneles de Report Studio), informes estadísticos anuales, paneles de SLA/gestión, libro mayor de auditoría encadenado por hash y exportaciones de auditoría del caso listas para uso judicial.
Asistencia con IA (opcional) Sugerencias y generación de borradores respaldadas por Azure OpenAI: resúmenes, sugerencias de tachado, generación de borradores fundamentada, clasificación de recepción, sugerencias para custodios, prellenado y comprobaciones de coherencia de evaluaciones, búsqueda semántica y duplicados, un asistente del caso consciente del estatuto — Ask AccessPoint (citas en las que se puede hacer clic, preparación de borradores, conversaciones guardadas) — además de un asistente de cartera/Mi carga de casos, un manual de la jurisdicción sembrado por los paquetes de jurisdicción, informes de Ask AccessPoint, resumen diario y boletín de puesta al día, cartera de riesgos y análisis de conducta. Interruptores por función y por inquilino; registro solo con metadatos (el asistente puede además guardar transcripciones privadas del propietario).
Configuración y plataforma Importación de paquetes de jurisdicción (1 paquete Universal Baseline + 136 paquetes de jurisdicción, incluidos los estados automáticos de denegación presunta con alcance por tipo y la fundamentación de IA opcional), configuración del inquilino, roles/permisos personalizados, conmutadores de funciones, campos personalizados, tablas de traducción de 11 idiomas.

Modelo de implementación

AccessPoint utiliza un modelo de implementación dividido. El componente web de SPFx se instala desde Microsoft AppSource (o un Catálogo de aplicaciones del inquilino), el paquete de la aplicación de Teams se instala mediante carga lateral o la tienda de aplicaciones de la organización, y el backend de Azure se implementa en la propia suscripción del cliente mediante uno de dos métodos:

  • Azure Portal (recomendado) — implementación con un clic de todos los recursos de Azure (App Service, SQL, Blob Storage, Application Insights, además de las opciones opcionales de AI Search, Azure OpenAI, Document Intelligence, Azure AI Speech, Defender for Storage, procesamiento de medios, aislamiento de red y el contenedor de evidencia WORM) mediante ARM/Bicep. La API se implementa mediante zipdeploy durante la implementación de ARM; el código se descarga una vez desde la CDN del editor y se almacena en el App Service del cliente, sin dependencia externa en tiempo de ejecución. Una elección obligatoria de tipo de implementación protege las reimplementaciones: Nueva instalación crea el servidor SQL con prioridad Entra (el principal que realiza la implementación se convierte en el administrador inicial de Entra, con autenticación exclusiva de Entra desde el origen — nunca existe ninguna credencial de SQL), mientras que Actualizar instalación existente conserva la configuración de aplicación del operador y no toca el acceso a la base de datos. El cliente conserva la propiedad completa del grupo de recursos.
  • Plantilla Bicep + script de PowerShell (manual) — para organizaciones con control de cambios estricto. Un botón Deploy to Azure o el script Deploy-AccessPoint.ps1 implementa la infraestructura, reafirma la autenticación exclusiva de Entra en SQL (una salvaguarda: la plantilla ya la aplica), concede permisos de Microsoft Graph a la identidad administrada (la alternativa con script a la página Finalizar instalación del editor), configura la anulación opcional de la URL de la API mediante entidad de almacenamiento de SharePoint, y aprueba las solicitudes de permisos de API de SPFx. Cada paso se puede omitir de forma independiente.

Los permisos de Graph normalmente se conceden a través de la página Finalizar instalación del editor: la implementación emite una salida finishSetupUrl que un administrador de Entra del cliente abre para conceder cada permiso de identidad administrada en un único pase idempotente (se vuelve a ejecutar después de las actualizaciones para incorporar nuevos permisos).

La implementación está reforzada en materia de seguridad de forma predeterminada: TLS 1.3, FTPS deshabilitado, autenticación básica de SCM/FTP deshabilitada, HTTP/2 habilitado y Microsoft Defender for SQL activado de forma predeterminada (con opción de exclusión). La API incluye su DacPac de base de datos y lo aplica al iniciar mediante un servicio de migración que utiliza DacServices.Deploy(upgradeExisting: true); no realiza ninguna operación en un esquema ya actualizado, y aplica un delta aditivo y no destructivo tras un cambio de esquema (BlockOnPossibleDataLoss = true, DropObjectsNotInSource = false). El resultado de la migración se expone a través de /api/health. Después de la implementación, un administrador otorga consentimiento para la aplicación empresarial de Realizer (notificaciones de Teams), configura el buzón de envío e importa un paquete de jurisdicción.

Autenticación e identidad

AccessPoint utiliza Microsoft Entra ID como único proveedor de identidad. No existen cuentas de usuario ni contraseñas específicas de la aplicación. El componente web de SPFx obtiene un JWT para la audiencia de la API mediante AadHttpClient; la API valida el emisor, la audiencia, la firma y la caducidad en cada solicitud. Las políticas de MFA y acceso condicional configuradas en el inquilino se aplican en su totalidad.

User (Browser)                SharePoint Online           AccessPoint API
     │                              │                          │
     │  1. Load SPFx web part       │                          │
     │─────────────────────────────►│                          │
     │                              │                          │
     │  2. AadHttpClient.getClient()│                          │
     │  (SPFx acquires token for    │                          │
     │   api://<client-id> audience)│                          │
     │                              │                          │
     │  3. API call + Bearer token  │                          │
     │──────────────────────────────┼─────────────────────────►│
     │                              │                          │
     │                              │  4. Validate JWT:        │
     │                              │     - Issuer (Entra ID)  │
     │                              │     - Audience (api://)  │
     │                              │     - Signature          │
     │                              │     - Expiry             │
     │                              │                          │
     │                              │  5. UserUpsertMiddleware: │
     │                              │     Extract claims →     │
     │                              │     Upsert Users table   │
     │                              │                          │
     │                              │  6. PermissionService:   │
     │                              │     resolve roles +      │
     │                              │     permission grants    │
     │                              │                          │
     │     ◄── JSON response ───────┼──────────────────────────│
Parámetro Valor
Proveedor de identidad Microsoft Entra ID (Azure AD)
Protocolo OAuth 2.0 / OpenID Connect
Tipo de token JWT Bearer
Audiencia api://<client-id> y <client-id> (se aceptan tokens v1 y v2)
Emisor El emisor de cualquier inquilino de Entra — se validan los formatos https://login.microsoftonline.com/{tenantId}/v2.0 (v2) y https://sts.windows.net/{tenantId}/ (v1); la reclamación tid del token determina el alcance por inquilino
Registro de aplicación Aplicación multiinquilino operada por el editor, consentida por cada inquilino de cliente (sin registro de aplicación por cliente que gestionar ni rotar); ámbito expuesto access_as_user; sin secreto de cliente. El aislamiento entre inquilinos de cliente se aplica mediante la reclamación tid validada más una comprobación de licencia/suscripción

Identidad administrada

El App Service utiliza una identidad administrada asignada por el sistema para autenticarse ante los servicios de backend, de modo que no se almacenan secretos de cliente ni certificados en la aplicación:

  • Azure SQL Database — autenticación exclusiva de Entra (el servidor se crea con prioridad Entra; nunca existe ninguna credencial de SQL)
  • Azure Blob Storage — DefaultAzureCredential (identidad administrada en producción)
  • Microsoft Graph API — ManagedIdentityCredential con permisos de aplicación
  • Recursos opcionales (AI Search, Azure OpenAI, Document Intelligence, Azure AI Speech, las colas de almacenamiento del trabajo de medios) — exclusivamente con identidad administrada, con la autenticación local/por clave deshabilitada; la cuenta de Speech y el trabajo de medios tienen cada uno su propia identidad administrada para el acceso al almacenamiento, y una imagen del trabajador reflejada por el cliente se extrae con la identidad del trabajo mediante una concesión AcrPull

Azure rota automáticamente las credenciales de identidad administrada.

Autorización y RBAC

AccessPoint implementa un modelo de permisos granular y configurable por inquilino, almacenado en Azure SQL y aplicado en la capa de la API en cada solicitud: un catálogo de códigos de permiso atómicos definido por el producto (por ejemplo, request.modify, document.view, redaction.approve, request.view.pii) se agrupa en roles, y cada acción del controlador está condicionada a un código de permiso.

Tipo de rol Roles Notas
Rol de sistema Administrador (el único rol permanente integrado) Resuelve con todos los permisos del catálogo — calculado a partir del catálogo, no sembrado en la base de datos — de modo que nunca puede quedar bloqueado; inmutable e imposible de eliminar.
Roles de relación Revisor, Custodio, Colaborador, Lector, Asesor Paquetes de permisos definidos por el producto, conferidos automáticamente y por destino según las relaciones de trabajo/colaboración (asignación de custodio, tarea de colaborador, revisión, membresía de asesor/lector). No son asignables directamente, están limitados al registro relacionado y nunca incluyen la PII del solicitante.
Roles de inquilino por ejemplo, Coordinador de solicitudes (incluido en el paquete Universal Baseline), además de cualquier rol personalizado Paquetes de permisos totalmente editables, gestionados en Configuración > Roles y permisos. Los roles de coordinador/oficial los define enteramente el inquilino — el Coordinador de solicitudes incluido en el paquete es el rol de facto de oficial de acceso y privacidad.
Rol Ve la PII del solicitante Acceso típico Usuario típico
Administrador Sí Todo (todos los permisos del catálogo) Administrador de TI, propietario del sistema
Coordinador de solicitudes (rol de inquilino) Sí Gestiona solicitudes, asignaciones, tachados, correspondencia Funcionario de acceso y privacidad
Revisor No Lectura + señalar/resolver inquietudes de tachado en solicitudes en revisión Asesor jurídico, control de calidad
Asesor No Lectura + ver/señalar tachados (nunca aplicar ni aprobar) Asesor externo, experto en la materia
Custodio No Sus propias asignaciones y sus documentos Funcionario de registros del departamento
Colaborador No Sus propias tareas y sus documentos Experto en la materia
Lector No Solo lectura en las solicitudes asociadas y los documentos compartidos Supervisión, auditoría

Puntos de aplicación:

  1. Atributos [RequirePermission(code)] — un proveedor de políticas dinámico asigna cada acción del controlador a un código de permiso del catálogo
  2. PermissionService — resuelve los permisos efectivos de quien realiza la llamada (roles permanentes unidos a las concesiones de relación por destino), con comprobaciones limitadas por objeto a nivel de solicitud/documento/asignación/tarea
  3. Comprobaciones de titularidad a nivel de recurso — por ejemplo, un Colaborador solo puede acceder a sus propias tareas; un Custodio, solo a sus propias asignaciones
  4. PiiFilterMiddleware — elimina los campos de PII del solicitante de las respuestas JSON para cualquier usuario que no tenga el permiso de ver la PII del solicitante

Todos los puntos de conexión de escritura de la API aplican los permisos del lado del servidor a nivel de controlador. La reclasificación de documentos tiene en cuenta el alcance — quien recopiló un documento es quien puede reclasificarlo —, y una vez cerrada una solicitud, las modificaciones en su grafo de objetos devuelven HTTP 409, con un pequeño conjunto de excepciones deliberadas (correspondencia posterior al cierre, depuración por retención y reapertura). Las asignaciones de roles permanentes tienen un alcance definido (global, de solicitud, de asignación o de tarea), pueden tener una duración limitada de forma opcional, y los roles de relación nunca se escriben como asignaciones permanentes: se derivan por destino a partir de los registros de trabajo subyacentes. Al primer usuario que accede al sistema se le asigna de forma inicial el rol de Administrador, y una salvaguarda del lado del servidor impide eliminar al último Administrador activo.

Residencia y soberanía de datos

Todos los datos residen en el inquilino de Azure del cliente, en la región seleccionada durante la implementación. Ningún dato se transmite ni se almacena en otras regiones, a menos que el cliente configure explícitamente la replicación geográfica de Azure.

Departamentos federales canadienses: para conocer los requisitos de residencia de datos específicos del GC, la asignación de controles ITSG-33 y el cumplimiento de las GC Cloud Guardrails, consulte la Referencia de controles de seguridad de GC.

Ubicaciones de los datos del cliente

Tipo de datos Ubicación de almacenamiento Controlado por
Registros de solicitudes, datos de usuario, registro de auditoría Azure SQL Database Suscripción de Azure del cliente
Documentos cargados, PDF convertidos y variantes de medios (proxies de reproducción, transcripciones, subtítulos, grabaciones divulgadas) Azure Blob Storage Suscripción de Azure del cliente
Telemetría de la aplicación Application Insights / Log Analytics Suscripción de Azure del cliente
Activos del componente web de SPFx CDN de SharePoint Inquilino de M365 del cliente
Anulación de la URL de la API (opcional) Entidad de almacenamiento del inquilino de SharePoint Inquilino de M365 del cliente (el descubrimiento principal es el punto de conexión de descubrimiento de API del editor)
Índices de búsqueda de IA, resúmenes, salida de OCR, segmentos de transcripción (opcional) Azure AI Search / Azure SQL Suscripción de Azure del cliente

Qué cruza los límites del inquilino

Flujo de datos Dirección Qué se transmite Finalidad
Validación de licencia API → Plataforma del editor Token de identidad administrada de Entra (la reclamación tid del token identifica al inquilino), versión de la API y la propia URL base de la API (autorregistro para el descubrimiento del elemento web) Validar la suscripción activa; la respuesta también incluye la última versión publicada de AccessPoint, de modo que el panel de Configuración inicial pueda mostrar un aviso de "Actualización disponible" (solo números de versión, sin datos de uso ni de casos)
Descubrimiento de la URL de la API SPFx → Plataforma del editor Token Bearer (solo la reclamación de ID de inquilino) Resolver la URL base de la API del cliente cuando no se ha establecido una anulación por entidad de almacenamiento
Notificaciones por correo electrónico API → Microsoft Graph Contenido de correo electrónico mediante Mail.Send Enviar notificaciones desde el buzón compartido
Notificaciones de Teams (opcional — se puede minimizar/eliminar) API → Plataforma del editor → Microsoft Graph Tipo de actividad, GUID del destinatario y del inquilino, texto del título/vista previa de la notificación, nombre del usuario que realiza la acción, número de solicitud, ID del registro (vínculo profundo) Enviar notificaciones de fuente de actividad de Teams (mediante proxy a través de la aplicación empresarial multiinquilino del editor porque sendActivityNotification debe ser llamado por la aplicación propietaria del manifiesto de Teams). Este es el único canal de notificación que sale del inquilino — el correo electrónico y el feed integrado entregan los mismos avisos dentro del inquilino. Consulte Uso compartido de datos de notificación de Teams
Búsqueda de perfil de usuario SPFx → Microsoft Graph Consultas de búsqueda de usuarios Selector de personas, resolución de usuarios
Extracción de la imagen del trabajador de medios (opcional, solo con la imagen predeterminada) Trabajo de Container Apps del cliente → registro de contenedores del editor Etiqueta de la imagen, IP de salida, hora — solo código, sin datos del cliente Iniciar el ejecutor de medios cuando escala desde cero; se elimina reflejando la imagen en el propio registro del cliente

Qué nunca sale del inquilino

  • Los registros de solicitudes y la información personal del solicitante
  • Los documentos cargados, las grabaciones, las transcripciones y las copias divulgadas
  • El historial de auditoría
  • Los datos de configuración (tipos de solicitud, plantillas, numeración)
  • Las asignaciones de roles
  • Las indicaciones y las respuestas de Asistencia con IA: cuando Asistencia con IA está implementada, el recurso de Azure OpenAI se ejecuta en la propia suscripción y región del cliente; Microsoft no entrena modelos con el contenido, y el contenido de las indicaciones y las respuestas no se almacena (solo los metadatos de uso, para el medidor de presupuesto y la divulgación de la participación de la IA de la exportación de auditoría del caso)
  • Las notificaciones integradas en la aplicación y por correo electrónico/Outlook — el feed integrado se sirve desde la propia API del cliente; el correo electrónico se envía desde el propio buzón compartido del cliente mediante Mail.Send. Ninguna de las dos transita por el editor. Solo la fuente de actividad de Teams, que es opcional, envía algún dato fuera del inquilino, y eso también se puede minimizar o eliminar (véase más abajo)

Uso compartido de datos de notificación de Teams (opcional)

De acuerdo con la promesa de soberanía de datos, el único dato del inquilino que sale del límite para las notificaciones es una carga útil opcional de actividad de Teams, y se puede minimizar o eliminar por completo. Cada notificación se entrega en hasta tres canales; dos siempre permanecen dentro del inquilino (el feed integrado, servido desde la API del cliente, y el correo electrónico/Outlook, enviado desde el propio buzón compartido del cliente). La fuente de actividad de Teams es una comodidad: en su modo predeterminado, la API del cliente envía (POST) una pequeña carga útil a la aplicación multiinquilino del editor, que llama a Graph sendActivityNotification (que debe ser invocado por la aplicación propietaria del manifiesto de Teams). El editor no almacena nada de eso y solo registra los GUID del destinatario y del inquilino.

Campos en la carga útil predeterminada de Teams (retransmitida por el editor) y lo que elimina el interruptor Minimizar:

Campo Contiene ¿Datos personales? ¿Se elimina con Minimizar?
tenantId / recipientUserId GUID de Entra del inquilino y del destinatario No — identificadores No (enrutamiento)
activityType Enumeración fija del manifiesto (por ejemplo, assignmentCreated) No No
previewText / topicText Vista previa y título (nombre de la asignación/tarea, texto de la notificación) Potencialmente (texto libre) Sí → marcador de posición
actorName Nombre para mostrar del miembro del personal que realiza la acción Sí — nombre personal Sí → "AccessPoint"
requestNumber Código de referencia de la solicitud No — referencia No (contexto)
relatedEntity + relatedRecordId Tipo de registro + GUID (vínculo profundo) No — identificadores No (vínculo profundo)

La PII del solicitante nunca está en la carga útil — no existe ningún campo de nombre/correo electrónico del solicitante, y las notificaciones a Custodios/Colaboradores tienen la PII oculta desde el origen en cualquier caso. Dos controles restringen esto aún más:

  • Minimizar (Notifications:TeamsMinimalPayload, un interruptor de inquilino) reemplaza previewText, topicText y actorName con marcadores de posición neutros, de modo que los nombres, los títulos y el texto libre nunca salen del inquilino — solo lo hacen los identificadores de enrutamiento/vínculo profundo. No se requiere ningún cambio en el manifiesto.
  • Eliminar (Notifications:TeamsRelayMode=Direct) hace que la API del cliente llame ella misma a Graph sendActivityNotification con su identidad administrada, de modo que ninguna carga útil llega al editor. Requiere el rol de aplicación TeamsActivity.Send en la identidad administrada de la API y que el webApplicationInfo.id del manifiesto de Teams apunte a la propia aplicación del cliente; consulte la Guía de implementación.
Modo Carga útil al editor La PII/el texto libre sale del inquilino Esfuerzo de configuración
Retransmisión predeterminada Sí (los campos anteriores) Nombres/títulos, a menos que se minimice Ninguno
Interruptor Minimizar Sí (solo identificadores) Ninguno Un interruptor
Retransmisión directa (autoalojada) Ninguna Ninguno Concesión de identidad administrada + edición del manifiesto
Teams deshabilitado Ninguna Ninguno (solo correo electrónico + integrado) Ninguno

Cifrado

En tránsito

Conexión Protocolo TLS mínimo
Navegador → App Service HTTPS (aplicado, httpsOnly: true) TLS 1.3
SPFx → App Service HTTPS (aplicado por el contexto de SharePoint) TLS 1.3
App Service → Azure SQL TDS con cifrado (Encrypt=True) TLS 1.2+
App Service → Blob Storage HTTPS (identidad administrada) TLS 1.2+
App Service → Microsoft Graph HTTPS TLS 1.2+

El App Service aplica TLS 1.3 como mínimo en la puerta de enlace (se rechazan TLS 1.0/1.1/1.2); las conexiones salientes a los servicios de backend de Azure negocian TLS 1.2 o superior.

En reposo

Almacén de datos Cifrado Gestión de claves
Azure SQL Database Cifrado transparente de datos (TDE) Claves administradas por Microsoft (predeterminado) o claves administradas por el cliente (CMK)
Azure Blob Storage Cifrado del servicio de almacenamiento (SSE), AES-256 Claves administradas por Microsoft (predeterminado) o claves administradas por el cliente (CMK)
Application Insights Cifrado de la plataforma Claves administradas por Microsoft

A nivel de aplicación

Función Mecanismo
Tokens del visor de documentos ASP.NET Core Data Protection (token de estilo WOPI, TTL de 15 minutos, verificación cruzada de inquilino en cada llamada anónima al visor)
Firmas electrónicas de certificación Hash SHA-256 del firmante y la marca de tiempo, almacenado en campos de auditoría

Privacidad desde el diseño

AccessPoint implementa controles de privacidad estructurales que se aplican en la capa de la API, no solo en la interfaz de usuario.

Middleware de filtrado de información personal

Un middleware a nivel de respuesta intercepta todas las respuestas JSON y elimina los campos de información personal para los usuarios con roles restringidos (custodio, colaborador, lector), del lado del servidor, independientemente de lo que solicite el cliente. Campos eliminados: requestorName, requestorEmail, requestorPhone, requestorAddress, subjectName, subjectDateOfBirth, además de los campos de identidad/contacto del representante y las notas de verificación de identidad.

Ocultamiento de información personal en notificaciones

Cuando se envían notificaciones a custodios o colaboradores, la información personal del solicitante se reemplaza por texto de marcador de posición en el propio contenido de la notificación, incluso si la plantilla de notificación incluye campos de combinación de información personal.

Aislamiento de custodios / colaboradores

  • Los custodios solo ven sus solicitudes asignadas y trabajan a partir de instrucciones depuradas
  • Los colaboradores solo ven sus tareas asignadas
  • Ningún rol puede buscar, explorar ni acceder a solicitudes fuera de su alcance

Registro, monitoreo y auditoría

Application Insights

Toda la telemetría de la API se envía a la instancia de Application Insights del cliente:

Señal Qué se captura
Trazas de solicitudes Método HTTP, ruta, código de estado, duración, ID de correlación
Seguimiento de dependencias Consultas SQL, operaciones de Blob, llamadas a la API de Graph (duración, éxito/error)
Excepciones Excepciones no controladas con seguimientos de pila
Métricas personalizadas Tiempos de procesamiento de solicitudes, duraciones de conversión de documentos, tiempos de procesamiento de medios

Registro de auditoría

AccessPoint mantiene un registro de auditoría integral en la tabla AuditHistory (Azure SQL), que registra el tipo de entidad, el ID de entidad, la acción (Crear, Actualizar, Eliminar, Cambio de estado), el nombre del campo, los valores anteriores/nuevos, un motivo de cambio opcional (capturado en las transiciones de estado como el cierre y la reapertura), el usuario autenticado y una marca de tiempo UTC. Los registros de auditoría son inmutables: no se pueden modificar ni eliminar a través de la API.

Libro mayor de auditoría encadenado por hash

Además del registro de auditoría a nivel de campo, un AuditLedger de solo adición y a prueba de alteraciones (cadena de hash SHA-256) registra las acciones en todos los módulos. La integridad se puede verificar del lado del servidor, y se puede generar una exportación de auditoría del caso (anteriormente «paquete de evidencia») lista para uso judicial para una solicitud.

Concurrencia optimista

Las entidades de alta contención (Requests, Documents, CustodianAssignments) llevan cada una un token de concurrencia ROWVERSION de SQL Server. El cliente repite la versión de fila al actualizar; si otro proceso de escritura ha modificado la fila mientras tanto, el guardado se rechaza con HTTP 409 ("Concurrent edit detected") en lugar de sobrescribirlo silenciosamente.

Registro de depuración por retención

Un único motor RetentionService dispone de los registros que han superado su plazo en cinco registros: solicitudes, evaluaciones, incidentes, quejas y riesgos de privacidad independientes, impulsado por un RetentionPeriodMonths + RetentionStartPoint por tipo (NULL = conservar indefinidamente, el valor predeterminado). Los registros que no deben superar su plazo quedan excluidos por construcción (una evaluación En vigor, un riesgo Aceptado, un riesgo vinculado a un caso), y un registro expirado del que todavía depende otro caso abierto se rechaza del lado del servidor; la elegibilidad se vuelve a evaluar en el momento de la purga. Cuando se purga un registro, el motor elimina los blobs de documentos, los PDF convertidos, las anotaciones y los paquetes de exportación de Blob Storage, además de los registros de la base de datos. La tabla RetentionPurgeLog registra qué se eliminó, cuándo y por quién — EntityName identifica de qué registro proviene, junto con una instantánea de su número, tipo, fecha de cierre y cantidad de documentos —, un rastro de nivel de cumplimiento que sobrevive a la eliminación de los datos y que nunca se purga a sí mismo.

Log Analytics y alertas

Application Insights está respaldado por un área de trabajo de Log Analytics con retención configurable (90 días de forma predeterminada; configurable entre 30 y 730 días). Los datos se pueden exportar a Microsoft Sentinel o a un SIEM existente. La implementación de Bicep incluye dos alertas de métricas predeterminadas en el App Service:

Alerta Gravedad Condición Ventana
Errores del servidor 2 (Advertencia) Recuento de HTTP 5xx > 5 5 minutos
Latencia alta 3 (Informativo) Tiempo de respuesta promedio > 5 segundos 15 minutos

Cuando se proporciona una dirección de correo electrónico de alerta en el momento de la implementación, se crean junto a ellas alertas de consulta programada para errores de autenticación de SQL, fallos del trabajo de medios y un estancamiento de la cola de medios. Los clientes pueden personalizar los umbrales y agregar grupos de acción (correo electrónico, SMS, webhook) en Azure Portal.