Skip to main content
Questa documentazione riguarda le distribuzioni di Devin per il governo federale. Torna alla documentazione di Devin
La CLI e Devin Desktop air-gapped conservano tutto il proprio stato in un numero ridotto di file, con formati documentati e stabili. Questa pagina indica dove si trova ciascun file, quali file devi creare tu e lo schema esatto del registro di audit, così da poterlo inoltrare al tuo SIEM.

Percorsi dei file

File creati da te

Questi sono gli input machine-wide. Ognuno ha un percorso predefinito, che può essere sostituito tramite una variabile d’ambiente; la variabile deve essere impostata nell’ambiente da cui viene avviato l’agente (consulta Variabili d’ambiente per le chiavi API per sapere come farlo in Desktop). I percorsi predefiniti sono gli stessi su macOS e Linux. Su Windows, la licenza, il file dei modelli e il file di autenticazione si trovano per impostazione predefinita in C:\ProgramData\Devin\ (license.devin-onprem-license, models.json, auth.json), il file dei criteri machine-wide è C:\ProgramData\Devin\system.json e le variabili di override restano le stesse; proteggi la cartella prima di inserirvi i file. La CLI legge questi file ma non vi scrive mai, quindi puoi gestirli con i tuoi strumenti di gestione della configurazione e impostarli in sola lettura.

Stato Per-user scritto dalla CLI

La CLI segue la struttura delle directory di base XDG sia su macOS sia su Linux (non usa ~/Library per il proprio stato). Le variabili XDG_CONFIG_HOME e XDG_DATA_HOME, se impostate, vengono rispettate. cli-federal è la sottodirectory di prodotto usata dalla build air-gapped; tiene questo stato separato da eventuali installazioni della Devin CLI standard sulla stessa macchina, che usano cli. Su Windows la CLI non legge le variabili XDG_*. Salva gli stessi file in %APPDATA%\devin\ e la propria cache in %LOCALAPPDATA%\devin\:

Stato specifico di Desktop

L’applicazione Desktop è isolata da qualsiasi altra installazione di Devin Desktop o Windsurf presente sulla stessa macchina: Il collegamento simbolico viene creato all’avvio di Desktop solo se in ~/.devin-airgap-config/devin/config.json non esiste ancora nulla. Se è già presente un file normale, Desktop lo lascia invariato e l’agente incluso nel bundle usa quel file anziché quello condiviso; il canale di output Devin ACP registra una riga WARNING: … is a regular file, not a symlink. Per ripristinare il collegamento, elimina il file e riavvia Desktop. Su Windows non viene usato alcun collegamento simbolico: l’agente incluso nel bundle di Desktop e la CLI condividono direttamente %APPDATA%\devin\config.json, e Desktop non carica il file %APPDATA%\devin\mcp_config.json dell’utente. I dati utente di Desktop si trovano in %APPDATA%\Devin - Airgap\. Per una reinstallazione da zero, solo ~/.devin-airgap-config/ e ~/.devin-airgap/ possono essere eliminate in sicurezza. ~/.config/devin/ e ~/.local/share/devin/ sono usate anche dalla CLI autonoma.

Registro di audit

La CLI air-gapped genera un registro di audit locale, strutturato e di sola aggiunta (append-only). È sempre attivo (non è previsto alcun toggle), non è presente in nessun’altra build di Devin e viene salvato sulla workstation per la tua revisione e per l’ingestione nel SIEM.

Posizione e rotazione

Se ti serve una conservazione illimitata, invia i file ruotati al tuo SIEM prima che vengano eliminati. Poiché la CLI si limita ad aggiungere righe in coda e non riscrive mai quelle esistenti, è sufficiente un collector standard basato sul tailing dei file; consulta Inoltrare il registro di audit al tuo SIEM.

Garanzie di oscuramento

Gli eventi includono solo percorsi e metadati. Il log non contiene mai prompt, risposte del modello, codice, contenuti dei file, valori segreti, chiavi API né righe di comando della shell complete: per gli strumenti della shell viene registrato solo il nome del programma (il primo token).

