Utilización de las cadenas Tekton para gestionar la seguridad de la cadena de suministro
DevOps Insights Llegará al final de su vida útil y se dejará de ofrecer el 31 de agosto de 2026. Continuous Delivery dejará de estar disponible en las siguientes regiones el 12 de febrero de 2027: au-syd, ca-tor, us-east. Code Risk Analyzer también dejará de estar disponible en todas las regiones a partir de esa fecha. Si en una región no se hace un uso activo de estas funciones, es posible que dichas funciones se dejen de ofrecer antes de lo previsto en esa región y dejen de aceptar nuevas instancias. Más información
Los niveles de cadena de suministro para artefactos de software (SLSA) es una infraestructura de seguridad. SLSA es una lista de comprobación de estándares y controles para evitar la manipulación indebida, mejorar la integridad y proteger los paquetes y la infraestructura en sus proyectos, empresas o empresas. SLSA le permite pasar de lo suficientemente seguro a ser lo más resiliente posible, en cualquier eslabón de la cadena.
Para lograr el nivel 3 de SLSA, las interconexiones de Tekton utilizan las cadenas de Tekton. Tekton Chains es un controlador de Kubernetes Custom Resource Definition (CRD) que puede utilizar para gestionar la seguridad de la cadena de suministro en Tekton. Para obtener más información, consulte la documentación de Tekton Chains.
Configuración de cadenas de Tekton en un trabajador privado
Utilice la línea de mandatos para instalar la infraestructura de Tekton, la infraestructura de agente de trabajador privado y la infraestructura de Tekton Chain. Añada &chains=true a la línea de mandatos para instalar la infraestructura
de trabajador privado. Por ejemplo, en un clúster IBM Cloud Kubernetes Service, puede utilizar el mandato siguiente:
kubectl apply --filename "https://private-worker-service.{REGION}.devops.cloud.ibm.com/install?type=iks&olm=false&chains=true"
Consulte la salida de ejemplo siguiente:
namespace/tekton-pipelines created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-controller-cluster-access created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-controller-tenant-access created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-webhook-cluster-access created
role.rbac.authorization.k8s.io/tekton-pipelines-controller created
role.rbac.authorization.k8s.io/tekton-pipelines-webhook created
role.rbac.authorization.k8s.io/tekton-pipelines-leader-election created
role.rbac.authorization.k8s.io/tekton-pipelines-info created
serviceaccount/tekton-pipelines-controller created
serviceaccount/tekton-pipelines-webhook created
clusterrolebinding.rbac.authorization.k8s.io/tekton-pipelines-controller-cluster-access created
clusterrolebinding.rbac.authorization.k8s.io/tekton-pipelines-controller-tenant-access created
clusterrolebinding.rbac.authorization.k8s.io/tekton-pipelines-webhook-cluster-access created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-controller created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-webhook created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-webhook-leaderelection created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-info created
customresourcedefinition.apiextensions.k8s.io/clustertasks.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/customruns.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/pipelines.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/pipelineruns.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/resolutionrequests.resolution.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/tasks.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/taskruns.tekton.dev created
customresourcedefinition.apiextensions.k8s.io/verificationpolicies.tekton.dev created
secret/webhook-certs created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.pipeline.tekton.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.pipeline.tekton.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.pipeline.tekton.dev created
clusterrole.rbac.authorization.k8s.io/tekton-aggregate-edit created
clusterrole.rbac.authorization.k8s.io/tekton-aggregate-view created
configmap/config-defaults created
configmap/feature-flags created
configmap/pipelines-info created
configmap/config-leader-election created
configmap/config-logging created
configmap/config-observability created
configmap/config-registry-cert created
configmap/config-spire created
deployment.apps/tekton-pipelines-controller created
service/tekton-pipelines-controller created
namespace/tekton-pipelines-resolvers created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-resolvers-resolution-request-updates created
role.rbac.authorization.k8s.io/tekton-pipelines-resolvers-namespace-rbac created
serviceaccount/tekton-pipelines-resolvers created
clusterrolebinding.rbac.authorization.k8s.io/tekton-pipelines-resolvers created
rolebinding.rbac.authorization.k8s.io/tekton-pipelines-resolvers-namespace-rbac created
configmap/bundleresolver-config created
configmap/cluster-resolver-config created
configmap/resolvers-feature-flags created
configmap/config-leader-election created
configmap/config-logging created
configmap/config-observability created
configmap/git-resolver-config created
configmap/hubresolver-config created
deployment.apps/tekton-pipelines-remote-resolvers created
horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook created
deployment.apps/tekton-pipelines-webhook created
service/tekton-pipelines-webhook created
customresourcedefinition.apiextensions.k8s.io/batchpolls.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/cryptodetectors.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/pwtaskruns.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/localpipelines.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/workeragents.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/pwaconfigs.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/taskpayloads.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/cdpipelineruns.devops.cloud.ibm.com created
customresourcedefinition.apiextensions.k8s.io/steplogs.devops.cloud.ibm.com created
configmap/private-worker-agent-config-defaults created
deployment.apps/private-worker-agent created
role.rbac.authorization.k8s.io/private-worker-agent created
rolebinding.rbac.authorization.k8s.io/private-worker-agent created
serviceaccount/private-worker-agent created
clusterrolebinding.rbac.authorization.k8s.io/pwa-manager-rolebinding created
clusterrole.rbac.authorization.k8s.io/manager-role created
clusterrolebinding.rbac.authorization.k8s.io/external-secret-update-role created
serviceaccount/external-secret-update-role created
job.batch/extsecret-install-1697655985441 created
namespace/tekton-chains created
secret/signing-secrets created
configmap/chains-config created
deployment.apps/tekton-chains-controller created
clusterrolebinding.rbac.authorization.k8s.io/tekton-chains-controller-cluster-access created
clusterrole.rbac.authorization.k8s.io/tekton-chains-controller-cluster-access created
clusterrole.rbac.authorization.k8s.io/tekton-chains-controller-tenant-access created
clusterrolebinding.rbac.authorization.k8s.io/tekton-chains-controller-tenant-access created
serviceaccount/tekton-chains-controller created
role.rbac.authorization.k8s.io/tekton-chains-leader-election created
rolebinding.rbac.authorization.k8s.io/tekton-chains-controller-leaderelection created
role.rbac.authorization.k8s.io/tekton-chains-info created
rolebinding.rbac.authorization.k8s.io/tekton-chains-info created
configmap/chains-info created
configmap/config-logging created
configmap/tekton-chains-config-observability created
service/tekton-chains-metrics created
A continuación, debe establecer el par de claves pública y privada que se utiliza para la firma por parte de Tekton Chains. Para obtener más información, consulte la documentación de Tekton Chains.
Desencadenamiento de cadenas de tekton
Para desencadenar cadenas de Tekton para el conducto, añada los resultados de la tarea a las definiciones de tarea de Tekton. Necesita dos resultados de tarea:
- uno que tiene un nombre que coincide con
*_IMAGE_DIGEST - uno que tiene un nombre que coincide con
*_IMAGE_URL
Por ejemplo:
...
results:
- name: APP_IMAGE_DIGEST
description: The digest of the built image
- name: APP_IMAGE_URL
description: The url of the built image
...
La tarea debe establecer estos dos resultados dentro de su script. También puede utilizar cualquier mecanismo utilizado por Tekton Chains.
Envío de testificaciones al registro de imágenes
De forma predeterminada, Tekton Chains está configurado para guardar la testificación y la firma en el registro oci. Si desea cambiar el comportamiento predeterminado, edite el mapa de configuración chains-config que se encuentra
en el espacio de nombres tekton-chains. Para obtener más información, consulte la documentación de Tekton Chains.
Verificación de firmas
Para verificar las firmas, puede utilizar cosign tal como se explica en la Guía de aprendizaje de procedencia de señales de cadenas.
Cuando se ejecuta en trabajadores gestionados, puede recuperar la clave pública que se utiliza para la validación utilizando el punto final de trabajador privado https://private-worker-service.{REGION}.devops.cloud.ibm.com/chains/public_key.
Puede guardar el contenido devuelto por este punto final en un archivo y utilizarlo como clave pública en la línea de mandatos de cosign.
Descarga de firma y testificación
Para obtener la propia testificación o firma, debe utilizar la herramienta cosign con el mandato download signature o download attestation.