Sistema de Auditoria IOT

Objetivo

Implementar um sistema de auditoria para rastrear ações críticas no sistema, como criação, alteração e exclusão de usuários, perfis e clientes. A falta de um mecanismo de auditoria tem dificultado a análise e rastreamento dessas atividades.

Eventos Auditados

Os seguintes eventos serão registrados no sistema de auditoria:
Criação de cliente
Alteração de cliente
Exclusão de cliente
Criação de perfil
Alteração de perfil
Exclusão de perfil
Criação de usuário
Alteração de usuário
Exclusão de usuário

Estrutura da Tabela de Auditoria

A tabela PLANETA.AUDIT_LOGS será criada no banco de dados Oracle para armazenar os logs de auditoria.

Definição da Tabela

CREATE TABLE PLANETA.AUDIT_LOGS (
ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, -- Identificador único do log
EVENT_NAME VARCHAR2(250) NOT NULL, -- Nome do evento auditado (ex.: 'USER_CREATION')
ENTITY_NAME VARCHAR2(250) NOT NULL, -- Nome da entidade afetada (ex.: 'USER', 'CLIENT')
ENTITY_ID VARCHAR2(250), -- ID do registro afetado
CUSTOMER_ID NUMBER(38,0) NOT NULL, -- ID do cliente
PAYLOAD CLOB NOT NULL, -- JSON com os dados recebidos na requisição
OPERATION_TYPE VARCHAR2(20) NOT NULL, -- Tipo da operação
USERNAME VARCHAR2(100) NOT NULL, -- Nome do usuário que executou a ação
EVENT_TIMESTAMP TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL, -- Data e hora da ação
STATUS NUMBER(3) NULL, -- Código HTTP da operação (ex.: '200 OK', '400 BAD_REQUEST')
STATUS_MESSAGE CLOB NULL, -- Mensagem do status HTTP (ex.: 'OK', 'Bad Request')
CONSTRAINT CT_IOT_AUDIT_LOGS_PK PRIMARY KEY (ID),
CONSTRAINT CHK_OPERATION_TYPE CHECK (OPERATION_TYPE IN ('INSERT', 'UPDATE', 'DELETE')) -- Validação do tipo de operação
);

Índices para Otimização

CREATE UNIQUE INDEX CT_IOT_AUDIT_LOGS_PK ON PLANETA.IOT_AUDIT_LOGS (ID);
CREATE INDEX IDX_AUDIT_EVENT_NAME ON PLANETA.IOT_AUDIT_LOGS(EVENT_NAME);
CREATE INDEX IDX_AUDIT_ENTITY ON PLANETA.IOT_AUDIT_LOGS(ENTITY_NAME, ENTITY_ID);
CREATE INDEX IDX_AUDIT_USERNAME ON PLANETA.IOT_AUDIT_LOGS(USERNAME);
CREATE INDEX IDX_AUDIT_TIMESTAMP ON PLANETA.IOT_AUDIT_LOGS(EVENT_TIMESTAMP);
CREATE INDEX IDX_IOT_AUDIT_LOGS_STATUS ON PLANETA.IOT_AUDIT_LOGS (STATUS);

GRANT SELECT, INSERT, UPDATE, DELETE ON PLANETA.IOT_AUDIT_LOGS TO PLANETAAPL;
GRANT SELECT, INSERT, UPDATE, DELETE ON PLANETA.IOT_AUDIT_LOGS TO PUBLIC;

CREATE INDEX IDX_IOT_AUDIT_LOGS_CUSTOMER_ID ON PLANETA.IOT_AUDIT_LOGS (CUSTOMER_ID);

ALTER TABLE PLANETA.IOT_AUDIT_LOGS ADD CONSTRAINT FK_IOT_AUDIT_LOGS_CUSTOMER FOREIGN KEY (CUSTOMER_ID) REFERENCES PLANETA.CT_IOT_CUSTOMER(CTCDID);

CREATE SEQUENCE PLANETA.CT_IOT_AUDIT_LOGS_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;

GRANT SELECT, ALTER ON PLANETA.CT_IOT_AUDIT_LOGS_SEQ TO PLANETAAPL;
GRANT SELECT, ALTER ON PLANETA.CT_IOT_AUDIT_LOGS_SEQ TO PUBLIC;


Registro de Auditoria

Para garantir que todos os eventos sejam registrados corretamente, sempre que uma requisição for feita, o payload completo será armazenado na coluna PAYLOAD. Assim, será possível reconstruir a linha do tempo de alterações para qualquer entidade registrada. Também é registrado o identificador do cliente, com a associação à tabela de clientes (customers - coluna CUSTOMER_ID)."
Exemplo:
Criação do cliente → O payload salvo será o JSON completo enviado na requisição POST.
Edição do cliente → O payload salvo será o JSON enviado na requisição PUT, permitindo rastrear quais dados foram alterados.
Exclusão do cliente → O payload salvo conterá os dados antes da exclusão.

