Hüppa põhisisu juurde Hüppa navigatsiooni juurde Hüppa jaluse juurde
Piiratud ajal: Design Partner Program. BUSINESS pakett igavesti tasuta.

AI agendi ohutus ja turvamehhanismid

Kuidas Rediacc CLI takistab AI-koodiabistavatel rakendustel saladusi lekkitada, volitusi üle kirjutada või õigusi eskaleerida. Teadmisväravad, redakteerimine, päritolu-kontrollitud ülekanded ja räsiahelaga auditi logi.

Niisiis suunad AI-koodiabistaja oma infrastruktuuri peale. Kui Claude Code, Cursor, Gemini CLI, Copilot CLI või mõni muu sarnane tööriist juhib rdc-d, kohtleb CLI seda klaviatuuri taga olevast inimesest erinevalt. Sellel lehel selgitatakse, mida agent saab teha, mida mitte, ja kuidas turvamehhanismid kehtivad isegi siis, kui agent üritab neist mööda rääkida.

Kiirviide: mida agendid saavad ja ei saa teha

ToimingAgendi vaikeväärtusKuidas konkreetse kasutusjuhu jaoks avada
rdc config show (redakteeritud)✅ lubatud
rdc config field get --pointer <pointer> (redakteeritud asendaja või kokkuvõte)✅ lubatud
rdc config field get --pointer <pointer> --digest✅ lubatud
rdc config field set --pointer <pointer> (avalik väli)✅ lubatud
rdc config field set --pointer <pointer> (tundlik väli, korrektse --current-ga)✅ lubatud
rdc config edit --dump (redakteeritud JSONC)✅ lubatud
rdc config audit {log, tail, verify}✅ lubatud
rdc config field set --pointer <pointer> (tundlik väli, ilma --current-ta)🔴 keeldutudEsita --current "<vana väärtus>"
rdc config field get --pointer <pointer> --reveal🔴 keeldutudKasuta --digest asemel
rdc config show --reveal🔴 keeldutudKasuta tavalist rdc config show
rdc config edit (interaktiivne redaktor)🔴 keeldutudInimene seab REDIACC_ALLOW_CONFIG_EDIT=* enne agendi käivitamist
rdc config edit --apply <file>🔴 keeldutudSama ülekate
rdc config field rotate --pointer <pointer>🔴 keeldutudSama ülekate; kasutab interaktiivset kinnitust
rdc term connect -m <machine> (otsene masina SSH)🔴 keeldutudTee esmalt repo fork ja ühenda fork’iga

Kõik, milles agendile keeldutakse, kirjutatakse auditi logisse koos outcome: refused ja põhjusega.

Kuidas agendid tuvastatakse

CLI käsitleb protsessi agendina, kui kehtib mõni järgmistest:

  • Üks järgmistest on seatud väärtusele "1": REDIACC_AGENT, CLAUDECODE, GEMINI_CLI, COPILOT_CLI, või CURSOR_TRACE_ID on üldse seatud.
  • Linuxis: mõni vanemaprotsess pärilusahelas omab ühte neist muutujatest oma keskkonnas (via /proc/<pid>/environ). Isegi kui agent kustutab oma muutujad käsuga env -i või ümbrisskriptiga, annab vanemate ahel CLI-le teada, kes selle käivitas.

Tuvastamine toimub ühe korra protsessi kohta ja vahemälustatakse. Seda ei saa keelata.

Teadmisvärava mudel

Tundlikud muudatused järgivad passwd(1) konventsiooni: saladuse muutmiseks tõesta, et sa juba teadsid seda. Sümmeetriline inimeste ja agentide jaoks. Mõlemad läbivad sama värava. Puudub “istun klaviatuuri taga” ümbersõit.

  • Soovid vahetada API tokenit, mis asub aadressil /credentials/cfDnsApiToken?
  • CLI küsib: “mis on praegune väärtus?”
  • Agent (või inimene) esitab lihtteksti --current "$OLD" kaudu. CLI räsistab $OLD SHA-256-ga ja võrdleb praegu salvestatud väärtuse kokkuvõttega. Kattuvus: kirjutamine läbi. Lahknevus: keeldutud, logitud auditisse.
  • Eelneva väärtuse kontrollimata pööramiseks kasuta --rotate-secret (vastastikku välistatud --current-ga). See logitakse auditisse pööramisena.

