Securitate
Securitate, și ce nu este certificat
Ce protejăm, cum, și ce nu are încă niciun certificat pe el.
O organizație nu vede alta
Fiecare model care aparține unui client poartă un domeniu de organizație aplicat global, la nivel de interogare. Nu este un filtru pus în controller și uitat într-unul: dacă domeniul nu este legat, interogarea nu întoarce nimic.
Peste el vin politicile pe fiecare acțiune și rezolvarea tenantului înaintea legării modelelor la rute. Ordinea aceea contează. Cu ea invers, o cerere pentru altă organizație rezolva o înregistrare reală înainte să ruleze vreo politică. Bug-ul a existat, a fost găsit de teste, a fost reparat global și are acum un test de regresie.
Munca pusă la coadă își leagă tenantul explicit. O sarcină care rulează peste o oră nu are de la ce cerere să îl moștenească, iar o sarcină fără tenant ar rula cu domeniul inert.
| domeniu global | Pe fiecare model care aparține unei organizații. |
|---|---|
| politici | Pe fiecare acțiune, nu doar la citire. |
| ordine middleware | Tenantul se rezolvă înainte de legarea modelelor la rute. |
| sarcini la coadă | Tenant legat explicit, nu moștenit. |
Roluri, permisiuni și chei
Zece roluri peste un catalog de 71 de permisiuni, de la proprietar până la operator, membru și analist. Rolurile sunt legate de organizație, nu globale, deci același om poate fi administrator într-un loc și operator în altul.
Cheile de API au domenii de acces separate pe citire, scriere și operații distructive, se pot roti fără să își piardă identitatea, și sunt limitate pe cheie, nu pe adresă IP. Cheile publice, cele destinate browserului, sunt o clasă separată și nu pot face ce fac cele private.
Provizionarea prin SCIM merge pe un token propriu. Este intenționat altă clasă de credențială: un token care poate suspenda oameni trebuie să poată fi revocat singur.
| roluri | 10, legate de organizație. |
|---|---|
| permisiuni | 71 în catalog. |
| chei API | Domenii de acces, rotire, limită pe cheie. |
| SCIM | Token propriu, revocabil separat. |
| audit | Cine ce a schimbat, ca înregistrări citibile în consolă. |
Ce se scrie, ce se maschează
Un apel lasă în urmă evenimente, transcriere, mesaje, metrici, costuri și, dacă ai pornit-o, o înregistrare. Toate stau în organizația ta.
Redactarea datelor personale se aplică pe transcrieri și pe loguri, după apel, dacă politica de retenție a apelului o cere. Recunoaște carduri — verificate cu Luhn, ca o referință de comandă de 16 cifre să nu fie mascată degeaba — adrese de e-mail, numere de telefon, IBAN-uri și coduri naționale, inclusiv CNP-ul românesc.
Spunem limpede ce nu este redactarea: o transformare pe date pe care deja le avem. Nu este o garanție că datele sensibile nu au ajuns niciodată la platformă.
| card bancar | Între 13 și 19 cifre, validat cu Luhn înainte de mascare. |
|---|---|
| Mascat în transcriere și în loguri. | |
| telefon | E.164 și formele naționale uzuale, cu tipar conservator. |
| IBAN | Mascat. |
| cod național | CNP românesc, SSN american, NINo britanic. |
| retenție | O sarcină zilnică aplică politica. Ștergerea înregistrării se face la cerere; ștergerea conținutului apelului nu are interfață. |
Fișierele pot sta la tine
Înregistrările și artefactele sunt partea cel mai probabil guvernată de politica altcuiva, așa că destinația se configurează pe organizație. Bucketul platformei este o opțiune din cinci, nu singura.
Un driver al cărui pachet de adaptor nu este instalat nu apare deloc în interfață. Un depozit pe care îl poți alege și nu îl poți folosi este mai rău decât unul absent: ai afla la prima înregistrare.
Fișierele se servesc prin URL-uri semnate cu viață scurtă. Regiunea implicită a instalării este configurabilă și pornește pe Uniunea Europeană.
| destinații | Bucketul platformei, S3, Cloudflare R2, Azure Blob, compatibil S3. |
|---|---|
| URL-uri | Semnate, cu expirare de 15 minute. |
| regiune | Configurabilă pe instalare, implicit Uniunea Europeană. |
| transfer | Mutarea în stocarea ta se face după apel, printr-o sarcină pusă la coadă. |
Ce nu avem
Nu avem SOC 2. Nu avem ISO 27001. Nu avem atestare HIPAA sau PCI. Nu am făcut un test de penetrare cu o firmă terță.
Autentificarea unică prin SAML nu este implementată; există OAuth și SCIM pentru utilizatori, dar nu și grupuri SCIM. Uneltele de tip shell și computer refuză să ruleze fiindcă nu există încă o cutie izolată pentru ele — refuzul este alegerea corectă, dar tot înseamnă că funcția lipsește.
Dacă ai nevoie de vreuna dintre certificările de mai sus ca să semnezi, încă nu suntem noi.
| SOC 2 / ISO 27001 | Niciuna. Fără audit început. |
|---|---|
| HIPAA / PCI | Fără atestare. |
| test de penetrare | Niciunul făcut de o firmă terță. |
| SAML | Neimplementat. Are nevoie de o bibliotecă de semnătură XML. |
| grupuri SCIM | Neimplementate. Utilizatorii se pot provizona, grupurile nu. |
Ce ne întreabă echipele de securitate
- Sunteți certificați?
- Nu. Nicio certificare, niciun audit început. Dacă departamentul tău de conformitate cere SOC 2 sau ISO 27001, răspunsul de azi este nu.
- Unde stau datele?
- Regiunea instalării este configurabilă și pornește pe Uniunea Europeană. Furnizorii de model, transcriere și voce își au propriile regiuni, iar acolo alegerea este a ta prin ce furnizor configurezi.
- Putem ține înregistrările la noi?
- Da, și este calea recomandată. Adaugi o destinație de stocare pe S3, R2, Azure Blob sau un depozit compatibil S3, iar fișierele se mută acolo după apel.
- Cum ștergem datele unui client?
- Retenția rulează zilnic după politica setată pentru tine, iar ștergerea unei înregistrări e o operație pe care o poți face la cerere. Ștergerea restului unui apel — transcriere, mesaje, conținutul evenimentelor — trece prin retenție sau printr-o comandă, nu printr-un buton, iar endpoint-ul de API care șterge un apel e o ștergere logică. Pagina despre drepturi spune poziția pentru fiecare drept.
Chestionarul pe care ești pe cale să îl trimiți
Cea mai mare parte are deja răspuns pe pagina asta, în lista subîmputerniciților și în acordul de prelucrare. Trimite restul și primești răspunsuri scrise, inclusiv acolo unde răspunsul e că nu avem.