Screenshot from 2025-03-19 09-40-06.png
Screenshot from 2025-03-19 09-40-28.png
Eventos criados
EVENT_NAME
OPERATION_TYPE
ENTITY_NAME
DESCRIÇÃO
STATUS
CREATE_GROUP
INSERT
GROUP
Cria um perfil
409, 200, 403, 500, 400
UPDATE_GROUP
UPDATE
GROUP
Atualizar as permissões do grupo
403, 400, 200, 500
DELETE_GROUP
DELETE
GROUP
Deleta um perfil da base
403, 400, 200, 500
CREATE_CUSTOMER
INSERT
CUSTOMER
Cria um cliente na base
403, 400, 200, 500
UPDATE_CUSTOMER
UPDATE
CUSTOMER
Atualiza dados do cliente na base
403, 400, 200, 500
DELETE_CUSTOMER
DELETE
CUSTOMER
Delete um cliente da base
403, 400, 200, 500
CONVERT_TO_BROKER
REPLACE
CUSTOMER
Converte um cliente no broker
403, 400, 200, 500
CREATE_USER
INSERT
USER
Cria um usuário
409, 200, 403, 500, 400
UPDATE_USER
UPDATE
USER
Atualiza um usuário
403, 400, 200, 500
DELETE_USER
DELETE
USER
Deleta um usuário
403, 400, 200, 500
UPDATE_USER_GROUPS
UPDATE
USER
Atualiza os grupos do usuário
403, 400, 200, 500
There are no rows in this table


Status HTTP e Suas Descrições
Código
Status
Descrição
Contexto Comum
200
OK
Requisição bem-sucedida.
Operações concluídas com sucesso.
400
Bad Request
Requisição inválida ou malformada.
Dados faltando, formato incorreto ou parâmetros inválidos.
403
Forbidden
Acesso proibido.
Cliente não tem permissão para acessar o recurso.
409
Conflict
Conflito na requisição.
Requisição viola regras de negócio ou estado do servidor.
500
Internal Server Error
Erro interno do servidor.
Bugs no código ou problemas inesperados no servidor.
There are no rows in this table

API busca das Auditorias

Foi desenvolvida uma API no MVP que permite a consulta das auditorias registradas no sistema. Para acessar essa funcionalidade, o usuário precisa ter a permissão view-audit associada ao seu perfil. Essa API facilita a recuperação e análise dos dados de auditoria de forma segura e controlada.

curl --request GET \ --url http://172.20.53.21:8080/audit \ --header 'Content-Type: application/json' \ --header 'customerId: 10000' \ --header 'roles: view-audits'

Header
Parâmetro
Valor
Content-Type
application/json
customerId
10000
roles
view-audits
There are no rows in this table

Query Parameters
Parâmetro
Valor
Tipo
Descrição
entityName
CUSTOMER
String
Os valores são: CUSTOMER,USER,GROUP,ROLE
entityId
85aadda3-a9b6-45f5-8cd6-8c8db2e76e62
String
Os valores são os identificadores da tabela. Esse dados poder ser cadastrado como nulo, principalmente nos erros.
status
200
Integer
Os valores podem ser: 409, 200, 403, 500, 400
username
thiago.moreira
String
Usuário que executou a ação.
startDate
20250318
String
Data inicio do evento. Formato: yyyyMMdd(20250318)
endDate
20250318
String
Data fim do evento. Formato: yyyyMMdd(20250318)
eventName
ADD_ROLES_BY_GROUP
String
Os valores podem ser: CREATE_GROUP,UPDATE_GROUP,DELETE_GROUP,CREATE_CUSTOMER,UPDATE_CUSTOMER,DELETE_CUSTOMER,CONVERT_TO_BROKER,CREATE_USER,UPDATE_USER,DELETE_USER,UPDATE_USER_GROUPS
page
0
Integer
Página(default=0)
linerPerPage
24
Integer
Registro por páginas(default=24)
There are no rows in this table

Observação: O front deve chamar a API da mesma forma que as outras APIS que são chamadas. Ex: http://allcom.iot/api/realms/0d5a3954/service-proxy/audit?page=0&linesPerPage=24

Tela de Auditoria

Uma tela será disponibilizada no menu "Administrativo" para consulta dos logs de auditoria. Apenas usuários com permissão poderão acessá-la.

Filtros Disponíveis

Tipo de evento (ex.: Criação, Alteração, Exclusão)
Cliente
Username
Data do evento
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.