Mudel sulgeb kolm ründepinda:

  1. Vaikne pööramine: kutsuja (agent või inimene), kellel pole juurdepääsu $OLD-le, ei saa asendada seda enda valitud väärtusega.
  2. Eksfiltreermine katsetamise teel: kokkuvõtte vastus ei sisalda kunagi lihtteksti; isegi rikutud auditi logis kuvatakse expected abc12345…, got deadbeef…, mitte aluseks olevaid väärtusi.
  3. Tootmiskonfiguratsioonile juhuslik kirjutamine: nõuab iga kord tahtlikku --current-i, isegi TTY-s. Tabab vea “tahtsin seada STRIPE_TEST, aga olen tootmise shellis”.

Struktureeritud järgmise toimingu vihjed

Kui eeltingimus ebaõnnestub, kannab JSON-ümbrik (--output json) struktureeritud välja errors[].next, mis ütleb agentidele täpselt, mida soovitada inimesele teha:

{
  "errors": [{
    "code": "PRECONDITION_MISMATCH",
    "message": "...",
    "next": {
      "summary": "Provide the current value or acknowledge rotation.",
      "options": [
        { "description": "Re-read current digest, then retry with --current",
          "run": "rdc repo secret get --name mail --key STRIPE_KEY" },
        { "description": "Skip the precondition (rotation, audited)",
          "run": "rdc repo secret set --name mail --key STRIPE_KEY --value <new> --mode file --rotate-secret" }
      ]
    }
  }]
}

Agendid peaksid edastama next.options[].run sõna-sõnalt inimesele, mitte koostama ise käske. See väldib tõrkeviisi “agent leiutab käsu, mida pole olemas” ja hoiab operaatori kontrolli tegeliku toimingu üle.

Töötatud näide

# Avastab redakteerimise asendaja lühikokkuvõtte (ohutu agentide jaoks).
$ rdc config field get --pointer /credentials/cfDnsApiToken
{"pointer": "/credentials/cfDnsApiToken", "value": "<redacted:secret>:abc12345"}

# Katse üle kirjutada ilma tõendita: keeldutud.
$ rdc config field set --pointer /credentials/cfDnsApiToken --new '"agent-picked-value"'
 Precondition failed: sensitive path requires --current (or --rotate-secret)

# Praeguse lihtteksti esitamine: lubatud.
$ rdc config field set --pointer /credentials/cfDnsApiToken \
    --current "$OLD_CF_TOKEN" \
    --new   "$NEW_CF_TOKEN"
Set /credentials/cfDnsApiToken

Kui agendil polnud kunagi $OLD_CF_TOKEN, ei saa ta eeltingimust täita ja pööramine lükatakse tagasi. Kasutaja, kellel see on, saab seda siiski teha kas redaktori kaudu või --current kasutades oma shellist.

Vaikimisi redakteerimine

Iga rdc käsk, mis loeb tundlikku olekut: config show, config field get, config machine list, config edit --dump: tagastab salaväljade jaoks redakteerimise asendajad, mitte lihtteksti:

"sshKey":       "<redacted:credential>:9f3a2c1b"
"cfDnsApiToken":"<redacted:secret>:abc12345"
"storages.s3-prod.vaultContent": "<redacted:secret>:1f2e3d4c"

Asendaja 8-kohaline kuueteistkümnendarvu sufiks on sha256(canonicalize(value)) esimesed 8 märki: piisab kahe erineva väärtuse esmapilgul eristamiseks, kuid mitte ümberpööramiseks. Agent saab asendajat kasutada väärtuse muutumise jälgimiseks ilma seda kunagi nägemata.

--reveal tühistab redakteerimise inimestele interaktiivsel TTY-l. Agentidele keeldutakse olenemata TTY olekust. Iga grant kirjutab auditi kande reveal_granted; iga keeldumine kirjutab kande refused koos toimiva agendi signaalidega.

