Zakończyliśmy nasz audyt RODO. Oto, co faktycznie zamknęliśmy.
Kilka tygodni temu napisaliśmy, że „zgodność z RODO” na stronie głównej narzędzia wideo oznacza mniej, niż myślisz — że RODO to zbiór obowiązków spoczywających na Tobie, jako administratorze danych, które dostawca pomaga Ci spełnić lub po cichu zostawia na Twoim biurku. Uczciwym sposobem na poparcie tej tezy jest wykonanie pracy po naszej stronie i pokazanie jej, punkt po punkcie.
I tak zrobiliśmy. Przeprowadziliśmy pełny audyt bazy kodu InterMIND pod kątem obowiązków spoczywających na nas jako podmiocie przetwarzającym, naprawiliśmy każdą lukę, za którą stał kod, i zweryfikowaliśmy każdą z nich na działającym produkcie. Ten wpis to raport końcowy — nie odznaka, lecz lista kontrolna z naszymi odpowiedziami.
Celowo nie twierdzimy, że jesteśmy „w 100% certyfikowani przez RODO”. RODO to nie certyfikat, który można zdać — a my nie będziemy machać odznaką ISO, której jeszcze nie posiadamy. To, co możemy powiedzieć: architektoniczne i procesowe obowiązki, przez które przechodzi IOD, mają teraz konkretne, weryfikowalne odpowiedzi, z których każda została sprawdzona na uruchomionym kodzie.
Co zamknęliśmy
Prawo do usunięcia danych (art. 17) — kaskada faktycznie działa
Usunięcie konta nie polega jedynie na jego dezaktywacji. POST /api/user/delete-account uruchamia prawdziwą kaskadę: niszczy Twoje spotkania → uczestników, wiadomości, konferencje, transkrypcje; czyści obiekty blob z pamięci masowej Tigris przed kaskadą bazy danych, dzięki czemu nic nie zostaje osierocone — załączniki czatu oraz pliki nagrań wideo, obie kolumny; a także anuluje Twoje subskrypcje Stripe i usuwa klienta Stripe. Usuwanie na żądanie również istnieje — usuń kanał lub wiadomość z interfejsu użytkownika i zniknie. Konta anonimowe (gości) mają własny punkt końcowy usuwania oraz proces w tle uruchamiany co 6 godzin pod nadzorowanym cronem. Audyt ujawnił w tym miejscu jedną lukę — obiekty blob z nagraniami, które kaskada bazy danych porzuciła, ale pamięć masowa je zachowała — i zamknęliśmy ją: usunięcie danych nie pozostawia teraz niczego w pamięci obiektowej.
Przechowywanie danych (art. 5 ust. 1 lit. e) — udokumentowane kryterium
Art. 5 ust. 1 lit. e nie wymaga automatycznego czasu życia (TTL). Wymaga zdefiniowanego kryterium przechowywania. Nasze jest teraz zapisane w Polityce Prywatności: dane są przechowywane do czasu, aż Ty lub właściciel Twojego zespołu je usuniecie, a usunięcie konta kasuje wszystko. To ten sam model, na którym działają narzędzia do współpracy, takie jak Slack i Notion — trwałość to oczekiwane zachowanie, a Ty zachowujesz nad nim kontrolę. Kryterium jest jasno określone, a nie domyślne.
Zgoda na analitykę (art. 6/7) — domyślna rezygnacja
Baner zgody Usercentrics (wyświetlany użytkownikom z UE) kontroluje dostęp do analityki, a PostHog jest dostarczany z opt_out_capturing_by_default: true — nic nie jest przechwytywane do czasu udzielenia zgody, a nie odwrotnie.
Przenoszenie danych (art. 20) — prawdziwy eksport
GET /api/user/export tworzy plik ZIP z Twoimi spotkaniami, wiadomościami, nagraniami i tłumaczeniami, z 7-dniowym oknem pobierania i automatycznym czyszczeniem. Dostęp, usuwanie i przenoszenie danych to działające narzędzia, a nie obietnice w polityce.
Treść spotkania trafia do jednej bramy AI, w UE — wybranej przez organizację
Największy strumień treści ze spotkań — tłumaczenie głosu i czatu na żywo — działa na naszym własnym silniku we Francji, nigdy na LLM od firmy trzeciej. Kroki AI, które faktycznie używają modelu ogólnego przeznaczenia (streszczenie, podsumowania dokumentów, działania generatywne w edytorze notatek, Ask AI) działają na bramie AI wybranej przez organizację — Azure OpenAI w strefie danych UE domyślnie, Vertex AI EU lub Amazon Bedrock we Frankfurcie do wyboru, każda w naszej własnej dzierżawie (tenant) z zerowym przechowywaniem danych i bez uczenia na treściach klientów, lub na własnym punkcie końcowym organizacji; jeden mechanizm rozstrzygający w kodzie wybiera bramę dla każdego miejsca wywołania, więc nie ma drugiej ścieżki. Usunęliśmy również nazwiska uczestników i tekst wypowiedzi z logów przeglądarkowych konferencji, które nagrywanie sesji PostHog mogłoby w innym przypadku przechwycić. Pełna mapa poszczególnych dostawców znajduje się w artykule Gdzie faktycznie odbywa się jedno spotkanie InterMIND.
Przejrzystość — podprocesorzy i rejestry przetwarzania, opublikowane
Lista podprocesorów jest publicznie dostępna, wraz z informacją o tym, co robi każdy dostawca i gdzie ma siedzibę — a nie „dostępna na życzenie”. Za nią kryje się Rejestr Czynności Przetwarzania (ROPA) zbudowany na podstawie aktywnego schematu: 11 operacji przetwarzania, środki bezpieczeństwa dla każdej z nich oraz ścieżki usuwania / przenoszenia danych. Nasza Polityka Prywatności i Regulamin działają teraz pod naszą własną osobowością prawną, z opisanym rzeczywistym łańcuchem przetwarzania.
Środowisko uruchomieniowe w UE — przypięte, nie tylko obiecane
Każdy etap środowiska uruchomieniowego, przez które przechodzi spotkanie, znajduje się w UE: aplikacja i interfejsy API na Vercel Frankfurt, serwer spotkań na Fly Paryż, dane aplikacji w Neon Postgres (AWS Frankfurt), błędy na Sentry EU, analityka na PostHog EU, e-mail przez Resend Irlandia. Przechowywanie obiektów na Tigris jest teraz przypięte do regionów UE (Frankfurt + Amsterdam) — każdy nowy zapis trafia do UE niezależnie od tego, gdzie znajduje się użytkownik. Pełna architektura znajduje się na naszej stronie bezpieczeństwa.