Codelab zum Prompt Encryption SDK

1. Übersicht

In diesem Codelab erfahren Sie, wie Sie das Prompt Encryption SDK verwenden, um sicher mit einem Modell zu kommunizieren, das in einer vertrauenswürdigen Ausführungsumgebung (TEE) in Google Cloud bereitgestellt wird.

Lerninhalte

  • Es wird ein kryptografisch verifizierter und verschlüsselter Kanal zwischen einem Client und einem Remote-Inferenzserver eingerichtet.
  • Identität des Servers (Software-Hash, Hardwaremodell, Startkonfiguration) mit Attested TLS überprüfen.
  • Sicherstellung der Datenhoheit durch Verschlüsselung von Prompts, bis sie die bestätigte Enklave erreichen.
  • Mit dem Prompt Encryption SDK mit vLLM interagieren, das in Confidential Space ausgeführt wird.

Voraussetzungen

  • Google Cloud-Projekt mit aktivierter Abrechnungsfunktion
  • Das Google Cloud SDK (gcloud) ist installiert und authentifiziert.
  • Python 3.10 oder höher.
  • Ein Hugging Face-Token zum Herunterladen von Gemma-Modellen.
  • Kenntnisse über VPC-Firewalls und das Kontingent für externe IP-Adressen.
  • Wenn Sie das SDK lokal erstellen möchten, müssen Sie die C-Erweiterung „_ekm.c“ kompilieren. Dieser Schritt schlägt fehl, wenn die Python-C-Header nicht installiert sind. Installieren Sie python3-dev, um dieses Problem zu beheben (z.B. sudo apt-get install python3-dev für Debian/Ubuntu).

2. Cloud-Ressourcen einrichten

Bevor Sie beginnen, müssen Sie die erforderlichen APIs aktivieren und Ihre Umgebung konfigurieren.

1. Erforderliche APIs aktivieren:

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

2. Docker konfigurieren:

gcloud auth configure-docker gcr.io

3. Hugging Face-Token festlegen:

export HF_TOKEN="your_token"

4. Repository klonen:

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

3. Szenario

Wir verwenden:

  • Client:Ihre lokale Python-Umgebung oder eine Standard-VM.
  • Server:Eine vLLM-Instanz, die ein Open-Source-Modell (z.B. Gemma) in einem Confidential Space (TDX/SEV-SNP) bereitstellt.
  • SDK:Die Python-Bibliothek „prompt_encryption_sdk“.

4. Schritt 0: Server einrichten

Bevor der Client etwas bestätigen kann, benötigen wir einen Server, der in Confidential Space ausgeführt wird. Die Bereitstellung erfolgt über ein bereitgestelltes Bash-Skript.

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

Das Skript „setup.sh“ führt Folgendes aus:

  1. Aktiviert die erforderlichen APIs (Compute, Confidential Computing, Logging, Artifact Registry, Cloud Build).
  2. Erstellt und überträgt das Docker-Image (das vLLM mit der Attested TLS-Middleware umschließt).
  3. Stellt ein Dienstkonto mit den erforderlichen Berechtigungen bereit.
  4. Erstellt die Confidential VM (A3-Instanz mit H100-GPU und aktivierter TDX-Funktion).
  5. Konfiguriert Netzwerk und Load-Balancing (Passthrough-Network Load Balancer).
  6. Speichert Ausgaben (Bild-Hash und Load-Balancer-IP) in lokalen Dateien.

5. Schritt 1: Attested Client ausführen

Nachdem der Server sicher ausgeführt wird, stellen Sie eine attestierte Verbindung her.

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

Das Skript „run_client.sh“ liest Bereitstellungsdetails und führt eine Python-Anfrage mit ConfidentialSDKClient aus. Wenn die Attestierung fehlschlägt, wird ein AttestationError ausgelöst und der Prompt wird nie gesendet.

6. Schritt 2: Bereinigen

Bereinigen Sie Ressourcen nach Abschluss, um Gebühren zu vermeiden.

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

7. Hinter den Kulissen

Was passiert während http.post?

  1. TCP/TLS:Standardverbindung hergestellt.
  2. Handshake-Abfang:Das SDK wird angehalten, bevor der Body gesendet wird.
  3. AttestConnection-RPC:Das SDK sendet eine Nonce an den Server.
  4. Angebotserstellung:Der Server fordert ein TEE-Hardwareangebot an.
  5. Validierung:Das SDK prüft die Angebotsignatur und die Richtlinie.
  6. Binden: Das SDK prüft, ob das „Exported Keying Material“ des Kanals mit der im Angebot gebundenen Sitzung übereinstimmt.
  7. Datenübertragung:Der Body wird nur gesendet, wenn alle Prüfungen bestanden wurden.

8. Fehlerbehebung

  • Attestation Failed (Bestätigung fehlgeschlagen): Prüfen Sie, ob der image_hash in der Richtlinie mit dem Container übereinstimmt.
  • Verbindung abgelehnt:Prüfen Sie, ob der Server erreichbar ist und Port 8000 geöffnet ist.
  • Zeitüberschreitung:Die Angebotsgenerierung im TEE kann dauern. Achten Sie darauf, dass die Zeitüberschreitungen ausreichend sind.

9. Glückwunsch

Sie haben das Codelab zum Prompt Encryption SDK erfolgreich abgeschlossen. Sie haben gelernt, wie Sie einen kryptografisch verifizierten und verschlüsselten Kanal zwischen Ihrem Client und einem TEE-basierten Inferenzserver einrichten.

Nächste Schritte

  • Erweiterte AttestationPolicy-Konfigurationen
  • Binden Sie das SDK in Ihre bestehenden Produktionsanwendungen ein.
  • Weitere Informationen zu Confidential Space und TEE-Hardwaremodellen

Weitere Informationen