Utiliser les chaînes de Tekton pour gérer la sécurité de la chaîne d'approvisionnement
DevOps Insights Le service prendra fin et sera interrompu le 31 août 2026. Le service Continuous Delivery sera interrompu dans les régions suivantes le 12 février 2027 : au-syd, ca-tor, us-east. Code Risk Analyzer sera également retiré du marché dans toutes les régions à cette date. Si ces fonctionnalités ne sont pas activement utilisées dans une région donnée, elles pourraient être supprimées plus tôt dans cette région et ne plus accepter de nouvelles instances. En savoir plus
Niveaux de chaîne d'approvisionnement pour les artefacts logiciels (SLSA) est une infrastructure de sécurité. SLSA est une liste de contrôle de normes et de contrôles visant à prévenir la contrefaçon, à améliorer l'intégrité et à sécuriser les packages et l'infrastructure dans vos projets, entreprises ou entreprises. SLSA vous permet de passer d'un niveau de sécurité suffisant à un niveau de résilience maximum, quel que soit le maillon de la chaîne.
Pour atteindre le niveau 3 de la SLSA, les pipelines Tekton utilisent les chaînes Tekton. Tekton Chains est un contrôleur CRD (Custom Resource Definition) Kubernetes que vous pouvez utiliser pour gérer la sécurité de votre chaîne d'approvisionnement dans Tekton. Pour plus d'informations, voir la documentation sur les chaînes Tekton.
Configuration de chaînes Tekton sur un agent privé
Utilisez la ligne de commande pour installer l'infrastructure Tekton, l'infrastructure d'agent d'agent privé et l'infrastructure de chaîne Tekton. Ajoutez &chains=true à la ligne de commande pour installer l'infrastructure d'agent
privé. Par exemple, sur un cluster IBM Cloud Kubernetes Service, vous pouvez utiliser la commande suivante:
kubectl apply --filename "https://private-worker-service.{REGION}.devops.cloud.ibm.com/install?type=iks&olm=false&chains=true"
Voir l'exemple de sortie suivant :
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
Ensuite, vous devez définir la paire de clés privée et publique utilisée pour la signature par Tekton Chains. Pour plus d'informations, voir la documentation sur les chaînes Tekton.
Déclenchement des chaînes de tekton
Pour déclencher des chaînes Tekton pour votre pipeline, ajoutez les résultats de la tâche à vos définitions de tâche Tekton. Vous avez besoin de deux résultats de tâche:
- dont le nom correspond à
*_IMAGE_DIGEST - dont le nom correspond à
*_IMAGE_URL
Exemple :
...
results:
- name: APP_IMAGE_DIGEST
description: The digest of the built image
- name: APP_IMAGE_URL
description: The url of the built image
...
Votre tâche doit définir ces deux résultats dans son script. Vous pouvez également utiliser n'importe quel mécanisme utilisé par Tekton Chains.
Insertion d'attestations dans le registre d'images
Par défaut, Tekton Chains est configuré pour enregistrer l'attestation et la signature dans le registre oci. Si vous souhaitez modifier le comportement par défaut, éditez la mappe de configuration chains-config qui se trouve dans
l'espace de nom tekton-chains. Pour plus d'informations, voir la documentation sur les chaînes Tekton.
Vérification des signatures
Pour vérifier les signatures, vous pouvez utiliser cosign comme expliqué dans le tutoriel sur la provenance des signaux de chaînes.
Lors de l'exécution sur des noeuds worker gérés, vous pouvez extraire la clé publique utilisée pour la validation à l'aide du noeud final d'agent privé https://private-worker-service.{REGION}.devops.cloud.ibm.com/chains/public_key.
Vous pouvez sauvegarder le contenu renvoyé par ce noeud final dans un fichier et utiliser ce fichier comme clé publique dans la ligne de commande cosign.
Téléchargement de la signature et de l'attestation
Pour obtenir l'attestation ou la signature elle-même, vous devez utiliser l'outil cosign avec la commande download signature ou download attestation.