Skip to content

Revision och efterlevnad

Varje policybeslut i Triggerfish loggas med fullständigt sammanhang. Det finns inga undantag, inget "felsökningsläge" som inaktiverar loggning och inget sätt för LLM:en att undertrycka revisionspost. Det ger en komplett, manipulationssäker post av varje säkerhetsbeslut systemet har fattat.

Vad som registreras

Revisionsloggning är en fast regel — den är alltid aktiv och kan inte inaktiveras. Varje hook-körning producerar en revisionspost innehållande:

FältBeskrivning
timestampNär beslutet fattades (ISO 8601, UTC)
hook_typeVilken hanteringshook körde (PRE_CONTEXT_INJECTION, PRE_TOOL_CALL, POST_TOOL_RESPONSE, PRE_OUTPUT, SECRET_ACCESS, SESSION_RESET, AGENT_INVOCATION, MCP_TOOL_CALL)
session_idSessionen där åtgärden inträffade
decisionALLOW, BLOCK eller REDACT
reasonLäsbar förklaring av beslutet
inputData eller åtgärd som utlöste hooken
rules_evaluatedVilka policyregler kontrollerades för att nå beslutet
taint_beforeSession-taint-nivå före åtgärden
taint_afterSession-taint-nivå efter åtgärden (om ändrad)
metadataYtterligare sammanhang specifikt för hooktypen

Revisionspostexempel

Tillåten utdata

json
{
  "timestamp": "2025-01-29T10:23:47Z",
  "hook_type": "PRE_OUTPUT",
  "session_id": "sess_456",
  "decision": "ALLOW",
  "reason": "Klassificeringskontroll godkänd",
  "input": {
    "target_channel": "telegram",
    "recipient": "owner"
  },
  "rules_evaluated": [
    "no_write_down",
    "channel_classification"
  ],
  "taint_before": "INTERNAL",
  "taint_after": "INTERNAL"
}

Blockerad nedskrivning

json
{
  "timestamp": "2025-01-29T10:24:12Z",
  "hook_type": "PRE_OUTPUT",
  "session_id": "sess_456",
  "decision": "BLOCK",
  "reason": "Session-taint (CONFIDENTIAL) överstiger effektiv klassificering (PUBLIC)",
  "input": {
    "target_channel": "whatsapp",
    "recipient": "external_user_789",
    "effective_classification": "PUBLIC"
  },
  "rules_evaluated": [
    "no_write_down",
    "channel_classification",
    "recipient_classification"
  ],
  "taint_before": "CONFIDENTIAL",
  "taint_after": "CONFIDENTIAL"
}

Verktygsanrop med taint-eskalering

json
{
  "timestamp": "2025-01-29T10:23:45Z",
  "hook_type": "POST_TOOL_RESPONSE",
  "session_id": "sess_456",
  "decision": "ALLOW",
  "reason": "Verktygssvar klassificerat och taint uppdaterat",
  "input": {
    "tool_name": "salesforce.query_opportunities",
    "response_classification": "CONFIDENTIAL"
  },
  "rules_evaluated": [
    "tool_response_classification",
    "taint_escalation"
  ],
  "taint_before": "PUBLIC",
  "taint_after": "CONFIDENTIAL",
  "metadata": {
    "lineage_id": "lin_789xyz",
    "records_returned": 3
  }
}

Agentdelegering blockerad

json
{
  "timestamp": "2025-01-29T10:25:00Z",
  "hook_type": "AGENT_INVOCATION",
  "session_id": "sess_456",
  "decision": "BLOCK",
  "reason": "Agenttak (INTERNAL) under session-taint (CONFIDENTIAL)",
  "input": {
    "caller_agent_id": "agent_abc",
    "callee_agent_id": "agent_def",
    "callee_ceiling": "INTERNAL",
    "task": "Generera publik sammanfattning"
  },
  "rules_evaluated": [
    "delegation_ceiling_check",
    "delegation_allowlist",
    "delegation_depth"
  ],
  "taint_before": "CONFIDENTIAL",
  "taint_after": "CONFIDENTIAL"
}

Revisionsspårningskapaciteter

Revisionsspårningsflöde: framåtspårning, bakåtspårning och klassificeringsberättigande matar in i efterlevnadsexport

Revisionspost kan frågas på fyra sätt, var och en tjänar ett annat efterlevnads- och kriminaltekniskt behov.

Framåtspårning

Fråga: "Vad hände med data från Salesforce-post opp_00123ABC?"

En framåtspårning följer ett dataelement från dess ursprungspunkt genom varje transformation, session och utdata. Den svarar: vart gick den här datan, vem såg den och skickades den någonsin utanför organisationen?

Ursprung: salesforce.query_opportunities
  --> lineage_id: lin_789xyz
  --> klassificering: CONFIDENTIAL
  --> session: sess_456

Transformationer:
  --> Extraherade fält: name, amount, stage
  --> LLM sammanfattade 3 poster till pipelineöversikt

Utdata:
  --> Skickad till ägaren via Telegram (TILLÅTEN)
  --> Blockerad från WhatsApp extern kontakt (BLOCKERAD)

Bakåtspårning

Fråga: "Vilka källor bidrog till meddelandet skickat kl 10:24 UTC?"

En bakåtspårning börjar från en utdata och går tillbaka genom linjegrafikedjan för att identifiera varje datakälla som påverkade utdata. Det här är viktigt för att förstå om klassificerade data inkluderades i ett svar.

Utdata: Meddelande skickat till Telegram kl 10:24:00Z
  --> session: sess_456
  --> linjegrafikällor:
      --> lin_789xyz: Salesforce-möjlighet (CONFIDENTIAL)
      --> lin_790xyz: Salesforce-möjlighet (CONFIDENTIAL)
      --> lin_791xyz: Salesforce-möjlighet (CONFIDENTIAL)
      --> lin_792xyz: Väder-API (PUBLIC)

Klassificeringsberättigande

Fråga: "Varför är den här datan märkt CONFIDENTIAL?"

Klassificeringsberättigande spårar tillbaka till regeln eller policyn som tilldelade klassificeringsnivån:

Data: Pipeline-sammanfattning (lin_789xyz)
Klassificering: CONFIDENTIAL
Orsak: source_system_default
  --> Salesforce-integrations standardklassificering: CONFIDENTIAL
  --> Konfigurerad av: admin_001 kl 2025-01-10T08:00:00Z
  --> Policyregel: "All Salesforce-data klassificerad som CONFIDENTIAL"

Efterlevnadsexport

För juridisk, regulatorisk eller intern granskning kan Triggerfish exportera hela förvaringskedjan för vilket dataelement eller tidsintervall som helst:

Exportförfrågan:
  --> Tidsintervall: 2025-01-29T00:00:00Z till 2025-01-29T23:59:59Z
  --> Omfång: Alla sessioner för user_456
  --> Format: JSON

Exportinnehåller:
  --> Alla revisionspost i tidsintervallet
  --> Alla linjegrafipost refererade av revisionspost
  --> Alla sessionstillståndsövergångar
  --> Alla policybeslut (ALLOW, BLOCK, REDACT)
  --> Alla taint-ändringar
  --> Alla delegeringskedjeposter

Efterlevnadsexporter är strukturerade JSON-filer som kan matas in av SIEM-system, efterlevnadspaneler eller juridiska granskningsverktyg. Exportformatet är stabilt och versionerat. :::

Datalinjegrafi

Revisionsloggning fungerar i samverkan med Triggerfish datalinjegrafisystem. Varje dataelement som bearbetas av Triggerfish bär provenansmetadata:

json
{
  "lineage_id": "lin_789xyz",
  "content_hash": "sha256:a1b2c3d4...",
  "origin": {
    "source_type": "integration",
    "source_name": "salesforce",
    "record_id": "opp_00123ABC",
    "record_type": "Opportunity",
    "accessed_at": "2025-01-29T10:23:45Z",
    "accessed_by": "user_456",
    "access_method": "plugin_query"
  },
  "classification": {
    "level": "CONFIDENTIAL",
    "reason": "source_system_default",
    "assigned_at": "2025-01-29T10:23:45Z",
    "can_be_downgraded": false
  },
  "transformations": [
    {
      "type": "extraction",
      "description": "Valda fält: name, amount, stage",
      "timestamp": "2025-01-29T10:23:46Z",
      "agent_id": "agent_123"
    },
    {
      "type": "summarization",
      "description": "LLM sammanfattade 3 poster till pipelineöversikt",
      "timestamp": "2025-01-29T10:23:47Z",
      "input_lineage_ids": ["lin_789xyz", "lin_790xyz", "lin_791xyz"],
      "agent_id": "agent_123"
    }
  ],
  "current_location": {
    "session_id": "sess_456",
    "context_position": "assistant_response_3"
  }
}

Linjegrafipost skapas vid POST_TOOL_RESPONSE (när data hamnar i systemet) och uppdateras när data transformeras. Aggregerade data ärver max(indataklassificeringar) — om något indata är CONFIDENTIAL är utdata minst CONFIDENTIAL.

HändelseLinjegrafiåtgärd
Data läst från integrationSkapa linjegrafipost med ursprung
Data transformerad av LLMLägg till transformation, länka indatalinjegrafier
Data aggregerad från flera källorSlå ihop linjegrafi, klassificering = max(indata)
Data skickad till kanalRegistrera mål, verifiera klassificering
SessionsåterställningArkivera linjegrafipost, rensa från kontext

Lagring och bevarande

Revisionsloggar bevaras via StorageProvider-abstraktionen under audit:-namnrymden. Linjegrafipost lagras under lineage:-namnrymden.

DatatypNamnrymdStandardbevarande
Revisionsloggaraudit:1 år
Linjegrafipostlineage:90 dagar
Sessionstillståndsessions:30 dagar
Taint-historiktaint:Matchar sessionsbevarande

SÄKERHET Bevandeperioder är konfigurerbara, men revisionsloggar standard till 1 år för att stödja efterlevnadskrav (SOC 2, GDPR, HIPAA). Att minska bevandeperioden under din organisations regulatoriska krav är administratörens ansvar. :::

Lagringsbakends

NivåBackendDetaljer
PersonligSQLiteWAL-lägesdatabas på ~/.triggerfish/data/triggerfish.db. Revisionspost lagras som strukturerat JSON i samma databas som allt annat Triggerfish-tillstånd.
FöretagPluggbarFöretagsbackends (Postgres, S3 osv.) kan användas via StorageProvider-gränssnittet. Det tillåter integration med befintlig loggaggreringsinfrastruktur.

Oföränderlighet och integritet

Revisionspost är append-only. När de väl skrivits kan de inte ändras eller tas bort av någon komponent i systemet — inklusive LLM:en, agenten eller plugins. Radering sker bara via utgång av bevandeperiod.

Varje revisionspost inkluderar en innehållshash som kan användas för att verifiera integritet. Om poster exporteras för efterlevnadsgranskning kan hasharna valideras mot de lagrade posterna för att upptäcka manipulation.

Företagsefterlevnadsfunktioner

Företagsdriftsättningar kan utöka revisionsloggning med:

FunktionBeskrivning
Juridisk hållPausa bevarandebaserad radering för specificerade användare, sessioner eller tidsintervall
SIEM-integrationStrömma revisionshändelser till Splunk, Datadog eller andra SIEM-system i realtid
EfterlevnadspanelerVisuell översikt av policybeslut, blockerade åtgärder och taint-mönster
Schemalagda exporterAutomatiska periodiska exporter för regulatorisk granskning
VarningsreglerUtlös notifieringar när specifika revisionsmönster inträffar (t.ex. upprepade blockerade nedskrivningar)

Relaterade sidor