Visão geral da arquitetura técnica para equipas de TI que avaliam o AccessPoint
Last updated: August 09, 2026 by Steve
Arquitetura Técnica
Este documento fornece uma visão geral técnica da plataforma AccessPoint para arquitetos de soluções, engenheiros de cibersegurança e diretores de TI que avaliam o produto para a sua organização. É elaborado a partir do AccessPoint Solution Architecture Guide (v2.0.67).
Visão Geral da Plataforma
O AccessPoint é uma plataforma de gestão de acesso à informação e privacidade construída sobre o Microsoft 365 e o Azure. Começou como uma ferramenta de gestão de pedidos de acesso do titular (SAR) e evoluiu para uma suite integrada de ATIP/gabinete de privacidade que cobre todo o ciclo de vida dos pedidos e o programa de privacidade circundante. Funciona inteiramente dentro do tenant Microsoft 365 e Azure da própria organização: não existem servidores externos, bases de dados ou dependências de cloud de terceiros em tempo de execução, e todos os dados permanecem no seu ambiente, sob o seu controlo.
A plataforma está organizada em módulos que partilham uma espinha dorsal única de identidade, RBAC, notificações, auditoria e relatórios:
- Pedidos de acesso — receção ATI/FOIA/GDPR, atribuição de tarefas a custodians, revisão e redação de documentos, preparação do pacote de resposta e relatórios estatutários
- Avaliações de privacidade — um motor configurável de avaliações PIA/AIA/Segurança
- Incidentes e violações de privacidade — receção, contenção, avaliação de risco de dano e fluxos de trabalho de notificação de violações
- Reclamações e recursos — ciclo de vida da reclamação com partes, prazos legais e investigação
- Registo de riscos de privacidade — riscos ao estilo ISO 31000, planos de tratamento e indicadores-chave de risco
- Registos de processamento (ROPA) — registos do Artigo 30.º do GDPR e exportação de registo
- Registo de compromissos — compromissos de privacidade monitorizados com cadência e pontos de verificação
- AI Assist (opcional) — sugestões e elaboração de rascunhos com base em Azure OpenAI, executadas inteiramente na própria subscrição do cliente: resumos de documentos, sugestões de redação por IA, elaboração de rascunhos fundamentada, triagem de admissão, pré-preenchimento de respostas de avaliação, pesquisa semântica e deteção de duplicados, um assistente por caso sensível ao estatuto (Ask AccessPoint — citações clicáveis, conversas guardadas, um modo A Minha Carteira), respostas de dados "Ask AccessPoint", um guia de procedimentos da jurisdição que fundamenta respostas de processo, tradução automática e um resumo diário — tudo opt-in por tenant, registado apenas com metadados, com divulgação de atividade de IA por registo
Todos os módulos são controlados por pacotes jurisdicionais, sem dados estáticos pré-carregados.
Características principais:
- Nativo do tenant — implanta-se como uma solução SharePoint Framework (SPFx) e serviços Azure PaaS dentro do seu tenant existente
- Sem dependências do Power Platform — não é necessário licenciamento de Dataverse, Power Automate ou Power Apps
- Soberania dos dados — todos os dados residem na geografia configurada do seu tenant Azure
- Sem acesso do fornecedor em tempo de execução — o editor não pode aceder aos seus dados durante a operação normal
- Licenciamento de tarifa fixa — licenciamento departamental sem medição por utilizador
- Privacidade por conceção — as funções de custodian e contributor estão estruturalmente isoladas do PII do requerente e do titular dos dados
- Configuração em vez de código — tipos de pedido, códigos de isenção e campos de escolha são orientados por dados
- Multilingue por conceção — um sistema de tradução de três níveis com suporte para 11 idiomas
Diagrama de Arquitetura
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 │
│ │ │ └─ Syncfusion document conversion │
│ │ │ │
│ SharePoint Tenant Storage │ │ Azure SQL Database │
│ (API URL override, │ │ (222 tables, 3,410 fields) │
│ optional) │ │ │
└──────────────────────────────┘ │ Azure Blob Storage │
│ (Document files) │
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 │ └─────────────────────────────────────────┘
└──────────────────────┘ ← M365 record capture (delegated + app-only Copilot)
Inventário de Componentes
| Componente | Tecnologia | Implantado Em | Finalidade |
|---|---|---|---|
| SPFx Web Part | TypeScript, React 17, Fluent UI 8, SPFx 1.23.2 | SharePoint Online / Teams do cliente | Interface do utilizador para todas as funções |
| Teams App | Teams manifest v1.19, versão sincronizada com a solução SPFx e ApiVersion.Current (carimbada pela CI) |
Centro de Administração Teams do cliente | Aplicação pessoal, separador configurável, notificações no feed de atividades com ligação direta |
| Web API | C# / ASP.NET Core 10, .NET 10 (~103 controladores, ~124 interfaces de serviço) | Azure App Service (Linux) do cliente | Lógica de negócio, acesso a dados, processamento de documentos |
| Base de Dados | SQL Server (DacPac) | Azure SQL Database do cliente | Armazenamento de dados relacional (221 tabelas, 3.410 campos) |
| Blob Storage | Azure Blob Storage | Conta de Armazenamento Azure do cliente | Armazenamento de ficheiros de documentos |
| Monitorização | Application Insights + Log Analytics | Subscrição Azure do cliente | Telemetria, diagnósticos, alertas |
| AI Search (opcional) | Azure AI Search | Subscrição Azure do cliente | Pesquisa de texto integral do conteúdo dos documentos, mais pesquisa vetorial semântica (documentos + índice de casos); aprovisionado apenas quando deployAiSearch=true |
| Azure OpenAI (opcional) | Azure OpenAI Service | Subscrição Azure do cliente | AI Assist — elaboração de rascunhos fundamentada, sugestões, pesquisa semântica, assistente de caso (Ask AccessPoint); autenticação por identidade gerida (sem chaves de API), aprovisionado apenas quando o AI Assist está implantado |
| Document Intelligence (opcional) | Azure AI Document Intelligence (prebuilt-read) | Subscrição Azure do cliente | OCR para digitalizações apenas como imagem, alimentando a pesquisa de conteúdo, a deteção de duplicados, os resumos e as sugestões de redação; autenticação por identidade gerida, aprovisionado apenas quando deployDocumentIntelligence=true |
O Que o Editor Opera
| Serviço | Finalidade |
|---|---|
| Realizer Platform | Validação de licença, proxy de notificações Teams, descoberta do URL da API para o SPFx, o router inteligente do separador pessoal do Teams, e a página Finish Setup pós-implantação (sem transmissão de dados de caso do cliente) |
| AppSource Listing | Distribuição do pacote SPFx |
| Modelo de implantação | Modelo Bicep/ARM para o backend do Azure, implantado com um clique a partir do portal do Azure na assinatura do cliente |
| Teams App Package | Distribuição do manifesto Teams (sideload ou loja de aplicações da organização) |
Nenhum dado do cliente é transmitido ou armazenado por qualquer serviço operado pelo editor.
Módulos Funcionais
Todos os módulos funcionam dentro da mesma Web API / web part SPFx e partilham uma única espinha dorsal de identidade, RBAC, comentários, notificações, O Meu Dia, auditoria, horas, fluxo de trabalho de revisão e relatórios. Cada um é orientado por dados através de Pacotes Jurisdicionais.
| Módulo | Resumo |
|---|---|
| Pedidos (ATIP/SAR) | Receção do pedido → atribuição de tarefas a custodians → recolha → resposta. Tipos, estados, numeração, calendários e SLAs configuráveis. |
| Documentos e Redação | Espaço de trabalho de documentos com facetas: etiquetas, pastas, famílias de email, acompanhamento de leitura, vistas guardadas, deteção de duplicados baseada em decisões, pré-visualização Syncfusion, pipeline de redação com isenções e round-trip XFDF, padrões de localizar e redigir, sugestões de redação baseadas em regras e por IA, reutilização de redações de pedidos anteriores, preparação do pacote de resposta com mesclagem de papel timbrado. |
| Requerentes / Contactos | Identidade de requerente reutilizável de primeira classe, controlo do fluxo de receção, espaço de trabalho de conduta frívola-e-vexatória, taxas e verificação, fusão; consultas; compositor de correspondência com firewall de PII. |
| Avaliações de Privacidade | Motor configurável PIA/AIA/Segurança: modelos, questionários de triagem, atribuição de secção, pontuação/níveis, registo de riscos, resumos de encerramento/regulador. |
| Incidentes de Privacidade / Violações | Receção de incidentes, contenção, risco de dano, regras de notificação de violações por regime, remediação. |
| Reclamações e Recursos | Ciclo de vida da reclamação: partes, prazos legais, admissibilidade, investigação, revisão de alegações. |
| Risco e Compromissos | Registo de riscos ISO 31000 com apetite de risco, KRIs e tarefas de tratamento; registo de compromissos com cadência e pontos de verificação. |
| ROPA / Sujeitos de Privacidade | Programas/sistemas reutilizáveis com registos do Artigo 30.º do GDPR e exportação de registo. |
| Revisões | Motor configurável de revisão e aprovação sequencial/paralela, reutilizado em todas as entidades de processo. |
| Relatórios e Auditoria | Relatórios fixos, criador de relatórios personalizados orientado por catálogo (dashboards do Report Studio), relatórios estatísticos anuais, painéis de SLA/gestão, livro-razão de auditoria em cadeia de hash e exportações de auditoria de caso prontas para tribunal. |
| AI Assist (opcional) | Sugestões e elaboração de rascunhos com base em Azure OpenAI: resumos, sugestões de redação, elaboração de rascunhos fundamentada, triagem de admissão, sugestões para custodians, pré-preenchimento e verificações de consistência de avaliações, pesquisa semântica e duplicados, um assistente de caso sensível ao estatuto — Ask AccessPoint (citações clicáveis, preparação de rascunhos, conversas guardadas) — mais um assistente de carteira/portefólio (modo A Minha Carteira), um guia de procedimentos da jurisdição alimentado por pacotes jurisdicionais, relatórios do Ask AccessPoint, resumo diário e resumo de acompanhamento, portefólio de riscos e análise de conduta. Comutadores de tenant por funcionalidade; registo apenas com metadados (o assistente pode adicionalmente guardar transcrições privadas do proprietário). |
| Configuração e Plataforma | Importação de pacotes jurisdicionais (1 pacote Universal Baseline + 106 pacotes jurisdicionais, incluindo estados automáticos de recusa presumida delimitados por tipo e fundamentação de IA opcional), definições do tenant, funções/permissões personalizadas, comutadores de funcionalidades, campos personalizados, tabelas de tradução em 11 idiomas. |
Modelo de Implantação
O AccessPoint utiliza um modelo de implantação dividido. O web part SPFx é instalado a partir do Microsoft AppSource (ou de um App Catalog do tenant), o pacote da aplicação Teams é instalado via sideload ou pela loja de aplicações da organização, e o backend Azure é implantado na própria subscrição do cliente através de um de dois métodos:
- Portal Azure (recomendado) — implantação num só clique de todos os recursos Azure (App Service, SQL, Blob Storage, Application Insights, além dos recursos opcionais AI Search / Azure OpenAI / Document Intelligence) via ARM/Bicep. A API é implantada por
zipdeploydurante a implantação ARM; o código é transferido uma única vez a partir do CDN do editor e armazenado no App Service do cliente, sem dependência externa em tempo de execução. Uma escolha obrigatória de tipo de implantação protege as reimplantações: Nova instalação cria o servidor SQL com prioridade Entra (o principal que efetua a implantação torna-se o administrador Entra inicial, com autenticação exclusiva do Entra desde o início — nunca existe qualquer credencial SQL), enquanto Atualizar instalação existente preserva as definições de aplicação do operador e não altera o acesso à base de dados. O cliente mantém a propriedade total do grupo de recursos. - Modelo Bicep + script PowerShell (manual) — para organizações com controlo de alterações rigoroso. Um botão Deploy to Azure ou o
Deploy-AccessPoint.ps1implanta a infraestrutura, reafirma a autenticação exclusiva do Entra no SQL (uma salvaguarda — o modelo já a aplica), concede permissões Microsoft Graph à identidade gerida (a alternativa com script à página Finish Setup do editor), configura a substituição opcional do URL da API através da storage entity do SharePoint, e aprova os pedidos de permissão da API SPFx. Cada etapa pode ser omitida de forma independente.
As permissões do Graph são normalmente concedidas através da página Finish Setup do editor — a implantação emite um output finishSetupUrl que um administrador Entra do cliente abre para conceder todas as permissões da identidade gerida numa única passagem idempotente (executar novamente após atualizações, para obter as novas permissões).
A implantação é reforçada em termos de segurança por predefinição: TLS 1.3, FTPS desativado, autenticação básica SCM/FTP desativada, HTTP/2 ativado, e o Microsoft Defender for SQL ativado por predefinição (com opção de exclusão). A API inclui o seu DacPac de base de dados e aplica-o no arranque através de um serviço de migração que utiliza DacServices.Deploy(upgradeExisting: true) — uma operação nula num esquema já atualizado, e um delta aditivo e não destrutivo após uma alteração de esquema (BlockOnPossibleDataLoss = true, DropObjectsNotInSource = false). O resultado da migração é exposto através de /api/health. Após a implantação, um administrador concede consentimento para a aplicação empresarial Realizer (notificações Teams), configura a caixa de correio de envio e importa um pacote jurisdicional.
Autenticação e Identidade
O AccessPoint utiliza o Microsoft Entra ID como o seu único fornecedor de identidade. Não existem contas de utilizador ou palavras-passe específicas da aplicação. O web part SPFx adquire um JWT para a audiência da API via AadHttpClient; a API valida o emissor, a audiência, a assinatura e a validade em cada pedido. As políticas de MFA e Conditional Access configuradas no tenant aplicam-se na íntegra.
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 |
|---|---|
| Fornecedor de Identidade | Microsoft Entra ID (Azure AD) |
| Protocolo | OAuth 2.0 / OpenID Connect |
| Tipo de Token | JWT Bearer |
| Audiência | api://<client-id> e <client-id> (ambos os tokens v1 e v2 são aceites) |
| Emissor | O emissor de qualquer tenant Entra — são validados os formatos https://login.microsoftonline.com/{tenantId}/v2.0 (v2) e https://sts.windows.net/{tenantId}/ (v1); a claim tid do token determina o âmbito por tenant |
| Registo da Aplicação | Aplicação multi-tenant operada pelo editor, consentida por cada tenant de cliente (sem registo de aplicação por cliente para gerir ou rodar); âmbito exposto access_as_user; sem segredo de cliente. O isolamento entre tenants de clientes é garantido pela claim tid validada, mais uma verificação de licença/subscrição |
Identidade Gerida
O App Service utiliza uma identidade gerida atribuída pelo sistema para autenticação nos serviços de backend, pelo que não são armazenados segredos de cliente ou certificados na aplicação:
- Azure SQL Database — autenticação exclusiva do Entra (o servidor é criado com prioridade Entra; nunca existe qualquer credencial SQL)
- Azure Blob Storage —
DefaultAzureCredential(identidade gerida em produção) - Microsoft Graph API —
ManagedIdentityCredentialcom permissões de aplicação - Recursos de IA opcionais (AI Search, Azure OpenAI, Document Intelligence) — apenas por identidade gerida, com autenticação local/por chave desativada
As credenciais da identidade gerida são rotacionadas automaticamente pelo Azure.
Autorização e RBAC
O AccessPoint implementa um modelo de permissões granular e configurável por tenant, armazenado no Azure SQL e aplicado na camada da API em cada pedido: um catálogo, definido pelo produto, de códigos de permissão atómicos (por exemplo, request.modify, document.view, redaction.approve, request.view.pii) é agrupado em funções, e cada ação do controlador é condicionada a um código de permissão.
| Tipo de função | Funções | Notas |
|---|---|---|
| Função de sistema | Administrator (a única função permanente incorporada) | Resolve para todas as permissões do catálogo — calculada a partir do catálogo, e não semeada na base de dados — pelo que nunca pode ficar bloqueada; imutável e não eliminável. |
| Funções de relação | Reviewer, Custodian, Contributor, Reader, Advisor | Conjuntos de permissões definidos pelo produto, conferidos automaticamente e por alvo, através de relações de trabalho/colaboração (atribuição de custodian, tarefa de contributor, revisão, associação de advisor/reader). Não são atribuíveis diretamente, têm âmbito limitado ao registo relacionado, e nunca incluem PII do requerente. |
| Funções de tenant | por exemplo, Request Coordinator (fornecida através do pacote Universal Baseline), além de quaisquer funções personalizadas | Conjuntos de permissões totalmente editáveis, geridos em Settings > Roles & Permissions. As funções de coordenador/responsável são inteiramente definidas pelo tenant — o Request Coordinator fornecido pelo pacote é a função de facto de responsável por acesso e privacidade. |
| Função | Vê PII do Requerente | Acesso Típico | Utilizador Típico |
|---|---|---|---|
| Administrator | Sim | Tudo (todas as permissões do catálogo) | Administrador de TI, proprietário do sistema |
| Request Coordinator (função de tenant) | Sim | Gere pedidos, atribuições, redações, correspondência | Responsável de acesso e privacidade |
| Reviewer | Não | Leitura + assinalar/resolver questões de redação em pedidos em revisão | Assessor jurídico, QA |
| Advisor | Não | Leitura + ver/assinalar redações (nunca aplicar ou aprovar) | Assessor consultor, especialista na matéria |
| Custodian | Não | Próprias atribuições e respetivos documentos | Responsável de registos do departamento |
| Contributor | Não | Próprias tarefas e respetivos documentos | Especialista na matéria |
| Reader | Não | Apenas leitura nos pedidos associados e documentos partilhados | Supervisão, auditoria |
Pontos de aplicação:
- Atributos
[RequirePermission(code)]— um fornecedor de políticas dinâmico associa cada ação do controlador a um código de permissão do catálogo PermissionService— resolve as permissões efetivas do autor do pedido (funções permanentes unidas às concessões de relação por alvo), com verificações delimitadas ao objeto, ao nível de pedido/documento/atribuição/tarefa- Verificações de propriedade ao nível do recurso — por exemplo, um Contributor só pode aceder às suas próprias tarefas; um Custodian apenas às suas próprias atribuições
PiiFilterMiddleware— remove os campos de PII do requerente das respostas JSON para qualquer autor de pedido que não detenha a permissão view-requestor-PII
Todos os endpoints de escrita da API aplicam permissões do lado do servidor ao nível do controlador. A reclassificação de documentos é sensível ao âmbito — o utilizador que recolheu um documento é o único que o pode reclassificar — e, uma vez encerrado um pedido, as mutações no seu grafo de objetos devolvem HTTP 409, com um pequeno conjunto de exceções deliberadas (correspondência pós-encerramento, purga de retenção e reabertura). As atribuições de funções permanentes têm âmbito (global, do pedido, da atribuição ou da tarefa), podem ter um prazo de validade, e as funções de relação nunca são escritas como atribuições permanentes — são derivadas por alvo a partir dos registos de trabalho subjacentes. O primeiro utilizador a aceder ao sistema é inicializado com a função Administrator, e uma salvaguarda do lado do servidor impede a remoção do último Administrator ativo.
Residência e Soberania dos Dados
Todos os dados residem no tenant Azure do cliente, na região selecionada durante a implantação. Nenhum dado é transmitido ou armazenado noutras regiões, a menos que o cliente configure explicitamente a geo-replicação Azure.
Departamentos federais canadianos: Para requisitos de residência de dados específicos do GC, mapeamento de controlos ITSG-33 e conformidade com os GC Cloud Guardrails, consulte a Referência de Controlos de Segurança do GC.
Localizações dos Dados do Cliente
| Tipo de Dados | Localização de Armazenamento | Controlado Por |
|---|---|---|
| Registos de pedidos, dados de utilizadores, registo de auditoria | Azure SQL Database | Subscrição Azure do cliente |
| Documentos carregados | Azure Blob Storage | Subscrição Azure do cliente |
| Telemetria da aplicação | Application Insights / Log Analytics | Subscrição Azure do cliente |
| Recursos do web part SPFx | SharePoint CDN | Tenant M365 do cliente |
| Substituição do URL da API (opcional) | SharePoint Tenant Storage Entity | Tenant M365 do cliente (a descoberta principal é o endpoint de descoberta de API do editor) |
| Índices de pesquisa de IA, resumos, resultados de OCR (opcional) | Azure AI Search / Azure SQL | Subscrição Azure do cliente |
O Que Cruza os Limites do Tenant
| Fluxo de Dados | Direção | O Que É Transmitido | Finalidade |
|---|---|---|---|
| Validação de licença | API → Publisher Platform | Token de identidade gerida do Entra (a claim tid do token identifica o tenant), versão da API, e o próprio URL base da API (auto-registo para descoberta pelo web part) |
Validar subscrição ativa; a resposta também transporta a versão mais recente publicada do AccessPoint, para que o painel de Configuração possa mostrar um aviso de "Atualização disponível" (apenas números de versão — sem dados de utilização ou de caso) |
| Descoberta do URL da API | SPFx → Publisher Platform | Token Bearer (apenas com a claim de ID do tenant) | Resolver o URL base da API do cliente quando não está definida nenhuma substituição por storage entity |
| Notificações por email | API → Microsoft Graph | Conteúdo do email via Mail.Send |
Enviar notificações a partir da caixa de correio partilhada |
| Notificações Teams (opcional — comutável / elimináveis) | API → Publisher Platform → Microsoft Graph | Tipo de atividade, GUIDs do destinatário + tenant, título/texto de pré-visualização da notificação, nome do utilizador que praticou a ação, número do pedido, id do registo (ligação direta) | Enviar notificações no feed de atividades Teams (encaminhadas através da aplicação empresarial multi-tenant do editor, porque sendActivityNotification tem de ser chamado pela aplicação que detém o manifesto Teams). Este é o único canal de notificação que sai do tenant — o email e o feed na aplicação entregam os mesmos avisos dentro do tenant. Consulte Partilha de Dados de Notificação do Teams |
| Pesquisa de perfil de utilizador | SPFx → Microsoft Graph | Consultas de pesquisa de utilizadores | Seletor de pessoas, resolução de utilizadores |
O Que Nunca Sai do Tenant
- Registos de pedidos e PII do requerente
- Documentos carregados
- Histórico de auditoria
- Dados de configuração (tipos de pedido, modelos, numeração)
- Atribuições de funções
- Prompts e respostas do AI Assist — quando o AI Assist está implantado, o recurso Azure OpenAI é executado na própria subscrição e região do cliente; a Microsoft não treina modelos com o conteúdo, e o conteúdo dos prompts e das respostas não é armazenado (apenas metadados de utilização, para o medidor de orçamento e para a divulgação do envolvimento de IA da exportação de auditoria do caso)
- Notificações na aplicação e por email/Outlook — o feed na aplicação é servido a partir da própria API do cliente; o email é enviado a partir da própria caixa de correio partilhada do cliente via
Mail.Send. Nenhuma delas transita pelo editor. Só o feed de atividades do Teams, que é opcional, envia algum dado para fora do tenant, e mesmo esse pode ser minimizado ou eliminado (abaixo)
Partilha de Dados de Notificação do Teams (Opcional)
Em consonância com a promessa de soberania de dados, o único dado do tenant que sai do limite para efeitos de notificações é um payload de atividade do Teams opcional — e este pode ser minimizado ou eliminado por completo. Cada notificação é entregue em até três canais; dois estão sempre dentro do tenant (o feed na aplicação, servido a partir da API do cliente, e o email/Outlook, enviado a partir da própria caixa de correio partilhada do cliente). O feed de atividades do Teams é uma comodidade: no seu modo predefinido, a API do cliente envia (POST) um pequeno payload para a aplicação multi-tenant do editor, que chama o sendActivityNotification do Graph (que tem de ser invocado pela aplicação que detém o manifesto do Teams). O editor não armazena nada disso e regista apenas os GUIDs do destinatário e do tenant.
Campos no payload predefinido (relay do editor) do Teams — e o que o interruptor Minimizar remove:
| Campo | Contém | Dados pessoais? | Removido por Minimizar? |
|---|---|---|---|
tenantId / recipientUserId |
GUIDs Entra do tenant + destinatário | Não — identificadores | Não (encaminhamento) |
activityType |
Enum fixo do manifesto (por exemplo, assignmentCreated) |
Não | Não |
previewText / topicText |
Pré-visualização + título (nome da atribuição/tarefa, texto da notificação) | Potencialmente (texto livre) | Sim → indicador de espaço reservado |
actorName |
Nome de exibição do colaborador que praticou a ação | Sim — nome pessoal | Sim → "AccessPoint" |
requestNumber |
Código de referência do pedido | Não — referência | Não (contexto) |
relatedEntity + relatedRecordId |
Tipo de registo + GUID (ligação direta) | Não — identificadores | Não (ligação direta) |
O PII do requerente nunca está no payload — não existe qualquer campo de nome/email do requerente, e as notificações de Custodian/Contributor têm o PII removido a montante, independentemente disso. Dois controlos restringem isto ainda mais:
- Minimizar (
Notifications:TeamsMinimalPayload, um interruptor de tenant) substituipreviewText,topicTexteactorNamepor indicadores de espaço reservado neutros, para que nomes, títulos e texto livre nunca saiam do tenant — só saem os identificadores de encaminhamento/ligação direta. Não é necessária qualquer alteração ao manifesto. - Eliminar (
Notifications:TeamsRelayMode=Direct) faz com que a API do cliente chame osendActivityNotificationdo Graph diretamente, com a sua identidade gerida, de modo que nenhum payload chega ao editor. Requer a função de aplicaçãoTeamsActivity.Sendna identidade gerida da API e owebApplicationInfo.iddo manifesto do Teams apontado para a própria aplicação do cliente — consulte o Guia de Implantação.
| Modo | Payload para o editor | PII / texto livre sai do tenant | Esforço de configuração |
|---|---|---|---|
| Relay predefinido | Sim (campos acima) | Nomes/títulos, salvo se minimizado | Nenhum |
| Interruptor Minimizar | Sim (apenas identificadores) | Nenhum | Um interruptor |
| Relay Direto (auto-hospedado) | Nenhum | Nenhum | Concessão de MI + edição do manifesto |
| Teams desativado | Nenhum | Nenhum (apenas email + na aplicação) | Nenhum |
Encriptação
Em Trânsito
| Ligação | Protocolo | TLS Mínimo |
|---|---|---|
| Browser → App Service | HTTPS (aplicado, httpsOnly: true) |
TLS 1.3 |
| SPFx → App Service | HTTPS (aplicado pelo contexto SharePoint) | TLS 1.3 |
| App Service → Azure SQL | TDS com encriptação (Encrypt=True) |
TLS 1.2+ |
| App Service → Blob Storage | HTTPS (identidade gerida) | TLS 1.2+ |
| App Service → Microsoft Graph | HTTPS | TLS 1.2+ |
O App Service aplica o TLS 1.3 como mínimo na front door (TLS 1.0/1.1/1.2 rejeitados); as ligações de saída para os serviços de backend Azure negoceiam TLS 1.2 ou superior.
Em Repouso
| Armazenamento de Dados | Encriptação | Gestão de Chaves |
|---|---|---|
| Azure SQL Database | Transparent Data Encryption (TDE) | Chaves geridas pela Microsoft (predefinição) ou chaves geridas pelo cliente (CMK) |
| Azure Blob Storage | Storage Service Encryption (SSE), AES-256 | Chaves geridas pela Microsoft (predefinição) ou chaves geridas pelo cliente (CMK) |
| Application Insights | Encriptação da plataforma | Chaves geridas pela Microsoft |
Ao Nível da Aplicação
| Funcionalidade | Mecanismo |
|---|---|
| Tokens do visualizador de documentos | ASP.NET Core Data Protection (token estilo WOPI, TTL de 15 minutos, verificação cruzada do tenant em cada chamada anónima do visualizador) |
| Assinaturas eletrónicas de atestação | Hash SHA-256 do signatário e carimbo temporal armazenado em campos de auditoria |
Privacidade por Conceção
O AccessPoint implementa controlos estruturais de privacidade que são aplicados na camada da API, não apenas na interface.
Middleware de Filtro PII
Um middleware ao nível da resposta intercepta todas as respostas JSON e remove os campos de PII para qualquer autor de pedido que não detenha a permissão view-requestor-PII (Custodians, Contributors, Readers, Reviewers e Advisors nunca a detêm), do lado do servidor, independentemente do que o cliente solicita. Campos removidos: requestorName, requestorEmail, requestorPhone, requestorAddress, subjectName, subjectDateOfBirth, além dos campos de identidade/contacto do representante e das notas de verificação de identidade.
Ocultação de PII nas Notificações
Quando as notificações são enviadas a Custodians ou Contributors, o PII do requerente é substituído por texto de espaço reservado no próprio conteúdo da notificação — mesmo que o modelo de notificação inclua campos de fusão de PII.
Isolamento de Custodian/Contributor
- Os Custodians veem apenas os pedidos que lhes foram atribuídos e trabalham a partir de instruções desidentificadas
- Os Contributors veem apenas as tarefas que lhes foram atribuídas
- Nenhuma destas funções pode pesquisar, navegar ou aceder a pedidos fora do seu âmbito
Registo, Monitorização e Auditoria
Application Insights
Toda a telemetria da API é enviada para a instância Application Insights do cliente:
| Sinal | O Que É Capturado |
|---|---|
| Rastreios de pedidos | Método HTTP, caminho, código de estado, duração, ID de correlação |
| Rastreio de dependências | Consultas SQL, operações Blob, chamadas Graph API (duração, sucesso/falha) |
| Exceções | Exceções não tratadas com stack traces |
| Métricas personalizadas | Tempos de processamento de pedidos, durações de conversão de documentos |
Registo de Auditoria
O AccessPoint mantém um registo de auditoria abrangente na tabela AuditHistory (Azure SQL), que regista o tipo de entidade, o ID da entidade, a ação (Create, Update, Delete, StatusChange), o nome do campo, os valores antigo/novo, um motivo de alteração opcional (capturado em transições de estado como encerramento e reabertura), o utilizador autenticado e um carimbo temporal UTC. Os registos de auditoria são imutáveis — não podem ser modificados ou eliminados através da API.
Livro-Razão de Auditoria em Cadeia de Hash
Para além do registo de auditoria ao nível dos campos, um AuditLedger à prova de adulteração e só de inserção (cadeia de hash SHA-256) regista ações em todos os módulos. A integridade pode ser verificada do lado do servidor, e é possível exportar uma exportação de auditoria do caso (anteriormente "pacote de provas") pronta para tribunal relativa a um pedido.
Concorrência Otimista
As entidades de elevada contenção (Requests, Documents, CustodianAssignments) têm cada uma um token de concorrência ROWVERSION do SQL Server. O cliente reenvia a versão da linha na atualização; se outro processo tiver alterado a linha entretanto, a gravação é rejeitada com HTTP 409 ("Concurrent edit detected") em vez de sobrescrever silenciosamente.
Registo de Purga de Retenção
Um único motor RetentionService elimina registos expirados em cinco registos — pedidos, avaliações, incidentes, reclamações e riscos de privacidade autónomos — orientado por um RetentionPeriodMonths + RetentionStartPoint por tipo (NULL = manter indefinidamente, a predefinição). Os registos que não devem expirar são excluídos por construção (uma avaliação Em Vigor, um risco Aceite, um risco associado a um caso), e um registo expirado de que outro caso aberto ainda dependa é recusado do lado do servidor; a elegibilidade é reavaliada no momento da purga. Quando um registo é purgado, o motor elimina os blobs de documentos, os PDFs convertidos, as anotações e os pacotes de exportação do Blob Storage, além dos registos da base de dados. O RetentionPurgeLog regista o que foi eliminado, quando e por quem — o EntityName identifica de que registo provém, juntamente com um instantâneo do seu número, tipo, data de encerramento e número de documentos — uma trilha de nível de conformidade que sobrevive à remoção dos dados e que nunca é, ela própria, purgada.
Log Analytics e Alertas
O Application Insights é suportado por um espaço de trabalho Log Analytics com retenção configurável (predefinição de 90 dias; configurável entre 30 e 730 dias). Os dados podem ser exportados para o Microsoft Sentinel ou para um SIEM existente. A implantação Bicep inclui dois alertas de métricas predefinidos no App Service:
| Alerta | Gravidade | Condição | Janela |
|---|---|---|---|
| Erros do Servidor | 2 (Aviso) | Contagem HTTP 5xx > 5 | 5 minutos |
| Alta Latência | 3 (Informativo) | Tempo médio de resposta > 5 segundos | 15 minutos |
Os clientes podem personalizar limiares e adicionar grupos de ação (email, SMS, webhook) no Portal Azure.