Metadatos de cadena de suministro verificables para Tekton


Afortunadamente, el nativo de Kubernetes Tekton proyecto, un marco de código abierto para la creación de sistemas CI / CD, se diseñó teniendo en cuenta la seguridad desde el primer día, y el nuevo Cadenas Tekton El proyecto está aquí para ayudarlo a llevarlo al siguiente nivel. Tekton Chains captura de forma segura metadatos para ejecuciones de canalizaciones de CI / CD. Al principio de Tekton tomamos dos decisiones de diseño realmente importantes que facilitan la seguridad de la cadena de suministro: definiciones de canalización declarativas y transiciones de estado explícitas. La siguiente sección explicará qué significan en la práctica y cómo facilitan la construcción de un canal de entrega seguro.

Definiciones o «recuadros y flechas»
Al igual que todo en la clase de física de la escuela secundaria, una canalización de CI / CD se puede modelar como una serie de cajas. Cada caja tiene algunas entradas, algunas salidas y algunos pasos que ocurren en el medio. Incluso si tiene un script bash grande y complicado que busca dependencias, crea programas, ejecuta pruebas, descarga World-wide-web y lo implementa en producción, puede dibujar cuadros y flechas para representar este flujo. Las cajas pueden ser realmente grandes, pero puedes hacerlo.

Desde los bocetos iniciales de la pizarra, el Tubería y Tarea Los CRD en Tekton se diseñaron para permitir a los usuarios definir cada paso de su canalización a nivel granular. Estos tipos incluyen soporte para entornos de construcción, salidas y entradas declaradas obligatorias. Esto significa que puede rastrear exactamente qué fuentes se incluyeron en una compilación, qué herramientas se utilizaron durante la compilación y qué artefactos aparecieron al last. Al dividir una gran tubería monolítica en una serie de pasos más pequeños y reutilizables, puede aumentar la visibilidad del sistema en standard. Esto hace que sea más fácil comprender su exposición a los ataques de la cadena de suministro, detectar problemas cuando ocurren y recuperarse de ellos después.

Transiciones explícitas
Una vez que se outline una canalización, existen algunos enfoques para orquestarla: activada por nivel y activada por borde. Como la mayoría del ecosistema de Kubernetes, Tekton está diseñado para operar de una manera activada por niveles. Esto significa que los pasos son ejecutados explícitamente por un orquestador central que ejecuta una tarea, espera su finalización y luego determine qué hacer a continuación. En los sistemas basados ​​en el borde, una definición de canalización se traduciría en un conjunto de eventos y oyentes. Cada paso desencadena eventos cuando se completa, y estos eventos los recogen los oyentes que ejecutan el siguiente conjunto de pasos.

Los sistemas basados ​​en eventos o activados por el borde son fáciles de razonar, pero pueden ser difíciles de administrar a escala. También hacen que sea mucho más difícil rastrear un artefacto a medida que fluye por todo el sistema. Cada paso en la tubería solo conoce el inmediatamente anterior ningún paso es responsable del seguimiento de toda la ejecución. Esto puede resultar problemático cuando intenta comprender la postura de seguridad de su canal de entrega.

Tekton fue diseñado con el enfoque opuesto en mente: disparado por nivel. En lugar de una máquina Rube-Goldberg atada con cinta adhesiva y pinzas para la ropa, Tekton se parece más a una línea de montaje explícita. Los sistemas activados por niveles como Tekton se mueven de un estado a otro de una manera calculada por un orquestador central. Requieren un diseño más explícito desde el principio, pero son más fáciles de observar y razonar después. Las cadenas de suministro que utilizan sistemas como Tekton son más seguras.

Canalización de entrega segura a través de cadenas y procedencia
Entonces, ¿cómo se combinan estas dos decisiones de diseño para facilitar la seguridad de la cadena de suministro? Entra en Tekton Chains.

Al observar la ejecución de una tarea o una canalización y prestar especial atención a las entradas, salidas y pasos a lo largo del camino, podemos facilitar el seguimiento de lo que sucedió y por qué más adelante. Este «observador» se puede ejecutar en un dominio de confianza separado y firmar criptográficamente todos estos metadatos capturados a medida que se almacenan, dejando un libro de actividades a prueba de manipulaciones. Esta técnica se llama «construcciones verificables. «Estos metadatos generados de forma segura se pueden utilizar de varias formas, desde el registro de auditoría hasta la recuperación de infracciones de seguridad y la aplicación de políticas previas a la implementación.

Puede instalar Chains en cualquier clúster habilitado para Tekton y configurarlo para generar estos metadatos de la cadena de suministro firmados criptográficamente para sus compilaciones. Chains admite sistemas de firmas conectables como PGP, x509 y Cloud KMS. Las cargas útiles se pueden generar en algunos formatos diferentes estándar de la industria, como las especificaciones RedHat Simple-Signing e In-Toto Provenance. La documentación completa está disponible aquí, pero puede comenzar rápidamente con algo como esto:


Para este instructivo, necesitará acceso a un clúster de GKE Kubernetes y un registro de GCR con credenciales de inserción. El clúster ya debería tener Tekton Pipelines instalado.

