• Русский
  • Начало работы

    Это руководство помогает новым пользователям быстро настроить Tekton Chains для защиты своих CI/CD-пайплайнов с помощью генерации и проверки криптографических подписей для Tekton TaskRun.

    Введение

    Сценарии использования

    Tekton Chains помогает защитить цепочку поставки программного обеспечения, автоматически генерируя криптографические подписи для ваших артефактов сборки. В этом руководстве показано, как настроить Tekton Chains, сгенерировать ключ подписи, запустить простую задачу и проверить ее подпись.

    Оценочное время чтения

    10-15 минут

    Важные примечания

    • Tekton Chains по умолчанию устанавливается в namespace tekton-pipelines при использовании Alauda Devops Pipelines Operator
    • Ключи подписи следует надежно хранить и управлять ими; в production-средах рассмотрите использование системы управления ключами (KMS)
    • В этом руководстве для демонстрации используется самая простая конфигурация

    Предварительные требования

    • Kubernetes cluster с установленными Tekton Pipelines и Tekton Chains
    • Установленный и настроенный для доступа к вашему cluster CLI kubectl
    • Установленный инструмент CLI cosign
    • Установленный инструмент CLI jq

    Обзор процесса

    ШагОперацияОписание
    1Генерация ключей подписиСоздание пары ключей для подписи артефактов
    2Настройка Tekton ChainsНастройка Chains для использования Tekton storage backend
    3Запуск примера задачиСоздание и запуск простого TaskRun
    4Проверка подписиИзвлечение и проверка подписи TaskRun

    Пошаговые инструкции

    Шаг 1: Генерация ключей подписи

    Для получения более подробной информации см. Signing Key Configuration

    Tekton Chains использует криптографические ключи для подписи артефактов. По умолчанию он ищет secret с именем signing-secrets в namespace Chains.

    1. Установите cosign, если вы еще этого не сделали

    2. Сгенерируйте пару ключей и сохраните ее как Kubernetes secret:

      $ COSIGN_PASSWORD={password} cosign generate-key-pair k8s://tekton-pipelines/signing-secrets
      
      Successfully created secret signing-secrets in namespace tekton-pipelines
      Public key written to cosign.pub
      TIP

      Этот пароль будет сохранен в Kubernetes secret с именем signing-secrets в namespace tekton-pipelines.

    3. Проверьте, что secret был создан:

      $ kubectl get secret signing-secrets -n tekton-pipelines
      
      NAME              TYPE     DATA   AGE
      signing-secrets   Opaque   3      3m

    Шаг 2: Настройка Tekton Chains

    Настройте Tekton Chains для хранения артефактов в формате Tekton, применив следующую конфигурацию:

    $ kubectl patch tektonconfigs.operator.tekton.dev config --type=merge -p='{
      "spec": {
        "chain": {
          "artifacts.oci.storage": "",
          "artifacts.taskrun.format": "in-toto",
          "artifacts.taskrun.storage": "tekton"
        }
      }
    }'

    Пояснение полей YAML:

    • artifacts.oci.storage: Тип хранилища для OCI artifacts. Установите пустую строку, чтобы пропустить сохранение.
    • artifacts.taskrun.format: Формат артефакта taskrun. Установите in-toto, чтобы использовать формат in-toto.
    • artifacts.taskrun.storage: Тип хранилища для артефактов taskrun. Установите tekton, чтобы сохранять их в аннотациях Tekton TaskRun.

    Шаг 3: Запуск примера задачи

    Теперь создадим простой TaskRun, который Chains автоматически подпишет.

    1. Создайте простой TaskRun:

      $ export NAMESPACE=default
      
      $ cat <<'EOF' | kubectl create -n $NAMESPACE -f -
      apiVersion: tekton.dev/v1
      kind: TaskRun
      metadata:
        name: build-push-run-output-image-test
      spec:
        serviceAccountName: ""
        taskSpec:
          results:
          - name: IMAGE_URL
            type: string
          - name: IMAGE_DIGEST
            type: string
          steps:
          - name: create-image
            image: <registry>/ops/busybox:latest
            script: |-
              #!/bin/sh
              echo 'gcr.io/foo/bar' | tee $(results.IMAGE_URL.path)
              echo 'sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5' | tee $(results.IMAGE_DIGEST.path)
      EOF
      TIP

      Замените image <registry>/ops/busybox:latest на фактический image, который вы хотите использовать.

    2. Дождитесь завершения TaskRun:

      $ kubectl get taskruns.tekton.dev -n $NAMESPACE -w
      
      NAME                               SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
      build-push-run-output-image-test   True        Succeeded   42s         33s

      Дождитесь, пока в статусе не отобразится Succeeded.

    Шаг 4: Проверка подписи

    После завершения TaskRun Tekton Chains автоматически подпишет его. Давайте проверим подпись.

    1. Получите UID TaskRun:

      export TASKRUN_UID=$(kubectl get taskruns.tekton.dev -n $NAMESPACE build-push-run-output-image-test -o jsonpath='{.metadata.uid}')
    2. Извлеките подпись:

      kubectl get taskruns.tekton.dev -n $NAMESPACE -o jsonpath="{.items[0].metadata.annotations.chains\.tekton\.dev/signature-taskrun-$TASKRUN_UID}" | base64 -d > sig
    3. Извлеките payload с помощью jq:

      cat sig | jq '.payload | @base64d' | jq -r '.' | jq '.'
    Payload подписи
    {
      "_type": "https://in-toto.io/Statement/v0.1",
      "subject": [
        {
          "name": "gcr.io/foo/bar",
          "digest": {
            "sha256": "05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5"
          }
        }
      ],
      "predicateType": "https://slsa.dev/provenance/v0.2",
      "predicate": {
        "buildConfig": {
          "steps": [
            {
              "annotations": null,
              "arguments": null,
              "entryPoint": "#!/bin/sh\necho 'gcr.io/foo/bar' | tee /tekton/results/IMAGE_URL\necho 'sha256:05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5' | tee /tekton/results/IMAGE_DIGEST",
              "environment": {
                "container": "create-image",
                "image": "oci://<registry>/ops/busybox@sha256:ce57c394018ade463dede7cbc721c41d7bc6bc858c62d810681ff41d00d8e942"
              }
            }
          ]
        },
        "buildType": "tekton.dev/v1beta1/TaskRun",
        "builder": {
          "id": "https://tekton.dev/chains/v2"
        },
        "invocation": {
          "configSource": {},
          "environment": {
            "annotations": {
              "cpaas.io/creator": "kubernetes-admin",
              "cpaas.io/updated-at": "2025-06-15T15:18:32Z",
              "pipeline.tekton.dev/release": "002f74eea37b0f5dbcfed39c13d7cd762c8fcdc4"
            },
            "labels": {
              "app.kubernetes.io/managed-by": "tekton-pipelines"
            }
          },
          "parameters": {}
        },
        "materials": [
          {
            "digest": {
              "sha256": "ce57c394018ade463dede7cbc721c41d7bc6bc858c62d810681ff41d00d8e942"
            },
            "uri": "oci://<registry>/ops/busybox"
          }
        ],
        "metadata": {
          "buildFinishedOn": "2025-06-15T15:18:41Z",
          "buildStartedOn": "2025-06-15T15:18:32Z",
          "completeness": {
            "environment": false,
            "materials": false,
            "parameters": false
          },
          "reproducible": false
        }
      }
    }
    1. Проверьте подпись с помощью cosign:

      $ cosign verify-blob-attestation --insecure-ignore-tlog --key k8s://tekton-pipelines/signing-secrets --signature sig --type slsaprovenance --check-claims=false /dev/null
      
      WARNING: Skipping tlog verification is an insecure practice that lacks transparency and auditability verification for the blob attestation.
      Verified OK

      Если проверка успешна, вы увидите Verified OK.

    Ожидаемые результаты

    После выполнения этого руководства:

    • У вас будет рабочая конфигурация Tekton Chains с ключом подписи
    • Ваши TaskRun будут автоматически подписываться после завершения
    • Вы сможете проверять подписи, чтобы убедиться в целостности ваших сборок

    Это демонстрирует базовую функциональность Tekton Chains. В реальном сценарии вы бы:

    1. Настроили Chains на подпись container images и сохранение подписей в вашем registry
    2. Добавили этап проверки в процесс deployment
    3. При необходимости использовали cloud KMS для более безопасного управления ключами

    Ссылки