テクトンチェーンを使ってサプライチェーンのセキュリティを管理する
DevOps Insights 2026年8月31 日にサービス終了となり、提供が中止されます。 Continuous Delivery は、2027年2月12日に以下のリージョンで提供が中止されます: au-syd、 ca-tor、 us-east。 また、同日をもって、Code Risk Analyzerもすべての地域で提供を終了いたします。 あるリージョンでこれらの機能が実際に利用されていない場合、そのリージョンの機能は早期に提供が終了し、新しいインスタンスの受け入れが停止される可能性があります。 詳細はこちら
Supply chain Levels for Software Artifacts (SLSA) は、セキュリティー・フレームワークです。 SLSA は、プロジェクト、企業、または企業内の改ざん、整合性の向上、およびパッケージとインフラストラクチャーの保護を防止するための標準と制御のチェックリストです。 SLSA を使用すると、チェーン内のどのリンクでも、できるだけ安全に回復力を得ることができます。
SRSA レベル 3 を達成するために、Tekton パイプラインは Tekton チェーンを使用しています。 Tekton チェーンは、Tekton でサプライ・チェーンのセキュリティーを管理するために使用できる Kubernetes カスタム・リソース定義 (CRD) コントローラーです。 詳しくは、 Tekton チェーンの資料 を参照してください。
プライベート・ワーカーでの Tekton チェーンのセットアップ
コマンド・ラインを使用して、Tekton フレームワーク、プライベート・ワーカー・エージェント・フレームワーク、および Tekton チェーン・フレームワークをインストールします。 コマンド・ラインに &chains=true を追加して、プライベート・ワーカー・フレームワークをインストールします。 例えば、 IBM Cloud Kubernetes Service クラスターでは、以下のコマンドを使用できます。
kubectl apply --filename "https://private-worker-service.{REGION}.devops.cloud.ibm.com/install?type=iks&olm=false&chains=true"
出力は以下の例のようになります。
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
次に、Tekton チェーンによる署名に使用される秘密鍵と公開鍵のペアを設定する必要があります。 詳しくは、 Tekton チェーンの資料 を参照してください。
Tekton チェーンのトリガー
パイプラインの Tekton チェーンをトリガーするには、タスク結果を Tekton タスク定義に追加します。 以下の 2 つのタスク結果が必要です。
*_IMAGE_DIGESTと一致する名前を持つもの*_IMAGE_URLと一致する名前を持つもの
以下に例を示します。
...
results:
- name: APP_IMAGE_DIGEST
description: The digest of the built image
- name: APP_IMAGE_URL
description: The url of the built image
...
タスクは、そのスクリプト内でこれら 2 つの結果を設定する必要があります。 Tekton チェーンで使用される任意のメカニズムを使用することもできます。
イメージ・レジストリーへの認証のプッシュ
デフォルトでは、Tekton チェーンは、認証と署名を oci レジストリーに保存するように構成されています。 デフォルトの動作を変更する場合は、 tekton-chains 名前空間にある構成マップ chains-config を編集します。 詳しくは、 Tekton チェーンの資料 を参照してください。
署名の検証
署名を検証するには、 Chains Signal Provenance チュートリアル で説明されているように、 cosign を使用できます。
管理対象ワーカーで実行している場合は、プライベート・ワーカー・エンドポイント https://private-worker-service.{REGION}.devops.cloud.ibm.com/chains/public_key を使用して、検証に使用される公開鍵を取得できます。 このエンドポイントによって返された内容をファイルに保存し、そのファイルを cosign コマンド・ラインで公開鍵として使用することができます。
署名および認証のダウンロード
認証または署名自体を取得するには、コマンド download signature または download attestation で cosign ツールを使用する必要があります。