/v1/governance:
- Mapeamentos de ator: vincula IDs de ator opacos a PII, com operações de pseudonimização e exclusão.
- Arquivos: lista arquivos de log de auditoria concluídos e baixa objetos de arquivo do armazenamento de objetos.
- Logs de auditoria: histórico imutável e encadeado por hash, com verificação de integridade somente leitura.
AUTH_PROVIDER=plugin-auth no modo multi-tenant, a identidade do tenant vem do JWT. O Matcher rejeita a inicialização quando MULTI_TENANT_ENABLED=true e PLUGIN_AUTH_ENABLED=false.
Toda rota de governança fica restrita ao tenant do chamador. As leituras de mapeamento de ator têm dois níveis de autorização: a listagem, que omite
displayName e email, e a leitura de desanonimização de registro único. Essa separação mantém a resolução de identidade apartada do acesso de navegação.Mapeamentos de ator
Um mapeamento de ator vincula um
actorId opaco (por exemplo, user:550e8400-e29b-41d4-a716-446655440000) a PII legível por humanos (displayName, email). Fora dos ambientes local, de desenvolvimento e de teste, defina ACTOR_PII_ENCRYPTION_KEY como uma chave de 32 bytes codificada em base64 antes de usar mapeamentos de ator. Se você deixar essa variável sem definição, o Matcher continua em execução. As operações de mapeamento que carregam PII (upsert, leitura de registro único e pseudonimização) então retornam um erro indicando que um criptografador é necessário. Os caminhos de listagem e exclusão, que não carregam PII, não precisam de criptografador. O Matcher nunca armazena PII de mapeamento em texto simples.
As linhas da listagem omitem os campos de PII do mapeamento (displayName, email) por design, mas retornam o próprio actorId. No upsert, o Matcher remove espaços em branco no início e no fim e rejeita IDs vazios, IDs compostos apenas por espaços em branco e IDs com mais de 255 caracteres. O Matcher não impõe um formato de ID opaco e não mascara o valor. Um actorId que em si contém PII, como um endereço de e-mail, aparece nas linhas da listagem com seu valor armazenado. A pseudonimização preserva esse valor. Use identificadores opacos se o acesso à listagem precisar ficar livre de PII.
A resposta do PUT e o GET de registro único retornam a identidade em texto simples. A permissão deanonymize controla apenas o GET de registro único. Apenas o acesso de escrita controla a resposta do PUT, que ecoa o registro armazenado completo, incluindo qualquer campo armazenado que o chamador não enviou. Trate o acesso de escrita a mapeamento de ator como revelador de PII. Os logs de auditoria podem reter o actorId bruto, que pode ser um endereço de e-mail.
Listar mapeamentos de ator
Linhas paginadas por cursor que omitemdisplayName e email. Filtre por um prefixo de ID de ator.
actorId (filtro de prefixo), limit (padrão 25, limitado a 100) e cursor.
Fazer upsert de um mapeamento de ator
Cria ou atualiza a PII de um ID de ator. OPUT é idempotente. A mesma chamada cria o registro no primeiro uso e o atualiza depois disso. Informe pelo menos um entre displayName ou email.
Obter um mapeamento de ator (desanonimizar)
Retorna a PII em texto simples para um único ID de ator. Esta é a primitiva de desanonimização, por isso a permissão mais restritadeanonymize a controla, em vez da leitura simples.
Pseudonimizar
Substitui odisplayName e o email do mapeamento por [REDACTED], preservando o registro e seu vínculo com o actorId. Isso remove a PII apenas do mapeamento. Os registros de auditoria imutáveis mantêm o actorId bruto da gravação original, e esse valor pode em si ser um endereço de e-mail. Os logs de auditoria históricos e os arquivos arquivados mantêm seus valores originais. Responde 204 No Content.
Excluir um mapeamento
Remove o mapeamento permanentemente. Responde204 No Content.
Pseudonimizar mantém o registro e remove sua PII. Excluir remove o registro por completo. Escolha pseudonimizar quando precisar reter o vínculo de auditoria, e excluir quando o próprio registro não deve persistir.
Arquivos
O worker de arquivamento fica desligado por padrão (
ARCHIVAL_WORKER_ENABLED=false). Quando você o habilita e configura o armazenamento de arquivamento, o worker comprime partições de log de auditoria envelhecidas e as move para o armazenamento de objetos. O Matcher registra as rotas de recuperação de arquivo sempre que o armazenamento de objetos de arquivamento está disponível, mesmo quando o worker fica desligado. O endpoint de listagem retorna arquivos concluídos. O endpoint de download emite URLs de duração limitada para objetos de arquivo.
Listar arquivos
Paginado por offset. Filtre por intervalo de datas.from, to (YYYY-MM-DD ou RFC 3339), limit (1–200, padrão 20) e offset. O endpoint lista apenas arquivos COMPLETE e nunca exibe arquivos em andamento ou com falha.
Baixar um arquivo
Retorna uma URL pré-assinada e o checksum para verificação de integridade.Logs de auditoria
Workflows de governança instrumentados gravam registros de auditoria imutáveis por tenant. O Matcher vincula cada registro a uma cadeia de hash SHA-256 à prova de adulteração (
recordHash = SHA-256(prevHash || canonical content)), de modo que alterações inconsistentes ficam detectáveis. Use o endpoint de verificação abaixo para obter o veredito de integridade do lado do servidor.
Listar logs de auditoria
Paginado por cursor, com filtros avançados.actor, action, entity_type, date_from, date_to (YYYY-MM-DD ou RFC 3339), limit (1–200, padrão 20) e cursor.
actor filtra pelo valor actorId do registro. Esse valor é o identificador de ator bruto da gravação original, um endereço de e-mail neste exemplo. Os registros de auditoria armazenam o identificador como está. Ele não precisa corresponder a um actorId de mapeamento de ator.
Quando um diff excede o limite de payload do outbox, changes carrega um envelope de marcador de truncamento em vez do diff completo, e truncated passa a true, com originalSize informando o tamanho em bytes anterior ao truncamento.
Verificar a cadeia de auditoria
Reverifica se cada registro inspecionado se vincula ao anterior e corresponde ao seu hash armazenado. A verificação percorre um intervalo contíguo limitado pormaxRecords, de modo que intact apenas vale para esse intervalo inspecionado. No endpoint HTTP, um maxRecords informado deve estar no intervalo de 1 a 10.000, e um valor fora dele retorna 422. Quando você o omite, o Matcher usa o padrão de 10.000 registros.
fromSeq é um piso de verificação opcional (mínimo 1). Omita-o para começar na sequência 1. Um piso acima de 1 confia no prevHash armazenado daquele registro, de modo que a execução não cobre adulterações abaixo do piso. A verificação permanece estritamente somente leitura. Ela detecta adulterações e nunca altera um registro.
intact é true quando todo o intervalo permanece sem interrupção. Quando a verificação encontra uma quebra, firstBrokenSeq informa o tenantSeq do primeiro registro com falha, e verifiedCount informa quantos registros se mantiveram íntegros antes dele. O campo truncated é true quando a cadeia tem mais registros do que o limite de inspeção maxRecords permitiu. A resposta ecoa o fromSeq efetivo. Após uma execução truncada, retome com fromSeq = fromSeq + verifiedCount para inspecionar o próximo intervalo.
Obter um log de auditoria
Você também pode listar o histórico de uma entidade diretamente com
GET /v1/governance/entities/{entityType}/{entityId}/audit-logs (paginado por cursor), o que é conveniente quando você já sabe qual entidade auditar.