REDIACC_ALLOW_CONFIG_EDIT ülekate

Mõned toimingud: interaktiivne redaktor, --apply, field rotate: on mõeldud inimestele ja neil pole agendile ohutut teed. Kui soovid aktiivselt, et agent ühe neist teeks, sea:

export REDIACC_ALLOW_CONFIG_EDIT='*'          # täielik ümbersõit
# või
export REDIACC_ALLOW_CONFIG_EDIT='/credentials/ssh/privateKey,/infra/cfDnsZoneId'
# (komaga eraldatud ulatuse glob-mustrid: * metamärgid lubatud segmendi kaupa)

…ja agent pärib selle.

Oluline detail: ülekate peab ilmuma protsessis, mis asub pärilusahelas agendist ülalpool. Kui agent seab selle oma keskkonnas (või käivitatud alamshell’is), keeldub CLI ja teatab sellest:

Interactive editor is blocked in agent environments (REDIACC_ALLOW_CONFIG_EDIT was set but ancestry verification failed: the override must be set by your shell, not by an agent).

Mõju: agent ei saa seansi keskel export REDIACC_ALLOW_CONFIG_EDIT='*' käivitades turvamehhanismist mööda rääkida. Ainult vanemprotsess (sina, oma terminalis, enne agendi käivitamist) saab selle ukse avada.

Platvormi tugi: kuidas ülekade on iga OS-i peal kontrollitud

REDIACC_ALLOW_CONFIG_EDIT ja REDIACC_ALLOW_GRAND_REPO mõlemad sõltuvad pärilusahela kontrollimisest, et tõendada, et ülekate seati sinu poolt, mitte agendi poolt. Kontroll toimib Linuxis, macOS-is ja Windowsil, kuid tunnistaja, mida see loeb, erineb platvormide lõikes, ja samuti erineb garantii tugevus:

PlatvormTunnistajaTugevus
Linux/proc/<pid>/environ iga protsessi jaoks ahelas ülespooleExec-ajahetkese hetktõmmis, kerneli poolt serveeritud. Protsess ei saa tagantjärele muuta, millega see käivitati.
macOSkern.procargs2 sysctl, loetakse väikese abiprogrammi poolt, mis on sisse ehitatud rdc-sseSama exec-ajahetkese hetktõmmise omadus nagu Linuxis. Loetav oma protsesside jaoks ilma root-õigusteta.
WindowsIga esivanema protsessi live-keskkonna plokk (PEB), loetud sama abiprogrammiga, PID-taaskasutuse kaitsegaNõrgem: Windows ei säilita exec-ajahetkese hetktõmmist, nii et kontroll loeb praegust mälu. Esivanemate all korrupteerimine on endiselt muutumatu normaal agendi käskude poolt, kuid tunnistaja pole kerneli-külmutatud nagu Linuxis ja macOS-is.

macOS-il ja Windowsil käivitab CLI oma komplektis oleva renet binaarfaili lugemiseks; abiline teatab, milliseid jälgitavaid muutujaid iga esivanem kannab, ja kõik otsustuslogika jääb CLI-sse. Kui abiline puudub, on vananenud või ebaõnnestub mingil põhjusel, ei saa CLI ülekatet kontrollida ja nurjub turvaliselt: ülekate lükatakse tagasi ja veateade ütleb, et kontrollimine pole saadaval, mitte et oled midagi valesti teinud. Toimiv installatsioon ei näita kunagi seda sõnumit; rdc uuesti paigaldamine taastab abiprogrammi.

Mis jääb tõeseks kõigil platvormidel: ülekate peab juba olema agendi protsessi keskkonnas selle käivitamisel. Ekspordi see oma terminalis, seejärel käivita agent. Agent, kes seab muutuja seansi keskel, lükatakse tagasi.

Auditi logi

Iga muudatus, iga keeldumine, iga --reveal grant kirjutab JSONL-rea faili ~/.config/rediacc/audit.log.jsonl (õigus 0600, rotatsioon 10 MB juures). Iga rida on räsiaheldatud: selle väli prevHash on sha256("<eelmine rida>"). Mis tahes rea rikkumine katkestab ahela kõigil järgnevatel ridadel.

