Utilizzo delle catene Tekton per gestire la sicurezza della catena di fornitura
DevOps Insights Il servizio giungerà al termine e verrà interrotto il 31 agosto 2026. Il servizio " Continuous Delivery " verrà interrotto nelle seguenti regioni il 12 febbraio 2027: au-syd, ca-tor, us-east. A partire da tale data, anche Code Risk Analyzer verrà ritirato dal mercato in tutte le regioni. Se in una regione non si riscontra un utilizzo attivo di queste funzionalità, queste potrebbero essere dismesse in anticipo e non accettare più nuove istanze. Per saperne di più
Livelli di supply chain per le risorse software (SLSA) è un framework di sicurezza. SLSA è un elenco di controllo e standard per prevenire la manomissione, migliorare l'integrità e proteggere pacchetti e infrastrutture nei progetti, nelle aziende o nelle aziende. SLSA ti fa passare da abbastanza sicuro ad essere il più resistente possibile, a qualsiasi anello della catena.
Per raggiungere il livello SLSA 3, le pipeline Tekton utilizzano le catene Tekton. Tekton Chains è un controller CRD (Custom Resource Definition) Kubernetes che puoi utilizzare per gestire la tua sicurezza della catena di fornitura in Tekton. Per ulteriori informazioni, vedi la documentazione di Tekton Chains.
Impostazione delle catene Tekton su un operatore privato
Utilizzare la riga di comando per installare il framework Tekton, il framework dell'agent di lavoro privato e il framework Tekton Chain. Aggiungi &chains=true alla riga di comando per installare il framework del nodo di lavoro
privato. Ad esempio, su un cluster IBM Cloud Kubernetes Service puoi utilizzare il seguente comando:
kubectl apply --filename "https://private-worker-service.{REGION}.devops.cloud.ibm.com/install?type=iks&olm=false&chains=true"
Vedi il seguente output di esempio:
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
Successivamente, devi impostare la coppia di chiavi privata e pubblica utilizzata per la firma da parte di Tekton Chains. Per ulteriori informazioni, vedi la documentazione di Tekton Chains.
Attivazione delle catene Tekton
Per attivare le catene Tekton per la pipeline, aggiungere i risultati dell'attività alle definizioni dell'attività Tekton. Sono necessari due risultati di attività:
- uno con un nome che corrisponde a
*_IMAGE_DIGEST - uno con un nome che corrisponde a
*_IMAGE_URL
Ad esempio:
...
results:
- name: APP_IMAGE_DIGEST
description: The digest of the built image
- name: APP_IMAGE_URL
description: The url of the built image
...
L'attività deve impostare questi due risultati all'interno dello script. È anche possibile utilizzare qualsiasi meccanismo utilizzato da Tekton Chains.
Invio di attestazioni al registro delle immagini
Per impostazione predefinita, Tekton Chains è configurato per salvare l'attestazione e la firma nel registro oci. Se si desidera modificare il comportamento predefinito, modificare la mappa di configurazione chains-config che si
trova nello spazio dei nomi tekton-chains. Per ulteriori informazioni, vedi la documentazione di Tekton Chains.
Verifica delle firme
Per verificare le firme, puoi utilizzare cosign come spiegato nell'Esercitazione sulla provenienza del segnale delle catene.
Quando sei in esecuzione sui nodi di lavoro gestiti, puoi recuperare la chiave pubblica utilizzata per la convalida utilizzando l'endpoint del nodo di lavoro privato https://private-worker-service.{REGION}.devops.cloud.ibm.com/chains/public_key.
È possibile salvare i contenuti restituiti da questo endpoint in un file e utilizzare tale file come chiave pubblica nella riga comandi cosign.
Download della firma e dell'attestazione
Per ottenere l'attestazione o la firma stessa, devi utilizzare lo strumento cosign con il comando download signature o download attestation.