Przejdź do głównej zawartości

Prywatność danych i polityki firmowe

Prywatność danych w pracy wspomaganej przez AI opiera się na czterostopniowej klasyfikacji — publiczne, wewnętrzne, poufne, zastrzeżone — która mówi, co może trafić do dostawcy modelu, egzekwowanej przez ustawienie retencji każdego narzędzia, skanowanie sekretów przed wysyłką, dane syntetyczne zamiast kopii produkcji, poświadczenia MCP o najmniejszych uprawnieniach i izolację środowisk trzymającą agenty z dala od produkcji.

Deweloper z twojego zespołu wkleja wynik zapytania do bazy w narzędzie AI, żeby zdebugować problem z wydajnością. Wynik zawiera adresy e-mail klientów, adresy rozliczeniowe i fragmenty numerów kart, a logi dostawcy trzymają teraz dane osobowe z twojej produkcyjnej bazy. Trzy linijki dalej, w innej sesji, ktoś wkleił pełny DATABASE_URL — host, użytkownika i hasło — żeby zapytać, czemu produkcja się zapycha. Trzecia osoba właśnie kieruje społecznościowy serwer MCP na produkcję z poświadczeniami administratora.

Każdy z tych ruchów wydaje się w danej chwili niegroźny i każdy z nich to scenariusz, który zabija firmowe wdrożenie AI, zanim się zacznie. Asystenci AI są bezpieczni na firmowym kodzie pod warunkiem, że skonfigurujesz je świadomie: sklasyfikuj, co może wyjść, włącz właściwe ustawienie retencji, nigdy nie pozwól, by sekret dotarł do modelu, i daj każdemu serwerowi MCP najmniejsze uprawnienia, jakich potrzebuje.

  • Czterostopniową klasyfikację danych, którą deweloperzy stosują bez zastanowienia, oraz konfigurację narzędzi, która ją egzekwuje
  • Wiedzę, co ustawienie prywatności każdego dostawcy faktycznie gwarantuje — i czego jawnie nie gwarantuje
  • Prompt do skanowania sekretów w każdym diffie plus prompt, który buduje skaner uruchamiany przez twoje hooki
  • Przepływ anonimizacji, który zastępuje migawki produkcji danymi syntetycznymi pasującymi do twojego schematu
  • Wzorzec najmniejszych uprawnień dla bazodanowych serwerów MCP, z dokładnym GRANT
  • Prompt do przeglądu bezpieczeństwa, który czyta kod wygenerowany przez AI jak wrogi pull request
  • Gotowe polityki, które zadowolą dział prawny, bezpieczeństwo i inżynierię

Nie wszystkie dane niosą to samo ryzyko przy wysyłce do narzędzi AI. Sklasyfikuj je raz, a każda późniejsza decyzja — które pliki ignorować, które prompty blokować, do której bazy agent może sięgać — wynika ze stopnia.

StopieńOpisPolityka dla narzędzi AIPrzykłady
PubliczneKod open source, publiczna dokumentacjaBez ograniczeńBiblioteki OSS, publiczne API, dokumentacja
WewnętrzneKod firmowy, dokumenty wewnętrzneDozwolone z trybem prywatnościLogika biznesowa, narzędzia wewnętrzne, dokumenty architektury
PoufneTajemnice handlowe, niewydane funkcjeDozwolone przy ścisłych kontrolachAlgorytmy, funkcje konkurencyjne, logika cenowa
ZastrzeżoneDane osobowe, poświadczenia, dane finansoweNigdy nie wysyłaj do narzędzi AIDane klientów, klucze API, dane płatnicze, dane zdrowotne

Stopień „wewnętrzne” wykonuje w tej tabeli cichą pracę: jest dozwolony z trybem prywatności, co znaczy, że cały system stopni trzyma się tylko wtedy, gdy wiesz, co tryb prywatności twojego narzędzia faktycznie gwarantuje.

Co naprawdę gwarantuje ustawienie retencji każdego narzędzia

Dział zatytułowany „Co naprawdę gwarantuje ustawienie retencji każdego narzędzia”

„Tryb prywatności” nie jest uniwersalny — każdy dostawca ma własną kontrolę i własną gwarancję. Dowiedz się, która dotyczy ciebie, zanim wkleisz choć jedną firmową linijkę.

Cursor ma jawny przełącznik Privacy Mode (Cursor Settings). Przy włączonym twój kod nie jest przechowywany przez Cursora ani używany do treningu — to gwarancja zerowej retencji danych (ZDR). Privacy Mode jest domyślnie włączony dla zespołów Enterprise, a administratorzy mogą wymusić go w całym zespole, tak by nikt nie mógł go wyłączyć. Indeksowanie wciąż liczy embeddingi, ale przy Privacy Mode czysty tekst kodu nie jest przechowywany po stronie serwera po zakończeniu żądania.

Klasyfikacja, której nikt nie widzi, to klasyfikacja, której nikt nie stosuje. Każde narzędzie ma plik ładowany, zanim agent cokolwiek zrobi, i mechanizm, który egzekwuje twarde krawędzie, zamiast je sugerować.

Użyj .cursor/rules, by zapisać politykę obchodzenia się z danymi:

.cursor/rules
DATA HANDLING POLICY:
Privacy Mode MUST be enabled at all times (Settings → Privacy).
NEVER include in prompts or context:
- Contents of .env, .env.*, or any secrets files
- Customer data, even for debugging (use anonymized samples)
- Production database query results
- API keys, tokens, certificates, or private keys
- Internal URLs that contain authentication tokens
ALWAYS use instead:
- .env.example with placeholder values
- Faker.js-generated test data that matches production schemas
- Redacted log entries: replace emails with user_XXX@example.com
- Mock credentials: sk_test_XXXXXXXXXXXX

Reguły to wskazówki. Egzekwowaniem jest .cursorignore, który w ogóle trzyma pliki poza indeksem:

.cursorignore
.env*
**/secrets/**
**/credentials/**
**/*.pem
**/*.key
config/production.*
database/seeds/production/**

Reguła nie zmienia się względem zwykłej higieny bezpieczeństwa, ale powierzchnia jest szersza: klucze API, tokeny, hasła i łańcuchy połączenia do bazy nigdy nie mogą pojawić się w prompcie. Odwołuj się do process.env.DATABASE_URL, a nie do dosłownej wartości. Najpewniejszym egzekwowaniem jest automatyzacja, a nie silna wola — wepnij gitleaks w hook pre-commit, żeby wyciekłe poświadczenie zostało złapane, zanim w ogóle zostanie zacommitowane albo wklejone.

Dwa prompty pokrywają dwa momenty. Pierwszy to sprawdzenie diffu, które człowiek uruchamia przed commitem; drugi buduje skaner wywoływany przez twój hook UserPromptSubmit przy każdej interakcji, dlatego musi być szybki i oparty na wzorcach, a nie na wywołaniu modelu.

Gdy deweloperzy potrzebują danych produkcyjnych do debugowania, odpowiedzią nie jest zredagowany eksport, tylko dane syntetyczne pasujące do schematu i do przypadków brzegowych. Naucz agenta generować je z kształtu tabeli, a nie z jej zawartości.

Anonimizacja trzyma się tylko wtedy, gdy dane produkcyjne w ogóle nie leżą w środowisku, do którego agent może sięgnąć.

  1. Środowiska deweloperskie nigdy nie zawierają danych produkcyjnych

    Używaj generowania danych syntetycznych albo zanonimizowanych migawek produkcji. Nigdy nie kopiuj produkcyjnych baz do środowiska deweloperskiego.

  2. Narzędzia AI łączą się tylko z dev i staging

    Bazodanowe serwery MCP, jeśli ich używasz, łączą się wyłącznie z bazami deweloperskimi. Dostęp do produkcyjnej bazy wymaga osobnego narzędzia z pełną ścieżką audytową.

  3. Pipeline’y CI/CD używają kont serwisowych

    Przepływy CI wspomagane przez AI (bezgłowy Claude Code, automatyzacja Codeksa) używają kont serwisowych o minimalnych uprawnieniach, a nie poświadczeń dewelopera.

  4. Regularne przeglądy dostępu

    Comiesięczny przegląd tego, do jakich danych narzędzia AI mają dostęp. Usuwaj zbędny dostęp proaktywnie.

Model Context Protocol pozwala twojemu agentowi łączyć się z zewnętrznymi narzędziami — bazą danych, GitHubem, przeglądarką. Każdy serwer MCP to wykonywalne oprogramowanie z takimi uprawnieniami, jakie mu dasz, więc nadmiernie uprzywilejowany albo niezweryfikowany serwer jest realną powierzchnią ataku. Dwie zasady pokrywają większość ryzyka.

Po pierwsze, zweryfikuj serwer, zanim go zainstalujesz. Wybieraj oficjalne, przestrzenione pakiety (na przykład @modelcontextprotocol/server-github, @modelcontextprotocol/server-postgres) zamiast nieznanego forka społecznościowego. Niech agent streści, co serwer faktycznie robi, zanim go podłączysz:

Po drugie, podłącz go z poświadczeniami o najmniejszych uprawnieniach. Serwerowi MCP dla Postgresa nigdy nie dawaj roli aplikacyjnej ani administracyjnej. Utwórz rolę tylko do odczytu, zawężoną dokładnie do tego, czego agent potrzebuje:

CREATE ROLE ai_readonly LOGIN PASSWORD 'rotate-me';
GRANT CONNECT ON DATABASE app TO ai_readonly;
GRANT USAGE ON SCHEMA public TO ai_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO ai_readonly;
-- new tables inherit read-only access automatically
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ai_readonly;

Następnie skieruj łańcuch połączenia serwera MCP na ai_readonly — konfiguracja jest identyczna w Cursorze, Claude Code i Codeksie, bo wszystkie trzy czytają ten sam blok mcpServers. Teraz zahalucynowane DROP TABLE odrzuca baza danych, a nie nadzieja. Zobacz Database MCP po pełną konfigurację i Bezpieczeństwo MCP po model zagrożeń.

Traktuj każdy blok napisany przez agenta jak pull request od zupełnie nowego współpracownika: może być funkcjonalnie poprawny i wciąż dostarczyć błąd wstrzyknięcia albo brakujące sprawdzenie autoryzacji. Nie przeglądaj diffu pobieżnie — zrób drugie przejście z modelem w kapeluszu bezpieczeństwa, a potem zweryfikuj ustalenia samodzielnie.

Czytaj diff, nie podsumowanie

Zanim zatwierdzisz edycję pliku, przeczytaj faktyczny diff, a nie jednolinijkowy opis agenta. Podsumowanie to, co agent zamierzał; diff to, co zapisze.

Bramkuj destrukcyjne komendy

Nigdy nie zatwierdzaj automatycznie komend terminala, które kasują, wdrażają albo modyfikują dane. Uruchamiaj agenty w trybie ograniczonym (zatwierdzanie per akcja w Cursorze, prompty uprawnień w Claude Code albo Codex z jawną piaskownicą i approval_policy=on-request). W Codeksie piaskownica egzekwuje granice dostępu, a polityka zatwierdzeń osobno steruje pytaniami o eskalację.

To dyscyplina człowieka w pętli, która oddziela pracę produkcyjną od demonstracji — pełny przepływ przeglądu opisuje Człowiek w pętli.

Jeśli twoja organizacja przetwarza dane mieszkańców UE, użycie narzędzi AI musi być zgodne z GDPR:

  • Umowa powierzenia przetwarzania: upewnij się, że dostawca narzędzia AI ma podpisaną DPA
  • Podstawa prawna: udokumentuj podstawę prawną wysyłania kodu (wraz z osadzonymi w nim danymi) do dostawców AI
  • Minimalizacja danych: wysyłaj tylko minimalny kontekst potrzebny do zadania
  • Prawo do usunięcia: potwierdź, że twój dostawca AI obsługuje żądania usunięcia danych
  • Transfer transgraniczny: przy dostawcach z USA zapewnij odpowiednie mechanizmy transferu (na przykład standardowe klauzule umowne)

Zrób z polityki coś, co deweloperzy naprawdę przeczytają

Dział zatytułowany „Zrób z polityki coś, co deweloperzy naprawdę przeczytają”

Kontrole prywatności działają tylko wtedy, gdy deweloperzy je rozumieją i stosują. Krótka, zapadająca w pamięć ściągawka bije dokument polityki, którego nikt nie otwiera.

Potem utrzymuj ją w zgodzie z rzeczywistością kwartalnym przeglądem, który weryfikuje cztery rzeczy: konfigurację narzędzi (tryby prywatności włączone, pliki ignore aktualne), wzorce użycia (prompty zawierające podejrzane wzorce, jak adresy e-mail czy formaty kluczy), zgodność dostawcy (aktualne DPA, niezmienione polityki retencji) i świeżość szkoleń (nowi deweloperzy wdrożeni w politykę w pierwszym tygodniu).

  • Deweloper przypadkiem wysłał dane osobowe do narzędzia AI. Jeśli twój dostawca ma zerową retencję, ryzyko jest ograniczone. Udokumentuj incydent, zaktualizuj skanowanie przed wysyłką, by łapało ten wzorzec, i wykorzystaj to jako moment szkoleniowy. Nie buduj kultury strachu — buduj kulturę poprawiania procesu.
  • Zakładałeś Privacy Mode, a ktoś był na planie prywatnym. Kolega zalogował się na prywatne konto Cursora albo ChatGPT na maszynie służbowej, omijając zespołowe wymuszenie ZDR. Wyegzekwuj Privacy Mode na poziomie zespołu i ogranicz logowanie do kont firmowych (Allowed Team IDs w Cursorze, SSO w ChatGPT Enterprise).
  • Sekret wyciekł przez logi serwera MCP. Model nigdy nie zobaczył poświadczenia, ale serwer wypisał pełny łańcuch połączenia na stderr przy błędzie połączenia. Zawęź poświadczenia serwera powyższą rolą tylko do odczytu i nigdy nie umieszczaj sekretów w args MCP — ładuj je ze środowiska.
  • Nadmiernie uprzywilejowane poświadczenia bazy. Agent wykonał eksploracyjny UPDATE, bo rola dana serwerowi MCP mogła pisać. Naprawą jest powyższy GRANT tylko do odczytu; osobną rolę zapisu twórz świadomie i tylko wtedy, gdy faktycznie potrzebujesz modyfikacji.
  • Wrażliwe pliki trafiły do indeksu. Plik .env albo klucz został osadzony, bo nie był ignorowany. Dodaj go do .cursorignore i .gitignore, a potem zrotuj każde zaindeksowane poświadczenie — osadzony sekret to sekret wyciekły.
  • Skaner prywatności ma za dużo fałszywych alarmów. Dostrój wzorce. Ciągi UUID wyglądające jak klucze API, testowe adresy e-mail w komentarzach i adresy IP localhosta powinny trafić na listę dozwolonych. Skaner z nadmiarem fałszywych alarmów zostaje wyłączony, co jest gorsze niż brak skanera.
  • Dział prawny chce zakazać narzędzi AI w całości z powodu ryzyka prywatności. Przynieś dane: większość planów enterprise ma mocniejsze gwarancje prywatności niż część narzędzi SaaS już używanych w firmie. Przygotuj porównanie obchodzenia się z danymi przez narzędzia AI ze Slackiem, Dokumentami Google i resztą stosu, który rutynowo trzyma dane firmowe.
  • „Nie możemy używać narzędzi AI w aplikacji medycznej lub finansowej”. Możecie — przy odpowiednich kontrolach. Użycie zgodne z HIPAA i PCI DSS jest możliwe przy izolacji danych, przepływach anonimizacji i umowach z dostawcą. Kluczem jest to, żeby żadne chronione dane nigdy nie dotarły do dostawcy.