Hoppa till innehållet
AI-grafen
F· AI engineeringagenter-verktyg· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Agentsäkerhet: behörigheter, sandlåda, bekräftelse

Kunna begränsa vad en agent får göra och kräva bekräftelse för irreversibla handlingar.

Förkunskaper

Intuition

En agent som kan läsa är ett informationsproblem. En agent som kan skriva, skicka, betala eller radera är ett säkerhetsproblem.

Klassificera varje verktyg innan det kopplas in:

KlassExempelRegel
Läs, publiktsöka i dokumentationfritt
Läs, känsligtkunddata, personuppgifterbehörighetskontroll per användare, loggas
Skriv, återställbartskapa utkast, kommenteratillåtet, loggas, går att ångra
Skriv, oåterkalleligtskicka mejl, betala, raderakräver mänsklig bekräftelse av det konkreta anropet

Bekräftelsen ska visa exakt vad som ska hända — mottagare, belopp, innehåll — inte «agenten vill skicka ett mejl, OK?».

Formellt

Sandlådans lager (som i AI-grafens labbrunner, ADR-003):

LagerÅtgärdStoppar
Nätverk--network noneexfiltrering, nedladdning, metadatatjänster
Filsystemread-only rootfs + tmpfspersistens, manipulation av bilden
Användareuid 65534, no-new-privilegesprivilegieeskalering
Kapabilitetercap-drop ALLkernel-operationer
Resursercpu, minne, pids, timeoutresursutmattning
Livstidcontainer tas bort efter körningkvarvarande tillstånd

Nätverksisoleringen är den viktigaste eftersom nästan all skada kräver att något lämnar maskinen eller hämtas in.

Budget som säkerhetsmekanism: max steg, max tokens, max verktygsanrop per körning och per användare och dag. Utan det kan en loopande agent kosta mer på en natt än tjänsten omsätter på en månad.

Loggning för granskning i efterhand: varje verktygsanrop med argument (trunkerade, maskerade), resultat, tidsstämpel och vem som initierade. Utan spår går en incident inte att utreda.

Gränsen som är lätt att missa: agentens behörighet ska vara användarens behörighet, inte systemets. En agent som kör med tjänstekontots rättigheter kan nås av vilken användare som helst för att komma åt vad som helst.

Kod

from dataclasses import dataclass
from enum import Enum

class Risk(Enum):
    LAS = 1; SKRIV_ATERSTALLBAR = 2; OATERKALLELIG = 3

@dataclass
class Verktyg:
    namn: str
    risk: Risk
    kor: callable
    kraver_roll: str | None = None

async def kor_verktyg(v: Verktyg, args: dict, anvandare: dict, bekrafta, logg):
    if v.kraver_roll and not har_roll(anvandare, v.kraver_roll):
        return {"error": "saknar behörighet"}                     # användarens behörighet, inte systemets
    if v.risk is Risk.OATERKALLELIG:
        ok = await bekrafta(f"{v.namn}({sammanfatta(args)})")     # visa det KONKRETA anropet
        if not ok:
            await logg("avbruten_av_anvandare", v.namn, args)
            return {"error": "avbruten av användaren"}
    await logg("verktyg_anropat", v.namn, args, anvandare["id"])
    return await v.kor(args, som=anvandare)                        # kör som användaren
# Sandlåda för kodkörning — samma inställningar som plattformens labbrunner
docker run --rm --network none --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=64m \
  --user 65534:65534 --cap-drop ALL --security-opt no-new-privileges \
  --cpus 1 --memory 512m --pids-limit 128 \
  ai-grafen/lab-python:2026.09 timeout 60 python /work/kod.py

Behärskning innebär

  • Begränsar en agents behörigheter till minsta nödvändiga
  • Kräver bekräftelse för irreversibla handlingar
  • Kör kod i sandlåda med rätt begränsningar

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser