nessie

Vyrobené v EÚ a miesto, kde sú vaše údaje

Kde sa Nessie vyvíja, kde sú uložené vaše údaje a čo kontrolujete, keď ju prevádzkujete sami.

Kto to vyvíja a podľa akého práva

Nessie vyvíja spoločnosť UnlikeOtherAI s.r.o., ktorá je zaregistrovaná v Českej republike a riadi sa českým právom.

Táto stránka opisuje, ako je softvér postavený a kde beží. Nie je vyhlásením o zhode: Nessie nemá žiadnu bezpečnostnú certifikáciu a nič z tu uvedeného sa tak nemá chápať. Aké osobné údaje sa spracúvajú a na akom základe, upravujú zásady ochrany osobných údajov, ktoré sú samostatnou stránkou.

Kde beží hostovaný produkt

Nessie Cloud beží u európskych poskytovateľov hostingu — Scaleway, Hetzner a ďalších. Od každého poskytovateľa si vyberáme jeho najlepšiu službu, takže rôzne časti produktu môžu bežať u rôznych poskytovateľov, všetci však v Európe.

Čokoľvek presnejšie — konkrétnu lokalitu, mesto či dátové centrum — tu zámerne neuvádzame, pretože by to zastarelo a nikto by si to nevšimol.

Pri vlastnej prevádzke rozhodujete vy

To, kde beží vlastná inštancia, je nastavenie nasadenia, nie nastavenie produktu. Cesta s jedným strojom je stack Docker Compose, ktorý umiestnite na stroj podľa vlastného výberu. V strome Terraformu pre spravovaný cloud je región vstupom bez akejkoľvek predvolenej hodnoty: nič sa tam nedá odhadnúť, a preto tam nič nemá predvolenú hodnotu, a databáza, úložisko objektov aj služby sa riadia regiónom, ktorý uvediete.

K tej istej otázke patria dva štrukturálne detaily. Fronta aj realtime transport sú obe postavené na PostgreSQL — v ceste nie je žiadny Redis ani message broker, takže nie je tretí systém, ktorý by bolo treba niekam umiestniť. A úložisko objektov je kompatibilné so S3 a nie je viazané na jedného dodávateľa; referenčné nasadenie spúšťa MinIO v kontajneri v súkromnej sieti bez vlastného vstupu zvonka. Časti, ktoré niekde bežať musia, sú databáza, úložisko objektov a dve služby v Node, a všetky bežia tam, kam ich umiestnite. Ako to celé postaviť, nájdete na stránke s inštaláciou.

Čo Nessie uchováva — a čo zámerne neuchováva

Identita sa nekopíruje

Pri prihlásení cez UnlikeOtherAI ľudskú identitu spravuje a ukladá poskytovateľ identity — autentifikačné faktory, profily, členstvo v organizáciách a tímoch a pozvánky. Nessie je spoliehajúca sa strana, nie druhý systém identít. Je to rozhodnutie o dátach rovnako ako o architektúre: identitu, ktorú Nessie nikdy neukladá, nemôže prezradiť, stratiť ani zabudnúť zmazať.

Tabuľka users v skutočnosti uchováva stabilný identifikátor používateľa od poskytovateľa — kľúč, cez ktorý sa rozlišuje všetko ostatné —, e-mailovú adresu, neautoritatívnu kópiu zobrazovaného mena a avatara a polia lokálne pre produkt (predvoľby, oslovenie, verziu tokenu používanú na zrušenie relácií). Kópia existuje len preto, aby sa dalo zobraziť meno a obrázok bez dotazu na každý riadok, a znovu sa synchronizuje z overených tvrdení poskytovateľa pri prihlásení, pri prepnutí tímu a pri obnovení relácie. Nič sa nevymýšľa: osoba, ktorú poskytovateľ nepomenoval, nesie svoju e-mailovú adresu, kým sa tak nestane. Hash hesla existuje len pre úvodného vlastníka inštalácie, ktorá nemá žiadneho poskytovateľa identity.

To isté platí pre štruktúru. Jedna organizácia u poskytovateľa je jedna organizácia v Nessie, viazaná identifikátorom organizácie od poskytovateľa; tím bez väzby na poskytovateľa odpovie 404 TEAM_NOT_LINKED namiesto toho, aby sa vrátil k lokálnemu odhadu, a čítanie aktuálneho zoznamu členov ide k poskytovateľovi identity a nič neukladá.

Dve kópie ešte neodišli a bolo by nepoctivé naznačovať opak. Názvy organizácií a tímov sa popri väzbových identifikátoroch stále ukladajú lokálne a lokálne záznamy o členstve stále oprávňujú bežné požiadavky medzi synchronizáciami. Odstránenie oboch je evidovaná otvorená práca v repozitári, nie niečo, čo je už hotové.

Nič komerčné

Platby spravuje centrálna fakturačná služba. Nessie neukladá zákazníka, predplatné, faktúru, cenu, zostatok kreditu, politiku dobíjania, súhlas s platbou, výpis ani stav zrušenia u poskytovateľa platieb a tarify nepočíta. Číta hodnoty pripravené na zobrazenie a len ich ukazuje.

Tajomstvá

Na uloženie akéhokoľvek tajomstva je potrebný nakonfigurovaný trezor. Zámerne neexistuje záloha v databáze ani cesta s čistým textom: bez trezora ukladanie, rotácia a odvolanie tajomstva vrátia chybu a neprejdú na niečo menej bezpečné. Vlastné záznamy Nessie o tajomstve neobsahujú hodnotu, šifrovaný text, kľúč ani token trezora — len nepriehľadný odkaz a jeho metadáta — a cesty v trezore sa skladajú výlučne zo štrukturálnych identifikátorov, nikdy nie z názvu organizácie, tímu, projektu alebo osoby.

Poverenia, ktoré musí Nessie držať sama, aby konala ako klient OAuth — poverenia konektorov a schránok, tajomstvá webhookov, materiál na obnovu relácií, dáta executora — sú zapečatené v obálkach AES-256-GCM viazaných na účel, pod verzovaným súborom kľúčov, ktorý je koreňom oddeleným od tajomstva na podpisovanie relácií, so zdokumentovaným postupom rotácie.

Platí aj pravidlo o modeloch: o tajomstve sa môže vedieť, že existuje, a môže byť povolené na použitie, ale jeho obsah nesmie vstúpiť do kontextu modelu, promptov, argumentov nástrojov, výsledkov nástrojov, pamäte, embeddingov, vyhľadávania, logov ani správ. Agent môže dostať schopnosť tajomstvo použiť. Schopnosť tajomstvo odhaliť nemôže dostať nikdy.

To, či sú podkladové disky šifrované, je vlastnosť stroja, na ktorom nasadenie beží. Repozitár nepreukazuje šifrovanie na úrovni zväzkov pre databázu ani pre zväzky úložiska objektov, preto to táto stránka netvrdí.

Izolácia nájomcov

Nessie je podľa návrhu viacnájomnícka: jedna databáza, v ktorej každý riadok patrí presne jednej organizácii a každá podriadená tabuľka nesie stĺpec organization_id. Izolácia sa vynucuje na dvoch miestach — v klauzule rozsahu, ktorú nesie každý dotaz, a v skutočných cudzích kľúčoch na tomto stĺpci, ktoré pribudli v rámci štyridsiatich dvoch obmedzení po tom, čo interný audit zistil, že stĺpec je v desiatkach tabuliek prítomný, ale bez obmedzenia.

Sada konformných testov drží túto invariantu na hranici HTTP. Nasadí maximálne privilegovaného útočníka — plnohodnotného vlastníka vlastnej organizácie — a overuje, že každé kanonické čítanie zdrojov inej organizácie skončí odpoveďou 403, 404 alebo prázdnym výsledkom a každá kanonická zmena je zamietnutá bez dotknutia riadka druhej organizácie. Pokrýva kanály, schválenia, auditný záznam, spúšťače, agentov a ich väzby, behy, projekty, úlohy, vlákna, pripojenia, inštalácie pracovných postupov, inštancie MCP, znalostnú bázu a upozornenia.

Presne k mechanizmu: ide o vynucovanie na úrovni aplikácie plus cudzie kľúče, nie o zabezpečenie na úrovni riadkov v PostgreSQL (row-level security). Neexistuje žiadna politika RLS ani záchranná sieť na strane databázy a sada konformných testov beží proti vernému úložisku v pamäti, nie proti živej databáze, takže dokazuje klauzuly rozsahu, ktoré kód zapisuje, nie SQL, ktoré server vykoná. Repozitár to uvádza v dokumentácii samotnej sady a rovnako to uvádza aj táto stránka.

Auditná stopa

Zaznamenáva sa každá významná akcia: kto konal a v akej úlohe — osoba, agent, služba —, čo urobil, na akom zdroji, v ktorej organizácii, projekte, tíme alebo kanáli, či uspel, alebo bol odmietnutý, prečo, a identifikátor požiadavky, adresu a user agent, s ktorými prišla.

Záznam je podľa návrhu iba pripájací a zvonka doň nie je možné zapisovať: POST /api/audit-log neexistuje a je to zámer. Záznamy sú zreťazené — každý nesie digest SHA-256 vlastných kanonických polí spolu s digestom predchádzajúceho záznamu danej organizácie —, takže upravený alebo odstránený riadok reťaz preruší a dá sa to zistiť. Vlastník alebo správca organizácie môže túto reťaz kedykoľvek prejsť a ak sa pretrhla, dozvie sa, kde sa to stalo prvýkrát.

