1. Descripción general
En este codelab, se explica cómo usar el SDK de Prompt Encryption para comunicarse de forma segura con un modelo que se entrega en un entorno de ejecución confiable (TEE) en Google Cloud.
Qué aprenderás
- Establecer un canal encriptado y verificado de forma criptográfica entre un cliente y un servidor de inferencia remoto
- Verificar la identidad del servidor (hash de software, modelo de hardware, configuración de inicio) con TLS atestiguado
- Garantizar la soberanía de los datos manteniendo las instrucciones encriptadas hasta que lleguen al enclave verificado
- Usar el SDK de Prompt Encryption para interactuar con vLLM que se ejecuta en Confidential Space
Requisitos
- Un proyecto de Google Cloud con facturación habilitada
- El SDK de Google Cloud (gcloud) instalado y autenticado
- Entorno de Python 3.10 o versiones posteriores
- Un token de Hugging Face para descargar modelos de Gemma
- Conocimiento de los firewalls de VPC y la cuota de direcciones IP externas
- La compilación local del SDK requiere la compilación de la extensión _ekm.c C. Este paso falla si no se instalan los encabezados C de Python. Instala python3-dev para resolver este problema (p.ej., sudo apt-get install python3-dev para Debian/Ubuntu).
2. Configura los recursos de Cloud
Antes de comenzar, asegúrate de haber habilitado las APIs necesarias y configurado tu entorno.
1. Habilita las APIs necesarias:
gcloud services enable compute.googleapis.com \
confidentialcomputing.googleapis.com \
logging.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
2. Configura el Docker:
gcloud auth configure-docker gcr.io
3. Establece el token de Hugging Face:
export HF_TOKEN="your_token"
4. Clona el repositorio:
git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk
3. Situación
Usaremos lo siguiente:
- Cliente: Tu entorno local de Python o una VM estándar
- Servidor: Una instancia de vLLM que entrega un modelo de código abierto (p. ej., Gemma) dentro de Confidential Space (TDX/SEV-SNP)
- SDK: La biblioteca de Python prompt_encryption_sdk
4. Paso 0: Configuración del servidor
Antes de que el cliente pueda verificar algo, necesitamos un servidor que se ejecute en Confidential Space. Una secuencia de comandos de bash proporcionada controla el aprovisionamiento.
./codelabs/setup.sh --project-id <PROJECT_ID>
La secuencia de comandos setup.sh realiza las siguientes acciones:
- Habilita las APIs necesarias (Compute, Confidential Computing, Logging, Artifact Registry y Cloud Build).
- Compila y envía la imagen de Docker (que incluye vLLM con middleware de TLS atestiguado).
- Aprovisiona una cuenta de servicio con los permisos necesarios.
- Crea la VM confidencial (instancia A3 con GPU H100 y TDX habilitado).
- Configura las herramientas de redes y el balanceo de cargas (balanceador de cargas de red de transferencia).
- Guarda los resultados (hash de imagen y dirección IP del balanceador de cargas) en archivos locales.
5. Paso 1: Ejecuta el cliente atestiguado
Ahora que el servidor se ejecuta de forma segura, establece una conexión atestiguada.
python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>
La secuencia de comandos run_client.sh lee los detalles de la implementación y ejecuta una solicitud de Python con ConfidentialSDKClient. Si falla la atestación, se genera un AttestationError y nunca se envía la instrucción.
6. Paso 2: Limpieza
Para evitar cargos, limpia los recursos una vez que termines.
./codelabs/cleanup.sh --project-id <PROJECT_ID>
7. Avanzadas
¿Qué sucede durante http.post?
- TCP/TLS: Se estableció una conexión estándar.
- Intercepción del protocolo de enlace: El SDK se pausa antes de enviar el cuerpo.
- RPC de AttestConnection: El SDK envía un nonce al servidor.
- Generación de cotizaciones: El servidor solicita una cotización de hardware de TEE.
- Validación: El SDK verifica la firma y la política de la cotización.
- Vincular: El SDK verifica que el "material de claves exportado" del canal coincida con la sesión vinculada en la cotización.
- Transmisión de datos: El cuerpo se envía solo si pasan todas las verificaciones.
8. Solución de problemas
- Falla de certificación: Verifica que el image_hash de la política coincida con el contenedor.
- Conexión rechazada: Asegúrate de que se pueda acceder al servidor y que el puerto 8000 esté abierto.
- Tiempo de espera: La generación de cotizaciones de TEE puede llevar tiempo. Asegúrate de que los tiempos de espera sean suficientes.
9. Felicitaciones
Completaste correctamente el codelab del SDK de Prompt Encryption. Aprendiste a establecer un canal encriptado y verificado de forma criptográfica entre tu cliente y un servidor de inferencia basado en TEE.
Próximos pasos
- Explora las configuraciones avanzadas de AttestationPolicy.
- Integra el SDK con tus aplicaciones de producción existentes.
- Obtén más información sobre Confidential Space y los modelos de hardware de TEE.