Firma de código con AWS Signer - Garantizando la confianza en funciones Lambda e imágenes de contenedor
Aplicamos firma de código a funciones Lambda e imágenes de contenedor, imponemos la verificación de firmas en el despliegue e integramos con pipelines CI/CD.
Necesidad de la firma de código
La firma de código es un mecanismo que garantiza criptográficamente que el código desplegado proviene de un editor de confianza y no ha sido alterado. Incluso si un pipeline de construcción es comprometido en un ataque a la cadena de suministro, la verificación de firmas previene el despliegue de código no autorizado. Como ilustra el incidente SolarWinds de 2020, las intrusiones en entornos de construcción son cada vez más sofisticadas, haciendo de la firma de código una tecnología fundamental para despliegues de confianza cero. AWS Signer proporciona un servicio administrado de firma y verificación para paquetes de despliegue de funciones Lambda e imágenes de contenedor, eliminando la necesidad de construir y operar infraestructura de firma propia.
Firma de código para Lambda
La configuración de firma de código de Lambda define los ARN de perfiles de firma de confianza (hasta 20) y la acción a tomar cuando la verificación falla (Warn o Enforce). En modo Enforce, el despliegue de funciones no firmadas o firmadas con perfiles no confiables se bloquea. El modo Warn registra los fallos de verificación mientras permite el despliegue, útil para una adopción gradual. En pipelines CI/CD, se construye un flujo donde CodeBuild genera un paquete ZIP, lo firma mediante la API StartSigningJob de Signer, y pasa la URL S3 del paquete firmado al UpdateFunctionCode de Lambda. Los trabajos de firma se ejecutan de forma asíncrona y pueden enviar notificaciones de finalización a EventBridge.
Firma de imágenes de contenedor e integración CI/CD
AWS Signer soporta la firma en formato Notation para imágenes de contenedor en ECR. En la etapa de construcción del pipeline CI/CD, las imágenes se construyen, se firman con Signer y luego se envían a ECR. Los controladores de admisión de EKS imponen la verificación de firmas, rechazando el despliegue de imágenes no firmadas. Los perfiles de firma definen el algoritmo criptográfico (ECDSA P-256 o RSA) y el período de validez; cuando un perfil expira, no se pueden generar nuevas firmas pero las existentes siguen siendo válidas. La revocación de firmas invalida el código firmado con un perfil comprometido. Después de la revocación, la verificación falla y el despliegue del código afectado se bloquea. Para profundizar en la seguridad de la cadena de suministro de software, libros especializados (Amazon) son una referencia útil.
Diseño operativo de perfiles de firma
El diseño de perfiles de firma debe alinearse con la estructura de despliegue de la organización. Crear perfiles separados por equipo limita el radio de impacto cuando un perfil se compromete a los artefactos de ese equipo. Períodos de validez demasiado cortos aumentan la carga de rotación, mientras que períodos demasiado largos extienden la ventana de riesgo durante un compromiso; configúrelos según la tolerancia al riesgo organizacional. Use políticas IAM para restringir la ejecución de signer:StartSigningJob a roles específicos (roles de construcción del pipeline CI/CD), impidiendo que desarrolladores individuales firmen y asegurando que solo el código que pasa por procesos de construcción aprobados sea firmado. Registre todas las operaciones de firma en CloudTrail para mantener una pista de auditoría de quién firmó qué y cuándo.
Comparación con otros métodos de firma
Más allá de AWS Signer, existen varias alternativas para la firma de código. Cosign (proyecto Sigstore) es una herramienta de firma de contenedores de código abierto que soporta firma sin claves (certificados efímeros) pero requiere gestionar la infraestructura de firma y las claves por cuenta propia. AWS Signer proporciona generación, almacenamiento y rotación de claves administrados con integración KMS que asegura que las claves están protegidas por módulos de seguridad de hardware (HSM). La firma GPG se usa ampliamente para firmar commits de git pero es difícil de integrar con la verificación de despliegue de Lambda o ECR. La fortaleza de AWS Signer reside en la integración nativa con la configuración de firma de código de Lambda y los controladores de admisión de EKS, permitiendo la imposición de verificación en tiempo de despliegue sin infraestructura adicional. Sin embargo, para entornos multi-nube que requieren políticas de firma unificadas, Notation o Cosign ofrecen mayor portabilidad.
Precios de Signer
Los precios de AWS Signer se basan en el número de operaciones de firma. La verificación de firmas es gratuita. Cuando los pipelines CI/CD construyen y firman frecuentemente, los costos de firma de imágenes de contenedor pueden acumularse, por lo que se gestionan los costos omitiendo la firma en entornos de desarrollo e imponiéndola solo en staging y producción. No hay cargos adicionales por gestionar perfiles de firma. La firma de código Lambda tiene un costo unitario bajo, manteniendo el impacto en costos mínimo incluso con alta frecuencia de despliegue.
Resumen
AWS Signer es un servicio administrado que proporciona firma de código para funciones Lambda e imágenes de contenedor, garantizando criptográficamente la confiabilidad del código desplegado. Firmar durante la etapa de construcción del pipeline CI/CD e imponer la verificación a través de la configuración de firma de código de Lambda o los controladores de admisión de EKS añade una capa de defensa contra ataques a la cadena de suministro. Perfiles de firma aislados por equipo y permisos de firma restringidos por IAM minimizan el radio de impacto durante compromisos.