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:
- Abilita le API richieste (Compute, Confidential Computing, Logging, Artifact Registry, Cloud Build).
- Crea ed esegue il push dell'immagine Docker (wrapping vLLM con middleware TLS attestato).
- Esegue il provisioning di un account di servizio con le autorizzazioni necessarie.
- Crea la Confidential VM (istanza A3 con GPU H100 e TDX abilitato).
- Configura la rete e il bilanciamento del carico (bilanciatore del carico di rete pass-through).
- 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?
- TCP/TLS: connessione standard stabilita.
- Intercettazione dell'handshake: l'SDK si mette in pausa prima di inviare il corpo.
- RPC AttestConnection: l'SDK invia un nonce al server.
- Generazione di citazioni: il server richiede una citazione hardware TEE.
- Convalida: l'SDK verifica la firma e il criterio della citazione.
- Bind: l'SDK verifica che il "materiale di chiave esportato" del canale corrisponda alla sessione associata alla citazione.
- 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.