Codelab SDK di crittografia dei prompt

1. Panoramica

Questo codelab ti guida nell'utilizzo dell'SDK Prompt Encryption per comunicare in modo sicuro con un modello pubblicato in un Trusted Execution Environment (TEE) su Google Cloud.

Obiettivi didattici

  • Stabilire un canale criptato e verificato crittograficamente tra un client e un server di inferenza remoto.
  • Verificare l'identità del server (hash software, modello hardware, configurazione di avvio) utilizzando TLS attestato.
  • Garantire la sovranità dei dati mantenendo i prompt criptati finché non raggiungono l'enclave verificata.
  • Utilizzare l'SDK Prompt Encryption per interagire con vLLM in esecuzione su Confidential Space.

Che cosa ti serve

  • Un progetto Google Cloud con la fatturazione abilitata.
  • Google Cloud SDK (gcloud) installato e autenticato.
  • Ambiente Python 3.10+.
  • Un token Hugging Face per scaricare i modelli Gemma.
  • Dimestichezza con i firewall VPC e la quota di indirizzi IP esterni.
  • La creazione dell'SDK in locale richiede la compilazione dell'estensione C _ekm.c. Questo passaggio non riesce se le intestazioni C di Python non sono installate. Installa python3-dev per risolvere il problema (ad es. sudo apt-get install python3-dev per Debian/Ubuntu).

2. Configurazione delle risorse cloud

Prima di iniziare, assicurati di aver abilitato le API richieste e configurato l'ambiente.

1. Abilita le API richieste:

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

2. Configura Docker:

gcloud auth configure-docker gcr.io

3. Imposta il token Hugging Face:

export HF_TOKEN="your_token"

4. Clona il repository:

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

3. Scenario

Utilizzeremo:

  • Client: il tuo ambiente Python locale o una VM standard.
  • Server: un'istanza vLLM che pubblica un modello open source (ad es. Gemma) all'interno di Confidential Space (TDX/SEV-SNP).
  • SDK: la libreria Python prompt_encryption_sdk.

4. Passaggio 0: configurazione del server

Prima che il client possa verificare qualsiasi cosa, abbiamo bisogno di un server in esecuzione in Confidential Space. Uno script bash fornito gestisce il provisioning.

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

Lo script setup.sh esegue le seguenti operazioni:

  1. Abilita le API richieste (Compute, Confidential Computing, Logging, Artifact Registry, Cloud Build).
  2. Crea ed esegue il push dell'immagine Docker (wrapping vLLM con middleware TLS attestato).
  3. Esegue il provisioning di un account di servizio con le autorizzazioni necessarie.
  4. Crea la Confidential VM (istanza A3 con GPU H100 e TDX abilitato).
  5. Configura la rete e il bilanciamento del carico (bilanciatore del carico di rete pass-through).
  6. Salva gli output (hash dell'immagine e IP del bilanciatore del carico) nei file locali.

5. Passaggio 1: esegui il client attestato

Ora che il server è in esecuzione in modo sicuro, stabilisci una connessione attestata.

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

Lo script run_client.sh legge i dettagli del deployment ed esegue una richiesta Python utilizzando ConfidentialSDKClient. Se l'attestazione non riesce, viene generato un AttestationError e il prompt non viene mai inviato.

6. Passaggio 2: pulizia

Per evitare addebiti, libera spazio dalle risorse al termine.

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

7. Dietro le quinte

Cosa succede durante http.post?

  1. TCP/TLS: connessione standard stabilita.
  2. Intercettazione dell'handshake: l'SDK si mette in pausa prima di inviare il corpo.
  3. RPC AttestConnection: l'SDK invia un nonce al server.
  4. Generazione di citazioni: il server richiede una citazione hardware TEE.
  5. Convalida: l'SDK verifica la firma e il criterio della citazione.
  6. Bind: l'SDK verifica che il "materiale di chiave esportato" del canale corrisponda alla sessione associata alla citazione.
  7. Trasmissione dei dati: il corpo viene inviato solo se tutti i controlli vengono superati.

8. Risoluzione dei problemi

  • Attestazione non riuscita: verifica che image_hash nel criterio corrisponda al container.
  • Connessione rifiutata: assicurati che il server sia raggiungibile e che la porta 8000 sia aperta.
  • Timeout: la generazione di citazioni TEE può richiedere del tempo; assicurati che i timeout siano sufficienti.

9. Complimenti

Hai completato correttamente il codelab dell'SDK Prompt Encryption. Hai imparato a stabilire un canale criptato e verificato crittograficamente tra il client e un server di inferenza basato su TEE.

Passaggi successivi

  • Esplora le configurazioni avanzate di AttestationPolicy.
  • Integra l'SDK con le applicazioni di produzione esistenti.
  • Scopri di più su Confidential Space e sui modelli hardware TEE.

Per approfondire