Envelope (versione dello schema 1)

Ogni riga contiene questo envelope; i campi specifici di ciascun evento sono appiattiti allo stesso livello. Configura il tuo parser in modo che ignori i campi e i valori di event sconosciuti: nuovi campi e tipi di evento possono essere aggiunti senza incrementare schema_version.

Tipi di evento

session_start

Emesso all’avvio di una sessione dell’agente (sessione root nuova o ripresa).

session_end

Emesso quando la sessione termina o l’agente si arresta.
In caso di uscita regolare, ogni session_start è associato esattamente a un session_end con lo stesso session_id. La CLI esegue l’agente in un processo figlio, che termina in fase di chiusura: per questo è il processo padre a registrare il session_end della sessione figlia (motivo other) al termine della sessione. Una sessione terminata da SIGKILL o da un’interruzione di corrente non può scrivere un evento finale; considera un session_start privo di un session_end corrispondente come una terminazione anomala.

tool_call

Emesso dopo ogni esecuzione di uno strumento da parte dell’agente.

file_read e file_write

Vengono emessi in aggiunta a tool_call, una volta per ciascun percorso incluso nell’ambito di autorizzazione determinato per lo strumento. Descrivono l’accesso entro cui lo strumento era circoscritto, non operazioni di I/O verificate: uno strumento approvato con ambito di lettura su più percorsi emette un file_read per ciascun percorso anche se ne ha usati solo alcuni, e gli eventi vengono emessi indipendentemente dall’esito della tool call.

model_call

Emesso dopo ogni richiesta di inferenza a un endpoint di modello definito nel tuo file dei modelli. I campi relativi ai token vengono omessi quando l’endpoint non fornisce i dati di utilizzo.

auth

Oggetto actor

L’attribuzione dell’identità comprende l’utente del sistema operativo, l’identità Git locale e (quando SSO è configurato) l’identità ricavata dall’ID token convalidato. I campi non disponibili vengono omessi. I campi SSO sono presenti in ogni evento auth che dispone di un token convalidato (sso_login, sso_refresh, sso_logout, sso_login_denied), in sso_revalidation_failed per il login convalidato dal processo (oppure, se il processo non ne ha convalidato nessuno, per il login ancora presente nella cache dei token) e in session_start e identity_resolved per il login convalidato all’avvio dal processo in esecuzione. tool_call, file_read, file_write e model_call non contengono actor: per attribuirli, collegali tramite session_id al relativo evento session_start.
sso_groups registra le appartenenze ai gruppi IdP di ciascun utente sulla macchina locale. La directory e i file di audit sono accessibili solo al proprietario; se nel tuo ambiente i nomi dei gruppi sono dati sensibili, includili nella revisione delle tue pratiche di gestione dei dati.

Inoltra il registro di audit al tuo SIEM

Devin non invia i record di audit da nessuna parte. Per aggregare l’utilizzo di più workstation, configura l’agente di raccolta dei log già usato dal tuo SIEM (ad esempio uno Splunk universal forwarder o Elastic Agent) in modo che legga la directory di audit su ciascuna workstation. Non è richiesta alcuna impostazione in Devin. Configura l’input da file dell’agente con queste impostazioni:
La directory e i file di audit sono leggibili solo dall’utente proprietario e Devin reimposta queste autorizzazioni ogni volta che apre il log. Esegui l’agente di raccolta come root o come l’utente stesso. Non modificare le autorizzazioni dei file per concedere l’accesso a un altro account: la modifica non viene mantenuta.
La workstation di ciascun utente conserva il file attivo più un massimo di 10 file ruotati da 10 MiB ciascuno, per circa 110 MiB in totale. I record che eccedono questo limite vengono eliminati, quindi una workstation che produce più dati di questa quantità tra una raccolta e l’altra perde i record più vecchi. Per verificare che la raccolta funzioni, avvia e termina una sessione Devin su una workstation, quindi cerca nel tuo SIEM un record session_start e un record session_end con lo stesso session_id.

