Phase 17 - Lesson 25
Seguridad — Secretos, rotación de claves de API, logs de auditoría, barreras de protección
Elimina la dispersión de secretos (secret sprawl) a través de almacenes centralizados (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault). Nunca almacenes credenciales en archivos de configuración, archivos env en VCS o hojas de cálculo. Utiliza roles de IAM en lugar de claves estáticas; utiliza OIDC para CI/CD. El patrón de pasarela de IA (AI-gateway) es la solución en 2026: apps → gateway → proveedor de modelos, donde la pasarela obtiene las credenciales del almacén en tiempo de ejecución. Al rotar en el almacén, todas las aplicaciones las obtienen en minutos: sin nuevos despliegues ni mensajes en Slack sobre "quién tiene la clave nueva". Política de rotación de ≤90 días; escaneo con TruffleHog / GitGuardian / Gitleaks en cada commit. Zero-trust: MFA, SSO, RBAC/ABAC, tokens de corta duración y postura del dispositivo. El filtrado de PII (PII scrubbing) utiliza reconocimiento de entidades para enmascarar PHI/PII antes de su reenvío; la tokenización consistente (enfoque Mesh) mapea valores sensibles a marcadores de posición estables (placeholders) para que el LLM preserve la semántica del código y de las relaciones. Salida de red (egress): servicios de LLM en una subred dedicada de VPC/VNet que solo permita en la lista de elementos aprobados a
api.openai.com,api.anthropic.com, etc.; bloquea cualquier otra salida. Causa de incidentes en 2026: ataque a la cadena de suministro de Vercel a través de credenciales de CI/CD comprometidas que exfiltraron variables de entorno en miles de despliegues de clientes.
Tipo: Learn Lenguajes: Python (stdlib, depurador de PII de juguete + escritor de logs de auditoría) Prerrequisitos: Phase 17 · 19 (AI Gateways), Phase 17 · 13 (Observability) Tiempo: ~60 minutos
Objetivos de Aprendizaje
- Enumerar los cuatro antipatrones de gestión de secretos (archivos de configuración en VCS, env hardcodeado, hojas de cálculo, claves estáticas) y nombrar sus reemplazos.
- Explicar el patrón de pasarela de IA que obtiene claves de un almacén (AI-gateway-pulls-from-vault) como el estándar de producción de 2026.
- Implementar un filtro de PII con tokenización consistente (mismo valor → mismo marcador) para conservar la semántica.
- Nombrar el incidente de la cadena de suministro de Vercel en 2026 y lo que enseñó sobre la higiene de credenciales en CI/CD.
El Problema
Un becario realiza un commit de un archivo .env con claves de API. Lo borra rápidamente. Las claves ya están en el historial de git: el escaneo de GitGuardian las captura, y tu proceso de rotación consiste en "enviar un mensaje al equipo por Slack, actualizar 40 archivos de configuración y volver a desplegar todos los servicios". 8 horas después, la mitad de tus servicios están activos y la otra mitad espera por ventanas de despliegue.
Por otra parte, los prompts de los usuarios incluyen "Mi SSN es 123-45-6789". El prompt se envía a OpenAI. Tienes un BAA (Business Associate Agreement), pero tu política interna es enmascarar PII antes del reenvío. No lo hiciste.
Por último, el pod del LLM de tu clúster de EKS puede comunicarse con cualquier host de internet. Alguien exfiltra datos mediante una búsqueda de DNS a un dominio controlado por el atacante. Nada lo impidió.
La seguridad para servicios de LLM debe abordar los tres vectores: credenciales respaldadas por almacenes de secretos, enmascaramiento de PII (PII scrubbing), filtrado de red de salida (network egress filtering) y registros de auditoría.
El Concepto
Almacén de secretos centralizado + obtención basada en roles de IAM
Almacén (Vault): HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, GCP Secret Manager. Una única fuente de verdad.
Rol de IAM (IAM role): el gateway o app se autentica mediante su identidad de IAM, no mediante una clave estática. El almacén devuelve el secreto con la misma duración que la vida útil del token.
El patrón de pasarela de IA: la pasarela extrae la OPENAI_API_KEY del almacén en el momento de la solicitud. Al rotarla en el almacén, la siguiente solicitud obtiene la nueva clave. Sin nuevos despliegues.
Política de rotación ≤ 90 días
Todas las claves de API, tokens de root del almacén y credenciales de CI/CD. Rotación automatizada donde sea posible. Rotación manual registrada y rastreada.
Escaneo de secretos
- TruffleHog: expresiones regulares + entropía en commits.
- GitGuardian: comercial, alta precisión.
- Gitleaks: código abierto, se ejecuta en CI.
Ejecutar en cada commit. Bloquear el PR si se detecta un nuevo secreto.
Postura de confianza cero (Zero-trust)
- Se requiere MFA en todas las cuentas.
- SSO mediante SAML/OIDC.
- RBAC (basado en roles) o ABAC (basado en atributos) para acceso granular.
- Tokens de corta duración (horas, no días).
- Postura del dispositivo: solo dispositivos corporativos con cifrado de disco.
Filtro de PII / PHI
Antes de que el prompt salga de tu infraestructura:
- Reconocimiento de entidades (spaCy NER, Presidio, comercial).
- Enmascarar las entidades encontradas:
"My SSN is 123-45-6789"→"Mi SSN es [SSN_TOKEN_A3F]". - Tokenización consistente (enfoque Mesh): el mismo valor se mapea al mismo marcador de posición para que el LLM preserve las relaciones.
- Mapeo inverso opcional para la respuesta del LLM.
Los filtros de expresiones regulares estáticos capturan patrones básicos; NER captura más. Utiliza ambos.
Barreras de protección de entrada y salida
Entrada: bloquear jailbreaks conocidos, temas prohibidos y limitar la tasa por usuario.
Salida: filtro regex para secretos filtrados (patrones de claves de API, patrones de correo electrónico en contextos de rechazo) y clasificador para violaciones de políticas.
Lista de permisos de salida de red (egress whitelist)
Servicios de LLM en una subred dedicada:
- Lista de permisos (whitelist):
api.openai.com,api.anthropic.com, endpoints de bases de datos vectoriales y endpoints del almacén de secretos. - Todo lo demás: se descarta.
- DNS mediante un resolvedor exclusivo de lista de permisos (evita la exfiltración por túnel DNS).
Registro de auditoría
Registro inmutable de cada llamada al LLM con:
- Marca de tiempo (timestamp).
- Usuario / inquilino (tenant).
- Hash del prompt (no el prompt crudo por privacidad).
- Modelo y versión.
- Recuento de tokens.
- Costo.
- Hash de respuesta.
- Cualquier activación de barreras de protección.
Conservar según los requisitos regulatorios (1 año para SOC 2, 6 años para HIPAA).
El incidente de Vercel en 2026
Ataque a la cadena de suministro: credenciales de CI/CD comprometidas exfiltraron variables de entorno en miles de despliegues de clientes. Lección: las credenciales de CI/CD equivalen a producción. Almacénalas en el almacén de secretos. Acota el alcance de forma estricta. Rótala agresivamente.
Números que debes recordar
- Política de rotación: ≤ 90 días.
- Escaneo en cada commit: TruffleHog / GitGuardian / Gitleaks.
- Vercel 2026: credenciales de CI/CD comprometidas → variables de entorno filtradas de miles de clientes.
- Retención de logs de auditoría: SOC 2 = 1 año, HIPAA = 6 años.
Úsalo
code/main.py implementa un depurador de PII de juguete con tokenización consistente y un registro de auditoría append-only.
Entrégalo
Esta lección produce outputs/skill-llm-security-plan.md. Dada la regulación y el estado actual, diseña la migración al almacén de secretos, el depurador, la salida de red y el registro de auditoría.
Ejercicios
- Ejecuta
code/main.py. Envía dos prompts que hagan referencia al mismo SSN. Confirma que ambos reciben el mismo marcador de posición. - Diseña la política de salida de red para un despliegue de vLLM en EKS que realiza llamadas a OpenAI + Anthropic + Weaviate.
- Descubres una clave en el historial de git (de hace 2 años). ¿Cuál es la respuesta correcta: rotar la clave, depurar el historial o ambas? Justifica tu respuesta.
- Tu registro de auditoría crece 10 GB/día. Diseña niveles de retención (hot 30 días, warm 12 meses, cold 6 años).
- Argumenta si la tokenización inversa (sustituir los valores reales de vuelta en la respuesta del LLM) justifica su complejidad en comparación con mantener visibles los marcadores de posición.
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Almacén (Vault) | "almacén de secretos" | Servicio centralizado de administración de credenciales |
| Rol de IAM | "autenticación basada en identidad" | Rol asumido por la aplicación; devuelve credenciales de corta duración |
| OIDC para CI/CD | "tokens emitidos por la nube" | Sin claves estáticas en el CI; identidad mediante OIDC |
| TruffleHog / GitGuardian / Gitleaks | "escáneres de secretos" | Detección de secretos al momento del commit |
| RBAC / ABAC | "control de acceso" | Basado en roles vs basado en atributos |
| Filtro de PII (PII scrubbing) | "enmascaramiento de datos" | Eliminar o tokenizar entidades sensibles |
| Tokenización consistente | "marcadores de posición estables" | Mismo valor → mismo token cada vez |
| Enfoque Mesh | "tokenización Mesh" | Patrón de tokenización que preserva la semántica |
| Whitelist de salida | "lista de salida permitida" | Solo son accesibles los dominios permitidos |
| Registro de auditoría | "historial inmutable" | Registro append-only para cumplimiento normativo |