Dve poctivé výhrady. Reťaz robí záznam zjavne odhaliteľným pri úprave, nie odolným voči úprave: nestojí za ním odobratie práva zápisu na úrovni databázy ani úložisko na jeden zápis, takže zárukou je odhalenie, nie prevencia. A záznamy sa štandardne uchovávajú bez časového obmedzenia — konfigurovateľné uchovávanie s exportom pred vymazaním je navrhnuté, nie postavené. Záznamy tiež nesmú obsahovať tajomstvá ani celé telá požiadaviek a pevne daná množina názvov citlivých polí metadát sa pri zápise maskuje.

Evidencia nákladov

Každé vyvolanie modelu sa zaznamená k organizácii a k používateľovi, tímu, projektu, kanálu, agentovi a behu, z ktorého pochádza, spolu so spotrebovanými tokenmi a s nákladmi, ktoré nahlásil poskytovateľ, aj s vlastným odhadom Nessie uloženými vedľa seba. Metrika, ktorú poskytovateľ nenahlási, sa uloží ako null a nehádže sa. Prehľady môže čítať vlastník alebo správca organizácie.

Táto evidencia je prevádzková telemetria — koľko organizácia minula a v čí prospech. Nie je to faktúra ani fakturačná autorita.

Tretie strany pri používaní hostovaného produktu

Hostované nasadenie komunikuje s malou pevnou množinou služieb. Prevádzka modelov a webové vyhľadávanie nejdú k poskytovateľom priamo: obe odchádzajú cez jednu bránu, ktorú prevádzkuje UnlikeOtherAI a za ktorou stoja poskytovatelia modelov a vyhľadávania. Prihlasovanie a fakturácia idú na autentifikátor UnlikeOtherAI. Trezor tajomstiev je samoprevádzkovaný popri aplikácii. Odkazy na videohovory generované serverom štandardne používajú verejnú službu Jitsi.

Takmer všetko ostatné je vypnuté, kým to prevádzkovateľ nenakonfiguruje, a hovorí to otvorene namiesto toho, aby to ticho zlyhalo: pripojené účty Google, Microsoft a Slack; e-mail agentov cez Amazon SES, ktorú si nasadenie prevádzkuje vo vlastnom účte bez sprostredkovateľa; push notifikácie pre mobil a prehliadač; konektory výskumu a zdrojov tabúľ; cloudové prehliadače. Dva detaily stoja za spomenutie, lebo menia to, kam dáta idú:

  • Pripojené schránky zostávajú u vášho poskytovateľa. Pošta sa číta priamo u vášho poskytovateľa, cez IMAP a SMTP alebo cez jeho vlastné prihlásenie; Nessie ukladá zapečatené poverenie a o účte nič iné. Výnimkou je schránka, ktorú pripojíte do schránky sekcie Klienti: žiadate, aby sa jej konverzácie uchovávali pri každom zákazníkovi, a preto sa kopírujú.
  • Hlasové hovory v aplikácii cez Nessie neprechádzajú. API sprostredkuje poverenie a klient si otvorí zvukové spojenie sám. Diktovanie a telefonické hovory sú iné: ich zvuk prechádza cez Nessie k poskytovateľom reči a modelov, ktorí ho spracúvajú.

Jeden detail pri inferencii vychádza z rovnakého princípu: podpísané hlavičky s identitou volajúceho sa posielajú len nakonfigurovanému chatovému hostiteľovi, takže nasmerovanie embeddingov na iný koncový bod mu nikdy nepredá tvrdenie o delegovaní týkajúce sa osoby, ktorej text sa vkladá.

Hostovaný produkt využíva viacerých poskytovateľov inferencie a vyberá medzi nimi podľa nákladov a kvality. Organizácia si bude môcť v administrácii zvoliť, ktorých poskytovateľov smú jej agenti používať: iba západných, iba európskych, iba čínskych, alebo bez preferencie — najefektívnejší poskytovateľ pre každú úlohu. Vlastná inštancia si vyberá sama.

Pri vlastnej prevádzke sa toto všetko mení

Každá tretia strana vyššie je pri vlastnej inštancii voľbou konfigurácie. Inferenciu možno nasmerovať na ľubovoľný koncový bod kompatibilný s OpenAI, aj na ten na vašom vlastnom hardvéri. Konektory sú vypnuté, kým ich nezapnete. Podporovanou cestou je prihlásenie cez UnlikeOtherAI a nasadenie bez poskytovateľa identity beží ako jedna nepriviazaná organizácia s úvodným vlastníkom.

V tom je celý zmysel tohto usporiadania: softvér je rovnaký a rozhodnutia o tom, kde beží a čo smie dosiahnuť, patria tomu, kto ho prevádzkuje. Ako na to, popisuje stránka s inštaláciou.