{"ts":"2026-04-21T10:02:47.831Z","actor":{"kind":"agent","agentSignals":["CLAUDECODE"]},"command":"config field set","paths":["/credentials/cfDnsApiToken"],"outcome":"ok","configId":"...","configVersion":48,"prevHash":"sha256:9f3a..."}
{"ts":"2026-04-21T10:02:51.114Z","actor":{"kind":"agent","agentSignals":["CLAUDECODE"]},"command":"config edit","paths":[],"outcome":"refused","reason":"agent without REDIACC_ALLOW_CONFIG_EDIT=*","prevHash":"sha256:abc1..."}
{"ts":"2026-04-21T10:03:05.220Z","actor":{"kind":"human"},"command":"config show --reveal","paths":[],"outcome":"reveal_granted","configId":"...","configVersion":48,"prevHash":"sha256:deac..."}

Vaatamine

# Loetleb hiljutised kanded
rdc config audit log --since 24h

# Filtreerib pointeri glob'i järgi
rdc config audit log --path '/credentials/*'

# Ainult agendist pärinevad kanded
rdc config audit log --actor agent

# Voogedastab uued kanded reaalajas (peatamiseks Ctrl+C)
rdc config audit tail

# Kontrollib, kas räsiahel on terve
rdc config audit verify
# → "Chain integrity verified across 247 entries."
#   VÕI
# → "Chain broken at line 103: file has been tampered with or corrupted."

Mida auditi logis kunagi ei esine

  • Salaväljade lihttekstväärtused
  • Paroolid, tokenid, SSH-võtmed
  • Vana/uue väärtuse --current eeltingimuse lahknevused (ainult 8-kohaline kokkuvõtte eesliide)

Logi on ohutu jagamiseks turvaülevaatajaga või veaportaalis esitamiseks.

Käitumusliku mudeli piirid

Agendi turvamehhanismid on käitumuslikud, mitte krüptograafilised. Sihikindel või suunatud agent, mis töötab sama UID-ga kui konfiguratsioonifail, saab alati teha cat ~/.config/rediacc/rediacc.json ja lugeda lihtteksti, kuna fail on protsessile loetav.

Tõeliseks krüptograafiliseks jõustamiseks kasuta krüpteeritud konfiguratsioonisalve: saladused elavad serveripoolel, iga tundlik väli kannab välja kohast HMAC-sidet ja konto töötaja keeldub kirjutustest, mille --current eeltingimus ei kata selle salvestatut räsiga. Server ei näe kunagi lihtteksti (null-teadmine), kuid ta jõustab värava.

Kohalike failide puhul on lihtne tee turvaline tee. Kaugmälu puhul on ka ümbersõidutee krüptograafiliselt raske.

Mida Rediacc ei isoleeri

Sellel lehel olevad agendi turvamehhanismid kaitsevad Rediacc oma infrastruktuuri: konfiguratsioonifaili, repo-kohast Dockeri daemoni, LUKS-krüpteeritud repositooriumi andmeid, ulatustatud SSH-liivakasti. Need ei kaitse väliseid teenuseid, mille volitused su repositoorium hoiab.

Repositooriumi fork on vanema köite BTRFS-reflink. Kõik, mis asub vanemaga kettal, on fork’is bait-identsne: kood, andmed ja .env-failid ühesuguselt. Kui su repositoorium sisaldab STRIPE_LIVE_KEY-d, AWS_ACCESS_KEY_ID-d, Railway API-tokenit või mis tahes muud pikaajalise kolmanda osapoole teenuse volitust, pärib fork selle. Fork’i liivakastis tegutsev agent saab seda faili lugeda, väärtust eksfiltreerida või kasutada kolmanda osapoole API kutsumiseks. Kolmanda osapoole teenusel pole võimalust teada, et kõne tuli fork’ist, mitte tootmisest.

See on jagatud vastutuse piir:

PiirOmanik
Repositooriumi andmed, ühenduspunkt-nimeruum, Dockeri ulatus, agendi turvamehhanismid, auditi logi, juurutusaegne saladuste süstimineRediacc
Rakenduse kood, mis neid saladusi kasutab, ja kõik ehitusajal pilti lisatud volitusedRepositooriumi arendaja

Peamine leevendus on sisseehitatud: repo-kohased saladused on salvestatud eraldiseisvasse tasandisse krüpteeritud repositooriumi pildist ja neid ei kopeerita fork-piiri üle. Fork’i konteinerid käivituvad tühja saladuste kaardiga ja identifitseerivad end väliste süsteemide jaoks erinevate põhisubjektidena kui vanem. Sea need käsuga rdc repo secret set (env-režiim compose interpoleerimiseks, faili-režiim tmpfs secrets: plokkideks). Muudatuste värav on sümmeetriline. Nii inimesed kui agendid peavad olemasoleva väärtuse üle kirjutamiseks või kustutamiseks esitama --current (passwd-stiilis eeltingimus) või --rotate-secret (logitud pööramine).

Repo-vaheline isoleerimine on jõustatud. Pahatahtlik või hooletu compose-fail repo B-s ei saa viidata repo A saladuste kataloogile. Renet’i compose-validaator keeldub kõvakoodiliselt igast secrets: file:, configs: file: või env_file: teest, mis viitab väljapoole praeguse repo ${REDIACC_NETWORK_ID} kataloogi, ja keeldumine EI ole --unsafe-ga ületatav. Kaitsemehaanikate kihistamine: Landlock-liivakast Rediaccfile bash-alamprotsessi ümber piirab failisüsteemi lugemist ainult praeguse võrgu saladuste kataloogiga, nii et cat /var/run/rediacc/secrets/<other>/X pahatahtlikust Rediaccfile’ist ebaõnnestub EACCES-iga kerneli tasemel.

Kaks täiendavat mustrit sulgevad äärjuhtumid:

  1. Ära lisa tootmisvolitusi repositooriumi failisüsteemi. .env-fail, mis on pildile commititud, või volitused, mis on säilitatud mahule up() käigus, reflingatakse fork’ile. Repo-kohaste saladuste funktsioon kaitseb ainult saladuste tasandis hoitavaid väärtusi. See ei saa tagantjärele kaitsta baite, mis juba asuvad LUKS-pildis. Olemasolevate repo-de puhul baked-in .env-failidega tõsta need käsitsi repo-kohastesse saladustesse.
  2. Piira fork’i väljaminevat võrku eBPF-egress-filtreerimisega, nii et fork saab jõuda ainult localhost’i ja eksplitsiitsete liivakasti lõpp-punktideni. Rediacc repo-kohane võrgueristamine on alus; fork-kohased egress-allowlist’id pole täna ehitatud, kuid tee on avatud.

Rediacc hoolitseb juurutusaegse süstimise, fork-vahelise eristamise ja repo-vahelise eristamise eest. “Ära lisa pildile” pool on sinu kanda.

Kiiretseptid

Luba agendil pöörata üht pilvetokenit

# Sina, enne agendi käivitamist:
export REDIACC_ALLOW_CONFIG_EDIT='/credentials/cfDnsApiToken'
claude-code              # või cursor, gemini jne.

Nüüd saab agent teha config field rotate /credentials/cfDnsApiToken --new …, kuid ikka ei saa redigeerida /credentials/ssh/privateKey ega avada interaktiivset redaktorit.

Luba agendil teha üks lai konfiguratsiooniredakteerimise seanss

export REDIACC_ALLOW_CONFIG_EDIT='*'
claude-code

Agent saab avada rdc config edit, kasutada --reveal ja käivitada field rotate. Iga toiming logitakse ikka auditisse koos actor.kind: agent ja signaaliga CLAUDECODE.

Avasta, milliseid välju agendil on lubatud puudutada

rdc config field list --sensitive --output json

Tagastab iga pointeri malli, selle liigi (secret / credential / pii / identifier) ja kas see on sidutud serveripoolse HMAC-ümbrikusse.

Vt ka