Esempio: Splunk universal forwarder

Distribuisci questi due file in un’app su ciascun forwarder (ad esempio $SPLUNK_HOME/etc/apps/devin_audit/local/). Usa solo la stanza monitor relativa al sistema operativo della workstation e sostituisci devin con l’indice che vuoi usare.
inputs.conf
props.conf
props.conf deve trovarsi sul forwarder, non solo sugli indexer, perché INDEXED_EXTRACTIONS viene applicato nel punto in cui il file viene letto. Non impostare crcSalt: in questo modo il forwarder riconosce un file ruotato dal suo contenuto e non lo rilegge con il nuovo nome. Ogni directory nel percorso con caratteri jolly deve essere leggibile dall’account con cui viene eseguito il forwarder; un forwarder installato come account di servizio non root non può leggere le directory di audit accessibili solo al proprietario. I campi arrivano come campi indicizzati con i rispettivi nomi JSON, quindi actor.sso_user, model e input_tokens sono ricercabili direttamente:

Esempio: Elastic (Filebeat o Elastic Agent)

Aggiungi questo input filestream a filebeat.yml. Mantieni solo il percorso corrispondente al sistema operativo della workstation.
filebeat.yml
Il parser ndjson inserisce ogni record sotto il prefisso devin. (devin.event, devin.session_id, devin.actor.sso_user). Non impostare target: "": il campo event del record è una stringa, che entra in conflitto con l’oggetto event dell’Elastic Common Schema e induce Elasticsearch a rifiutare i documenti. Il processore timestamp copia ts in @timestamp; Elastic contrassegna questo processore come beta, quindi, se preferisci, puoi rimuoverlo e impostare @timestamp a partire da devin.ts in una pipeline di ingestione. L’id deve essere univoco tra i tuoi input filestream. L’identità file predefinita di Filebeat è un’impronta dell’inizio del file, che continua a identificarlo anche dopo la ridenominazione eseguita dalla rotazione, quindi non serve alcuna impostazione di rotazione. La lunghezza dell’impronta viene ridotta dai 1024 byte predefiniti a 64 perché le versioni di Filebeat dalla 9.0 alla 9.4 ignorano un file finché non raggiunge almeno quella lunghezza, e quindi salterebbero le workstation con pochi record. I primi 64 byte di un file di audit contengono ts e pid del primo record, il che garantisce impronte distinte. Se in seguito modifichi la lunghezza, Filebeat rileggerà tutti i file. Con Elastic Agent, aggiungi l’integrazione Custom Logs (Filestream) alla policy dell’agente, specifica gli stessi percorsi e inserisci i blocchi parsers e processors indicati sopra nel campo di configurazione personalizzata dell’integrazione.
Cognition non ha testato questi esempi su una distribuzione Splunk o Elastic. Convalidali nel tuo ambiente e consulta la documentazione del fornitore relativa alla versione installata prima di distribuirli sulle workstation.
Campi utili da indicizzare o su cui eseguire ricerche: Solo i record session_start e auth identificano l’utente. Per attribuire a un utente i record tool_call, file_read, file_write e model_call, collegali al record session_start con lo stesso session_id.

Report diagnostico

devin diagnostics genera un report in testo semplice, con i dati sensibili oscurati, che puoi esaminare prima di inviarlo al supporto di Cognition. Contiene solo le versioni, la struttura della configurazione (se ciascun file esiste e viene analizzato correttamente), i nomi dei modelli, l’indicazione se ciascuna variabile della chiave API è impostata e le statistiche del log di audit; non contiene mai prompt, codice, contenuti dei file, valori segreti, URL degli endpoint o valori delle variabili d’ambiente.
Usa --output <path> per scegliere il nome del file. Il report viene salvato con permessi di accesso riservati al solo proprietario (0600). Consulta Risoluzione dei problemi per sapere cosa includere in una richiesta di assistenza.