Przewodnik i wgląd

Routing API AI uwzględniający przechowywanie danych: wymuszanie zasad ZDR, miejsca zamieszkania i rejestrowania na bramce

Praktyczna architektura bramy do routingu ruchu API AI według zasad przechowywania danych: klasyfikuj wrażliwość żądań, zachowanie dostawcy map, blokuj niekompatybilne funkcje, zachowaj bezpieczną analitykę i kontroluj każdą decyzję.

Zespoły ds. bezpieczeństwa muszą nie tylko wiedzieć, który model jest najtańszy, najszybszy i najbardziej wydajny. Muszą wiedzieć, czy określone żądanie można zgodnie z prawem i operacyjnie wysłać do określonego dostawcy, punktu końcowego, regionu, funkcji i trybu rejestrowania.

To trudniejsze, niż się wydaje. Model może być akceptowalny w przypadku zwykłego czatu wewnętrznego, ale nie w przypadku informacji umożliwiających identyfikację klienta. Dostawca może zaoferować zerowe przechowywanie danych dla jednej ścieżki API, natomiast funkcja oparta na wyszukiwaniu przechowuje monity i dane wyjściowe przez ustalony okres. Region może obsługiwać miejsce przechowywania, ale nie oczekiwany tryb przetwarzania. Dzienniki należące do programisty można konfigurować, natomiast dzienniki monitorowania nadużyć dostawcy podlegają innym zasadom.

Praktycznym rozwiązaniem jest przeniesienie decyzji o przechowywaniu z poszczególnych aplikacji do bramy AI API. Brama powinna klasyfikować żądanie, oceniać je w oparciu o macierz możliwości dostawcy, blokować niezgodne funkcje, kierować tylko do zatwierdzonych profili modeli i rejestrować decyzję polityczną bez domyślnego przechowywania nieprzetworzonych monitów.

Problem czytelnika: warunki prywatności dostawcy nie stanowią kontroli w czasie wykonywania

Większość zespołów zaczyna od arkusza kalkulacyjnego lub przeglądu bezpieczeństwa, który określa, którzy dostawcy sztucznej inteligencji są zatwierdzeni. Jest to przydatne, ale nie wystarczy do routingu produkcji.

Aplikacje wybierają czas działania:

  • Który identyfikator modelu powinien obsłużyć to żądanie?
  • Czy żądanie powinno wykorzystywać podstawy wyszukiwania, przesyłanie plików, wykonywanie kodu, przetwarzanie wsadowe, buforowanie podpowiedzi czy przechowywane konwersacje?
  • Który region lub punkt końcowy powinien przetworzyć żądanie?
  • Czy system może zarejestrować nieprzetworzony monit o debugowanie?
  • Czy routing rezerwowy może wysłać to samo żądanie do innego dostawcy?

Każda z tych opcji może zmienić profil przechowywania. Żądanie, które było zgodne w zwykłym trybie czatu, może stać się niezgodne, gdy programista włączy uziemienie lub trwałe przechowywanie konwersacji. Reguła awaryjna zaprojektowana z myślą o niezawodności może przypadkowo skierować regulowane dane do ścieżki dostawcy, która nie została zatwierdzona pod kątem zerowego przechowywania danych, przechowywania danych ani kontroli monitorowania nadużyć.

Zalecenie: traktuj zachowanie związane z przechowywaniem jako pierwszorzędne ograniczenie routingu, a nie jako dokumentację dołączoną do konta dostawcy.

Fakty do zakodowania przed zaprojektowaniem polityki

Dokładne warunki różnią się w zależności od dostawcy, produktu, umowy, regionu, punktu końcowego i funkcji. Nie polegaj na pamięci ani jednorazowym przeglądzie. Zbuduj macierz należącą do źródła i aktualizuj ją, gdy zmienią się warunki.

Kilka aktualnych dokumentów dostawców publicznych ilustruje, dlaczego jest to konieczne:

  • OpenAI: miejsce przechowywania danych API jest udokumentowane jako skonfigurowane w projekcie, a żądania regionalne wymagają prefiksów domen specyficznych dla regionu. OpenAI odróżnia także obsługę pamięci masowej od obsługi przetwarzania według regionu i zwraca uwagę na dodatkowe wymagania dla regionów spoza USA. OpenAI stwierdza, że przechowywanie danych API poza USA wymaga zgody na kontrolę monitorowania nadużyć oraz poprawki dotyczącej zmodyfikowanego przechowywania.
  • Anthropic: Anthropic dokumentuje zerowe przechowywanie danych w przypadku zastosowań komercyjnych związanych z interfejsem API, zauważając jednocześnie, że niektóre powiązane produkty lub pliki danych dotyczące zgodności mają osobne modele przechowywania, w tym dłuższe przechowywanie źródła aktywności i transkrypcji sesji zdalnych.
  • Google Gemini: terminy API Gemini rozróżniają usługi bezpłatne i płatne. W przypadku usług bezpłatnych Google może wykorzystywać przesłane treści i wygenerowane odpowiedzi w celu ulepszenia produktów; w przypadku usług płatnych Google twierdzi, że monity i odpowiedzi nie służą do ulepszania produktów. Dokumentacja Gemini Developer API ZDR mówi, że dzienniki monitorowania nadużyć w usługach płatnych zwykle przechowują monity i odpowiedzi przez ograniczony czas, podczas gdy zatwierdzone projekty ZDR usuwają zawartość użytkownika i możliwe do zidentyfikowania metadane przed zalogowaniem.
  • Przechowywanie specyficzne dla funkcji: dokumentacja Gemini stwierdza, że Grounding with Google Search i Grounding with Google Maps przechowują monity, informacje kontekstowe i wygenerowane dane wyjściowe przez 30 dni, bez możliwości wyłączenia tego magazynu, gdy używane są te funkcje.
  • Dzienniki należące do programistów: Dokumentacja rejestrowania interfejsu API Gemini mówi, że dzienniki interfejsu API należące do programisty mogą być domyślnie przechowywane do 55 dni w przypadku projektów z włączoną funkcją rozliczeń oraz że programiści mogą wybierać krótsze okna, np. 7, 14 lub 28 dni.
  • Zarządzanie ryzykiem: Profil Generative AI firmy NIST zaleca monitorowanie treści generowanych przez AI pod kątem zagrożeń prywatności i łączenie zasad generatywnej AI z istniejącymi danymi, oprogramowaniem, procesami prawnymi, zgodnością i zarządzaniem ryzykiem.

To są fakty, które należy sprawdzić w aktualnej dokumentacji dostawcy przed wdrożeniem. Lekcja architektury jest stabilna: przechowywanie nie jest jedną wartością logiczną na poziomie dostawcy.

Architektura: silnik zasad bramy w ścieżce żądań

Brama uwzględniająca przechowywanie składa się z pięciu podstawowych elementów:

  1. Klasyfikator czułości żądań: oznacza obciążenie przed routingiem.
  2. Macierz możliwości dostawcy: opisuje dostawcę, model, punkt końcowy, region, przechowywanie, rejestrowanie i zachowanie funkcji.
  3. Reguły polityki jako kodu: przekształcają wymagania bezpieczeństwa w decyzje dotyczące zezwolenia, odmowy lub przeglądu w czasie wykonywania.
  4. Warstwa bramki funkcji: blokuje funkcje zmieniające przechowywanie, chyba że wyraźnie na to zezwolono.
  5. Warstwa audytu i analityki: rejestruje przydatne metadane bez domyślnego przechowywania surowych podpowiedzi.

Brama nie musi rozumieć wszystkich niuansów prawnych. Musi egzekwować decyzje zatwierdzone przez zespoły prawne, bezpieczeństwa, zgodności i platformy.

Krok 1: sklasyfikowaj wrażliwość żądań przed wyborem modelu

Zacznij od małej taksonomii klasyfikacji. Powinien być wystarczająco prosty w użyciu dla programistów, ale wystarczająco wyrazisty, aby kierować polityką.

Przykładowe etykiety czułości:

  • publiczny: dokumentacja publiczna, tekst marketingowy, publiczna zawartość witryny internetowej.
  • wewnętrzne: niepubliczne informacje o firmie o niskiej wrażliwości.
  • poufne: strategia, umowy, kontekst klienta, niepublikowane szczegóły produktu.
  • customer_pii: nazwiska, adresy e-mail, adresy, identyfikatory kont, transkrypcje wsparcia.
  • regulowane: dane chronione dotyczące opieki zdrowotnej, finansów, prawa, edukacji lub jurysdykcji.
  • kod_źródłowy: zastrzeżony kod, konfiguracja, pliki architektury.
  • poświadczenia: sekrety, tokeny, hasła, klucze prywatne. W większości systemów powinno to być blokowane, a nie kierowane.