Instale Tekton Chains en su clúster:

PS kubectl implement –filename https://storage.googleapis.com/tekton-releases/chains/most up-to-date/release.yaml


A continuación, configurará la autenticación de registro para el controlador Tekton Chains, de modo que pueda enviar firmas de imágenes OCI a su registro. Para configurar la autenticación, creará una cuenta de servicio y descargará las credenciales:

PS exportar Task_ID =

PS Las cuentas de servicio de gcloud iam crean cadenas de tekton

PS Las claves de las cuentas de servicio de gcloud iam crean qualifications.json –iam-account=tekton-chains@$Job_ID.iam.gserviceaccount.com


Ahora, cree un secreto de Kubernetes a partir de su archivo de credenciales para que el controlador de Chains pueda acceder a él:

PS kubectl crea credenciales de registro secretas de Docker-Registry

–docker-server = gcr.io

–docker-username = _json_key

–docker-e-mail=tekton@chains.com

–docker-password = «$ (cat credentials.json)»

-n cadenas-de-tecton

PS servicio de parche kubectl cuenta tekton-chains-controller

-p «» imagePullSecrets «: (» nombre «: » credenciales-de-registro «)» -n cadenas-de-tekton


Nosotros podemos usar cosignar para generar un par de claves como secreto de Kubernetes, que el controlador de Chains utilizará para firmar. Cosign le pedirá una contraseña, que se almacenará en el secreto:

PS cosign crank out-critical-pair -k8s tekton-chains / signing-insider secrets

A continuación, deberá configurar la autenticación en su registro de GCR para la tarea kaniko como otro secreto de Kubernetes.

PS exportar Qualifications_Secret = kaniko-qualifications

PS kubectl crea $ Qualifications_Magic formula genérico secreto –de-file credentials.json

Ahora, crearemos una tarea de cadenas de kaniko que creará y enviará una imagen de contenedor a su registro. Tekton Chains reconocerá que se ha creado una imagen y la firmará automáticamente.

PS kubectl utilize -f https://raw.githubusercontent.com/tektoncd/chains/most important/examples/kaniko/gcp/kaniko.yaml

PS gato << EOF | kubectl apply -f -

apiVersion: tekton.dev/v1beta1

tipo: TaskRun

metadatos:

nombre: kaniko-run

Especificaciones:

taskRef:

nombre: kaniko-gcp

params:

– nombre: IMAGEN

valor: gcr.io/$PROJECT_ID/kaniko-chains

espacios de trabajo:

– nombre: fuente

emptyDir:

– nombre: credenciales

secreto:

nombresecreto: $ CREDENTIALS_SECRET

EOF


Espere a que se complete la TaskRun y ​​déle al controlador Tekton Chains unos segundos para firmar la imagen y almacenar la firma. Debería poder verificar la firma con cosignar y tu clave pública:

PS cosign verificar -key cosign.pub gcr.io/$PROJECT_ID/kaniko-chains

¡Felicidades! Ha firmado y verificado correctamente una imagen de OCI con Tekton Chains y su cofirmante.

Que sigue
Dentro de Chains, mejoraremos la integración con otros proyectos de seguridad de la cadena de suministro. Esto incluye soporte para Transparencia Binaria y Compilaciones Verificables a través de integraciones con el Sigstore y En Toto proyectos. También mejoraremos y proporcionaremos un conjunto de definiciones de procesos y tareas altamente seguras y bien diseñadas en el catálogo de TektonCD.

En Tuberías Tekton, planeamos terminar TEP-0025 (Hermekton) para habilitar el soporte para la ejecución hermética de la construcción. Si quieres jugar con él ahora, hermekton se puede ejecutar como un característica alfa en modo experimental. Cuando hermekton está habilitado, una compilación se ejecuta en un entorno bloqueado sin conectividad de red. Las compilaciones herméticas garantizan que todos los insumos se hayan declarado explícitamente con anticipación, lo que proporciona una cadena de suministro más auditable. Las construcciones herméticas y las cadenas se alinean bien, porque la propiedad de construcción de hermeticidad está contenida en la procedencia de construcción completa capturada por las cadenas. Las cadenas pueden generar y dar fe de los metadatos que especifican exactamente qué secciones de una compilación tenían acceso a la red.

Esto significa que la política se puede definir exactamente en torno a qué herramientas de compilación pueden acceder a la red y cuáles no. Estos metadatos pueden usarse en políticas en el momento de la compilación (prohibiendo compiladores con vulnerabilidades de seguridad) o almacenados y usados ​​por los motores de políticas en el momento de la implementación (solo se permite la ejecución de contenedores con código revisado y compilados de manera verificable).

Creemos que la seguridad de la cadena de suministro debe estar incorporada y por defecto. Ningún orquestador de tareas puede prometer una seguridad perfecta en la cadena de suministro, pero TektonCD fue diseñado con características únicas en mente que facilitan hacer lo correcto. Siempre estamos buscando comentarios sobre el diseño, los objetivos y los requisitos. Puedes comunicarte con GitHub o el #cadenas Canal flojo.



Enlace a la noticia original