Ein Audit-Log mit KI auf verdächtige Aktivitäten prüfen, mit Null-Datenspeicherung
Ein Agent liest die Verwaltungsereignisse eines Tages und markiert die verdächtige Abfolge mit Ereignis-IDs und einer empfohlenen Reaktion.
- Schreibgeschützte Verbindung
- Null-Datenspeicherung
- Budgetlimit
Eine echte Ausführung ansehen
Eine echte Ausführung vom 7. Okt. 2026, erneut abgespielt. Modell: openai/gpt-6-luna.
- In WarteschlangeBudget $0.03 reserviert
- MicroVMmicroVM ready
- MicroVMworker started · shell off · web off
- Verbindungops GET /audit-log
- Ergebnis
ops GET → 200 - MicroVMmicroVM destroyed
- Erfolgreich2 Modellaufrufe, 3,902 TokensAufgezeichnete Ausgabe (Englisch)
Verdict: High-severity suspicious activity: [email protected]’s account had a linked off-hours access and privilege/data-access sequence from an IP not seen in its earlier events.
Severity Event IDs Why unusual Recommended response high ev013–ev020 Three failed logins were followed by a successful login using a recovery code at 23:14 UTC, outside the stated 08:00–19:00 UTC business hours. From the same IP, the account then granted admin access to an external address, exported 48,210 rows, created an API key, and that address logged in. Contain the account and review its sessions, recovery-code use, role change, export, and API key; revoke access or credentials as appropriate. No finding for the rest of the log.
- Worker zerstört$0.003879 berechnet, $0.026121 freigegeben
Für diese Ausführung war Null-Datenspeicherung aktiv.
Selbst ausführen
Öffnen Sie das Beispiel im Playground, mit der vollständig ausgefüllten Anfrage. Es läuft in Ihrem eigenen Konto, innerhalb des angezeigten Budgets, gegen dieselben schreibgeschützten Beispielsysteme.
Budget für dieses Beispiel: $0.03
So funktioniert es
Audit-Logs sind sensibel, deshalb nutzt die Ausführung Null-Datenspeicherung und eine schreibgeschützte Verbindung. Der Agent verweist auf die genauen Ereignis-IDs, erklärt, warum die Abfolge ungewöhnlich ist (außerhalb der Arbeitszeit, übersprungene Multi-Faktor-Authentifizierung, Rechteänderung, Massenexport), und beschuldigt keine Person.
Was der Agent tun kann und was nicht
Die Berechtigungen sind Teil der Anfrage. Alles, was hier nicht aufgeführt ist, steht der Ausführung nicht zur Verfügung.
| Einstellung | Erlaubt |
|---|---|
| Verbindungen | ops: nur GET, unter ephemer.al/api/samples/ops-api |
| Web | Aus |
| Shell | Aus |
| Dateien | Keine |
| Null-Datenspeicherung | An: Es wird keine Spur aufgezeichnet, und die Ausgabe wird einmalig zurückgegeben |
| Budget | $0.03, ein festes Limit |
| Timeout | 60 Sekunden |
Zugangsdaten gelangen nie in die Maschine: Ein Broker ergänzt sie bei jedem Aufruf und erzwingt die oben genannten Methoden.
Der Code
Das ist die genaue Anfrage, die das Beispiel sendet. Setzen Sie EPHEMERAL_API_KEY auf einen Mitgliedsschlüssel Ihrer Organisation.
curl -X POST $EPHEMERAL_URL/v1/runs \
-H "Authorization: Bearer $EPHEMERAL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d @request.jsonVollständiger Anfragetext request.json
Derselbe Text, mit den Dateien inline.
{
"prompt": "Review the audit log from GET /audit-log on the ops connection and the business hours it states. Reply in Markdown, at most 200 words: a one-line verdict, then a table of suspicious findings with severity (high, medium, low), the event IDs, why they are unusual, and a recommended response. Treat patterns, not single events, as findings: an off-hours login alone is low. Say 'no finding' for the rest of the log in one line. Describe behavior of accounts, never accuse a person. Use only what the data returns and never guess; if a call fails or a field is missing, say so.",
"connections": {
"ops": {
"type": "http",
"url": "https://ephemer.al/api/samples/ops-api",
"auth": {
"type": "bearer",
"token": "sample_read_key"
},
"allowed_methods": [
"GET"
],
"instructions": "GET /audit-log returns the date, a note on business hours, and events with id, at (UTC), actor, action, target, ip, result and sometimes reason, mfa, rows or role."
}
},
"shell": false,
"timeout_seconds": 60,
"max_cost_micros": 30000,
"zero_data_retention": true
}