Klasyfikacja może pochodzić z wielu źródeł:

  • Nagłówek dostarczany przez aplikację, taki jak X-Data-Class:customer_pii.
  • Zasady dzierżawy, zgodnie z którymi cały ruch od regulowanego klienta jest traktowany jako regulowany, chyba że zostanie obniżony przez zatwierdzoną regułę.
  • Zasady dotyczące punktów końcowych, gdzie domyślne podsumowanie biletów pomocy technicznej to customer_pii.
  • Niewielkie skanowanie treści pod kątem danych uwierzytelniających, oczywistych informacji umożliwiających identyfikację lub naruszeń zasad.

Zalecenie: nie polegaj wyłącznie na automatycznym wykrywaniu. Wymagaj od aplikacji zadeklarowania zamierzonej klasy danych, a następnie użyj skanowania, aby wychwycić oczywiste rozbieżności lub wymusić bezpieczniejszą klasę.

Krok 2: zbuduj matrycę możliwości dostawcy

Macierz możliwości jest źródłem prawdy ocenianym przez router. Należy go wersjonować, przeglądać i testować podobnie jak konfigurację produkcyjną.

Przykładowe pola:

{
  "profile_id": "provider_x.chat.eu.zdr",
  "dostawca": "dostawca_x",
  "model": "model-duży",
  "api_family": "zakończenia_czatu",
  "endpoint": "https://eu.example-provider.com/v1",
  "region": "eu",
  „processing_residency”: [„eu”],
  „storage_residency”: [„eu”],
  „zdr_eligible”: prawda,
  „zdr_contract_required”: prawda,
  "training_use": "not_used_for_training_on_paid_api",
  "abuse_monitoring": "approved_modified_retention_required",
  "developer_log_retention_days": 0,
  „raw_prompt_logging_allowed”: fałsz,
  „obsługiwane_funkcje”: {
    „plain_chat”: prawda,
    „streaming”: prawda,
    „tool_calls”: prawda,
    „search_grounding”: fałsz,
    „maps_grounding”: fałsz,
    „file_upload”: fałsz,
    „partia”: fałsz,
    „stored_conversations”: fałsz
  },
  "last_reviewed": "2026-08-01",
  „source_refs”: [„przegląd-bezpieczeństwa-123”, „wersja-dokumentu-dostawcy-abc”]

Używaj profili modeli, a nie surowych identyfikatorów modeli. Profil łączy model, dostawcę, punkt końcowy, region, zestaw funkcji i stan przechowywania. Programiści żądają model_profile: zgodne_summarizacja, a nie tylko model: najszybszy-duży-model.

Zalecenie: uwzględnij w matrycy warunki wstępne umowy. Trasa nie jest zatwierdzona przez ZDR tylko dlatego, że sprzedawca oferuje gdzieś ZDR. Jest zatwierdzany tylko wtedy, gdy Twoje konto, projekt, region i punkt końcowy spełniają wymagane warunki.

Krok 3: napisz reguły w formie kodu

Zasady zasad powinny być jasne, możliwe do przetestowania i czytelne dla zespołów ds. bezpieczeństwa i platformy.

Przykładowe reguły w pseudokodzie:

odmów, jeśli data_class == "poświadczenia"
  powód „poświadczenia_must_not_be_sent_to_model”
zezwól tylko wtedy, gdy klasa_danych w ["regulated", "customer_pii"]
  i profile.zdr_eligible == true
  i profile.zdr_contract_required_satisfied == true
  powód_on_failure "model_profile_not_zdr_eligible"
odmów, jeśli rezydencja_wymagana == „eu”
  i „eu” nie jest w profile.processing_residency
  powód „region_processing_not_supported”
odmów, jeśli klasa_danych w ["poufne", "klient_pii", "regulowane"]i request.raw_prompt_logging == true
  powód „raw_prompt_logging_not_allowed”
odmów, jeśli request.features.search_grounding == true
  i policy.requires_zdr == true
  i profile.feature_storage.search_grounding_days > 0
  powód „grounding_requires_retained_content”
odmów, jeśli profil_powrotny.poziom_retencji 

Te reguły powinny działać przed wyborem dostawcy i ponownie przed przywróceniem dostawcy. Routing awaryjny jest częstym źródłem przypadkowej zmiany zasad: trasa podstawowa może być zgodna, natomiast trasa rezerwowa jest jedynie dostępna.

Krok 4: potraktuj narzędzia i funkcje jako możliwości zmieniające retencję

Nie modeluj przechowywania jako właściwości samego modelu podstawowego. Funkcje często zmieniają sposób przechowywania, rejestrowania lub przeglądania.

Nadaj każdej funkcji własne flagi zasad:

  • Podstawa wyszukiwania: może przechowywać podpowiedzi, pobrany kontekst i wygenerowane dane wyjściowe w zależności od warunków dostawcy.
  • Mapy lub informacje o lokalizacji: mogą wprowadzać dzienniki specyficzne dla lokalizacji lub zasady przechowywania.
  • Przesyłanie pliku: może przechowywać pliki oddzielnie od monitów i odpowiedzi.
  • Wykonanie kodu: może utworzyć pliki tymczasowe, dzienniki wykonania lub artefakty piaskownicy.
  • Zadania wsadowe: mogą mieć inne zachowanie w zakresie przechowywania, kolejkowania i przechowywania wyników niż synchroniczne wywołania API.
  • Przechowywane rozmowy: celowo przechowują treść i nigdy nie powinny być ukrywane za ogólną opcją czatu.
  • Panele oceny lub recenzji: mogą tworzyć przepływy pracy oparte na ocenie ręcznej lub zbiory danych o dłuższym okresie ważności.

Zalecenie: włącz funkcje zmieniające przechowywanie na poziomie dzierżawy i trasy. Jeśli programista włączy grounding_search=true, brama powinna ponownie ocenić żądanie pod kątem reguł przechowywania funkcji przed wysłaniem go dalej.

Krok 5: zachowaj statystyki bez przechowywania surowych podpowiedzi

Routing uwzględniający zachowanie nie powinien oślepiać zespołu platformy. Możesz zachować przydatne analizy wykorzystania sztucznej inteligencji, minimalizując jednocześnie przechowywanie treści.

Bezpieczne domyślne pola telemetryczne:

  • identyfikator dzierżawcy i identyfikator projektu
  • zaszyfrowany lub wewnętrzny identyfikator klucza API
  • Identyfikator profilu modelu i identyfikator dostawcy
  • poproś o sygnaturę czasową i region
  • liczba danych wejściowych, wyjściowych, buforowanych i wnioskowujących, jeśli są dostępne
  • opóźnienie, kod stanu, liczba ponownych prób i decyzja awaryjna
  • szacunkowy i rozliczony koszt
  • etykieta klasyfikacji danych
  • Wersja zasad i powód decyzji dotyczącej zasad
  • Wymagane są flagi funkcji i dozwolone flagi funkcji

Domyślnie unikaj przechowywania surowych podpowiedzi i wyników modelu dla ruchu poufnego. Jeśli debugowanie wymaga treści, użyj kontrolowanego przepływu pracy:

  • zgoda klienta lub najemcy
  • wąskie okno czasowe
  • limit próbkowania
  • karta redakcyjna
  • oddzielna kontrola dostępu
  • krótka data ważności
  • dziennik kontroli określający, kto to włączył i dlaczego

To jest kompromis. Blokowanie nieprzetworzonych dzienników monitów utrudnia debugowanie, wsparcie, kontrolę jakości i badanie nadużyć. Jednak domyślne przechowywanie wszystkiego stwarza większy obszar prywatności, naruszeń i zgodności.

Krok 6: zwróć możliwe do podjęcia przyczyny odmowy

Ogólny 403 zabroniony frustruje programistów i zachęca do obejścia tego problemu. Podaj stabilny powód do odczytania maszynowego i wyjaśnienie czytelne dla człowieka.

Przykładowa odpowiedź:

{
  „błąd”: {
    "type": "policy_denied",
    "code": "grounding_requires_30_day_storage",
    "message": "Podstawa wyszukiwania nie jest dozwolona w przypadku obciążeń oznaczonych require_zdr, ponieważ ta funkcja dostawcy przechowuje monity, kontekst i treść wyjściową.",
    "request_id": "req_123",
    "policy_version": "polityka-przechowywania-2026-08-01",
    „dozwolone_akcje”: [
      "wyłącz_uziemienie_wyszukiwania",
      "wybierz_profil:zdr_plain_chat",
      „wyjątek_żądania”
    ]
  }

Przydatne kody odmowy obejmują:

  • model_profile_not_zdr_eligible
  • region_processing_not_supported
  • storage_residency_not_supported
  • raw_prompt_logging_not_allowed
  • feature_requires_content_storage
  • fallback_weakens_retention_policy
  • contract_prequirement_missing
  • credentials_detected

Krok 7: dodaj wyjątek, a nie ukryte obejście

Niektóre wyjątki są uzasadnione: reakcja na incydenty, debugowanie zatwierdzone przez klienta, testowanie migracji lub tymczasowe ograniczenie dostawcy. Brama powinna obsługiwać wyjątki bez przekształcania ich w trwałą politykę cieni.

Każdy wyjątek powinien zawierać:

  • tożsamość osoby zatwierdzającej
  • zespół proszący lub najemca
  • link do biletu lub przeglądu ryzyka
  • uzasadnienie biznesowe
  • dozwolone profile i funkcje modeli
  • objęte klasy danych
  • data ważności
  • dodatkowe wymagania dotyczące rejestrowania

Zalecenie: wprowadzaj wyjątki węższe niż w przypadku zwykłych zasad. Unikaj przełączników globalnych, takich jak disable_retention_policy=true. Preferuj zastąpienia o ograniczonym zakresie, takie jak „zezwól na rejestrowanie monitów o debugowanie dla dzierżawy A, punktu końcowego B, przez 24 godziny, z redakcją i zatwierdzeniem zabezpieczeń”.

Operacyjna lista kontrolna

  • Utwórz wersjonowaną macierz możliwości dostawcy.
  • Przypisz właściciela warunków dostawcy, warunków wstępnych umowy i przeglądów przechowywania.
  • Wymagaj od aplikacji deklarowania klasy danych, wymagań dotyczących miejsca zamieszkania i żądanych funkcji.
  • Domyślny ruch poufny i regulowany bez rejestrowania surowych monitów.
  • Reprezentuj narzędzia, podstawy, przesyłanie plików, wsadowe i przechowywane rozmowy jako osobne flagi możliwości.
  • Przeprowadź sprawdzanie zasad przed routingiem podstawowym i awaryjnym.
  • Loguj wersję zasad, profil modelu, klasę danych, flagi funkcji i przyczynę odmowy.
  • Trzymaj metadane analityczne oddzielnie od treści podpowiedzi i wyników.
  • Przedstawiciel testów dopuszcza i odrzuca przypadki w CI.
  • Przeglądaj zmiany zasad za każdym razem, gdy dostawca zmienia warunki, regiony, punkty końcowe lub funkcje.

Kompromisy, które należy wyraźnie określić

Ścisłe wyznaczanie tras ogranicza wybór. Ograniczenia ZDR i miejsca zamieszkania mogą uniemożliwić korzystanie z najnowszego modelu, najtańszej trasy lub punktu końcowego bogatego w funkcje.

Routing regionalny może zwiększyć opóźnienia lub koszty. Najbliższy zgodny region może nie obsługiwać żądanego trybu przetwarzania lub może wymagać ścieżki innego dostawcy.

Bramki funkcji zaskakują programistów. Programista może myśleć, że umożliwia tylko wyszukiwanie, ale bezpieczeństwo dostrzega nowe zachowanie w zakresie przechowywania. Dokumentacja i komunikaty o odmowie zmniejszają tarcia.

Szybka minimalizacja komplikuje debugowanie. Zespoły potrzebują zredagowanych próbek, okien debugowania zatwierdzonych przez najemcę i solidnych metadanych, aby badać problemy bez zapisywania wszystkiego.

Matryca wymaga konserwacji. Warunki dostawcy ulegają zmianie. Premiera nowych modeli. Regiony się rozwijają. Funkcje przechodzą z wersji beta do wersji produkcyjnej. Przestarzała matryca jest gorsza niż jej brak, ponieważ stwarza fałszywą pewność.

Co to jest zalecenie, a co prognoza?

Zalecenia: wymuszaj przechowywanie na bramce, klasyfikuj żądania przed routingiem, utwórz matrycę możliwości dostawcy, blokuj funkcje zmieniające przechowywanie według zasad, unikaj domyślnie nieprzetworzonego rejestrowania monitów i dodawaj wersję każdej decyzji dotyczącej zasad.

Przewidywanie: zespoły zajmujące się platformami AI będą w coraz większym stopniu traktować kwestię prywatności jako element wyboru modelu. Zamiast pytać „z jakiego modelu powinniśmy skorzystać?” aplikacje będą pytać o profil modelu, który spełnia ograniczenia dotyczące możliwości, kosztów, opóźnień, miejsca zamieszkania i przechowywania.

Przewidywanie: funkcje prywatności specyficzne dla dostawcy będą w dalszym ciągu się różnić. Bramy normalizujące jedynie formaty żądań i odpowiedzi nie wystarczą; zespoły produkcyjne również będą potrzebowały normalizacji zasad.

Wniosek, który można zastosować

Routing uwzględniający przechowywanie danych nie jest oddzielnym panelem kontrolnym dotyczącym zgodności. Należy do ścieżki żądania.

Zacznij od trzech elementów: taksonomii wrażliwości żądań, wersjonowanej matrycy możliwości dostawcy i niewielkiego zestawu reguł zasad jako kodu dla funkcji ZDR, miejsca zamieszkania, nieprzetworzonego rejestrowania, przywracania stanu awaryjnego i zmiany przechowywania. Następnie spraw, aby brama zwracała jasne przyczyny odmowy i zachowywała statystyki bez domyślnego przechowywania nieprzetworzonych treści.

Taki projekt centralizuje decyzje, które w przeciwnym razie byłyby rozproszone pomiędzy opcjami pakietu SDK, zmiennymi środowiskowymi, konsolami dostawców i konwencjami specyficznymi dla zespołu. Zapewnia także zespołom ds. bezpieczeństwa i platform praktyczną ścieżkę audytu: które żądanie zostało zaakceptowane, która wersja zasad została zastosowana, jaki profil modelu został wybrany i dlaczego.

Powiązana lektura

FAQ

Często zadawane pytania

Czy zerowe przechowywanie danych jest ustawieniem na poziomie dostawcy?
Zwykle nie. Traktuj ją jako właściwość na poziomie trasy, która zależy od dostawcy, zatwierdzenia konta, warunków umowy, punktu końcowego, regionu, modelu, funkcji interfejsu API i trybu rejestrowania. Zakoduj te szczegóły w macierzy możliwości, zamiast zakładać jedną odpowiedź obejmującą całego dostawcę.
Czy brama powinna przechowywać nieprzetworzone monity dotyczące debugowania?
Bezpieczniejszym ustawieniem domyślnym jest brak surowego magazynu podpowiedzi lub danych wyjściowych w przypadku obciążeń poufnych, umożliwiających identyfikację lub regulowanych. Zachowaj metadane operacyjne, takie jak dzierżawa, profil modelu, liczba tokenów, opóźnienia, koszty, stan i decyzje dotyczące zasad. Jeśli potrzebne jest debugowanie treści, użyj wąskiego, zatwierdzonego, ograniczonego czasowo i zredagowanego trybu debugowania.
Jak powinien działać routing zastępczy w przypadku ruchu regulowanego?
Profile rezerwowe muszą spełniać te same lub bardziej rygorystyczne zasady przechowywania, miejsca zamieszkania, rejestrowania i funkcji, co profil podstawowy. Należy odrzucić opcję powrotu, jeśli osłabia to uprawnienia ZDR, zmienia region, umożliwia nieprzetworzone logowanie lub wykorzystuje funkcję przechowującą zawartość.
Dlaczego funkcje uziemienia i pilnika są obsługiwane oddzielnie od wyboru modelu?
Ponieważ funkcje mogą zmienić zachowanie przechowywania. Podstawowy model czatu może być akceptowalny w trybie prostym, podczas gdy podstawy wyszukiwania, podstawy map, przesyłanie plików, przetwarzanie wsadowe, przechowywane rozmowy lub pulpity nawigacyjne recenzji mogą wprowadzać dodatkowe wymagania dotyczące przechowywania lub rejestrowania.