Verwendung von Tekton-Ketten für die Sicherheit der Lieferkette
DevOps Insights wird am 31. August 2026 das Ende des Betriebs erreichen und eingestellt werden. Continuous Delivery wird am 12. Februar 2027 in den folgenden Regionen eingestellt: au-syd, ca-tor, us-east. Code Risk Analyzer wird zu diesem Zeitpunkt ebenfalls in allen Regionen eingestellt. Wenn diese Funktionen in einer Region nicht aktiv genutzt werden, können sie in dieser Region vorzeitig eingestellt werden, sodass keine neuen Instanzen mehr akzeptiert werden. Weitere Informationen
Supply Chain Levels for Software Artifacts (SLSA) ist ein Sicherheitsframework. SLSA ist eine Checkliste mit Standards und Kontrollen, um Manipulationen zu verhindern, die Integrität zu verbessern und Pakete und Infrastruktur in Ihren Projekten, Unternehmen oder Unternehmen zu schützen. SLSA bringt Sie von sicher genug, um so widerstandsfähig wie möglich zu sein, an jedem beliebigen Glied in der Kette.
Um die SLSA-Stufe 3 zu erreichen, verwenden Tekton-Pipelines die Tekton-Ketten. Tekton Chains ist ein Kubernetes-CRD-Controller (Custom Resource Definition), mit dem Sie Ihre Supply-Chain-Sicherheit in Tekton verwalten können. Weitere Informationen finden Sie in der Tekton-Ketten-Dokumentation.
Tekton-Ketten auf einem privaten Worker einrichten
Verwenden Sie die Befehlszeile, um das Tekton-Framework, das private Worker Agent-Framework und das Tekton Chain-Framework zu installieren. Fügen Sie &chains=true zur Befehlszeile hinzu, um das private Worker-Framework zu installieren.
In einem IBM Cloud Kubernetes Service-Cluster können Sie beispielsweise den folgenden Befehl verwenden:
kubectl apply --filename "https://private-worker-service.{REGION}.devops.cloud.ibm.com/install?type=iks&olm=false&chains=true"
Nachfolgend sehen Sie eine Beispielausgabe:
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
Anschließend müssen Sie das Paar aus privatem und öffentlichem Schlüssel festlegen, das von Tekton Chains zum Signieren verwendet wird. Weitere Informationen finden Sie in der Tekton-Ketten-Dokumentation.
Tekton-Ketten auslösen
Um Tekton-Ketten für Ihre Pipeline auszulösen, fügen Sie die Taskergebnisse Ihren Tekton-Taskdefinitionen hinzu. Sie benötigen zwei Taskergebnisse:
- Eines, das einen Namen hat, der mit
*_IMAGE_DIGESTübereinstimmt. - Eines, das einen Namen hat, der mit
*_IMAGE_URLübereinstimmt.
Zum Beispiel:
...
results:
- name: APP_IMAGE_DIGEST
description: The digest of the built image
- name: APP_IMAGE_URL
description: The url of the built image
...
Ihre Task muss diese beiden Ergebnisse im Script festlegen. Sie können auch einen beliebigen Mechanismus verwenden, der von Tekton-Ketten verwendet wird.
Attestierungen mit Push-Operation an die Image-Registry übertragen
Standardmäßig ist Tekton Chains so konfiguriert, dass die Attestierung und Signatur in der Oci-Registry gespeichert werden. Wenn Sie das Standardverhalten ändern möchten, bearbeiten Sie die Konfigurationszuordnung chains-config,
die sich im Namensbereich tekton-chains befindet. Weitere Informationen finden Sie in der Tekton-Ketten-Dokumentation.
Signaturen überprüfen
Zum Prüfen der Signaturen können Sie cosign verwenden, wie im Chains Signal Provenance Tutorial erläutert.
Bei der Ausführung auf verwalteten Workern können Sie den öffentlichen Schlüssel, der für die Validierung verwendet wird, mithilfe des privaten Workerendpunkts https://private-worker-service.{REGION}.devops.cloud.ibm.com/chains/public_key abrufen. Sie können die von diesem Endpunkt zurückgegebenen Inhalte in einer Datei speichern und diese Datei als öffentlichen Schlüssel in der cosign-Befehlszeile verwenden.
Signatur und Attestierung herunterladen
Zum Abrufen der Attestierung oder Signatur selbst müssen Sie das Tool cosign mit dem Befehl download signature oder download attestation verwenden.