Ćwiczenie dotyczące pakietu Prompt Encryption SDK

1. Przegląd

To ćwiczenie prowadzi Cię przez proces używania pakietu Prompt Encryption SDK do bezpiecznej komunikacji z modelem udostępnianym w zaufanym środowisku wykonawczym (TEE) w Google Cloud.

Czego się nauczysz

  • Ustanawianie zweryfikowanego kryptograficznie i zaszyfrowanego kanału między klientem a zdalnym serwerem wnioskowania.
  • Weryfikowanie tożsamości serwera (skrót oprogramowania, model sprzętu, konfiguracja uruchamiania) za pomocą potwierdzonego protokołu TLS.
  • Zapewnianie suwerenności danych przez utrzymywanie zaszyfrowanych promptów do momentu dotarcia do zweryfikowanego enklawy.
  • Używanie pakietu Prompt Encryption SDK do interakcji z vLLM działającym w Poufnej przestrzeni.

Czego potrzebujesz

  • Projekt Google Cloud z włączonymi płatnościami.
  • Zainstalowany i uwierzytelniony pakiet Google Cloud SDK (gcloud).
  • Środowisko Python 3.10+.
  • Token Hugging Face do pobierania modeli Gemma.
  • Znajomość zapór sieciowych VPC i limitu zewnętrznych adresów IP.
  • Lokalne tworzenie pakietu SDK wymaga skompilowania rozszerzenia C _ekm.c. Ten krok nie powiedzie się, jeśli nie są zainstalowane nagłówki C Pythona. Aby rozwiązać ten problem, zainstaluj pakiet python3-dev (np. sudo apt-get install python3-dev w przypadku systemów Debian/Ubuntu).

2. Konfigurowanie zasobów w chmurze

Zanim zaczniesz, upewnij się, że masz włączone wymagane interfejsy API i skonfigurowane środowisko.

1. Włącz wymagane interfejsy API:

gcloud services enable compute.googleapis.com \
    confidentialcomputing.googleapis.com \
    logging.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

2. Skonfiguruj Dockera:

gcloud auth configure-docker gcr.io

3. Ustaw token Hugging Face:

export HF_TOKEN="your_token"

4. Sklonuj repozytorium:

git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk

3. Scenariusz

Będziemy używać:

  • Klient: lokalne środowisko Python lub standardowa maszyna wirtualna.
  • Serwer: instancja vLLM udostępniająca model open source (np. Gemma) w Poufnej przestrzeni (TDX/SEV-SNP).
  • Pakiet SDK: biblioteka Python prompt_encryption_sdk.

4. Krok 0. Konfiguracja serwera

Zanim klient będzie mógł cokolwiek zweryfikować, potrzebujemy serwera działającego w Poufnej przestrzeni. Udostępniony skrypt bash obsługuje udostępnianie.

./codelabs/setup.sh --project-id <PROJECT_ID>

Skrypt setup.sh wykonuje te czynności:

  1. Włącza wymagane interfejsy API (Compute, Confidential Computing, Logging, Artifact Registry, Cloud Build).
  2. Tworzy i przesyła obraz Dockera (zawierający vLLM z oprogramowaniem pośredniczącym Attested TLS).
  3. Udostępnia konto usługi z niezbędnymi uprawnieniami.
  4. Tworzy poufną maszynę wirtualną (instancja A3 z GPU H100 i włączoną funkcją TDX).
  5. Konfiguruje sieć i równoważenie obciążenia (przekazujący sieciowy system równoważenia obciążenia).
  6. Zapisuje dane wyjściowe (skrót obrazu i adres IP systemu równoważenia obciążenia) w plikach lokalnych.

5. Krok 1. Uruchomienie potwierdzonego klienta

Gdy serwer działa bezpiecznie, nawiąż potwierdzone połączenie.

python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>

Skrypt run_client.sh odczytuje szczegóły wdrożenia i wykonuje żądanie Python przy użyciu ConfidentialSDKClient. Jeśli potwierdzenie się nie powiedzie, zostanie zgłoszony błąd AttestationError, a prompt nie zostanie wysłany.

6. Krok 2. Czyszczenie

Aby uniknąć opłat, po zakończeniu usuń zasoby.

./codelabs/cleanup.sh --project-id <PROJECT_ID>

7. Dla zaawansowanych

Co się dzieje podczas http.post?

  1. TCP/TLS: nawiązywane jest standardowe połączenie.
  2. Przechwytywanie uzgadniania: pakiet SDK wstrzymuje się przed wysłaniem treści.
  3. RPC AttestConnection: pakiet SDK wysyła do serwera nonce.
  4. Generowanie cytatu: serwer wysyła żądanie cytatu sprzętu TEE.
  5. Weryfikacja: pakiet SDK weryfikuje podpis cytatu i zasadę.
  6. Powiązanie: pakiet SDK sprawdza, czy „eksportowany materiał klucza” kanału pasuje do sesji powiązanej w cytacie.
  7. Przesyłanie danych: treść jest wysyłana tylko wtedy, gdy wszystkie kontrole się powiodą.

8. Rozwiązywanie problemów

  • Nie udało się potwierdzić: sprawdź, czy image_hash w zasadzie pasuje do kontenera.
  • Odmowa połączenia: upewnij się, że serwer jest osiągalny, a port 8000 jest otwarty.
  • Przekroczenie limitu czasu: generowanie cytatu TEE może trochę potrwać. Upewnij się, że limity czasu są wystarczające.

9. Gratulacje

Udało Ci się ukończyć ćwiczenie z pakietu Prompt Encryption SDK. Dowiedziałeś się, jak ustanowić zweryfikowany kryptograficznie i zaszyfrowany kanał między klientem a serwerem wnioskowania opartym na TEE.

Co dalej?

  • Poznaj zaawansowane konfiguracje AttestationPolicy.
  • Zintegruj pakiet SDK z dotychczasowymi aplikacjami produkcyjnymi.
  • Dowiedz się więcej o Poufnej przestrzeni i modelach sprzętu TEE.

Więcej informacji