• Русский
  • Конфигурация Chains

    Overview

    Tekton Chains — это контроллер Kubernetes Custom Resource Definition (CRD), который позволяет управлять безопасностью вашей цепочки поставок в Tekton. В этом документе описывается, как настроить Tekton Chains.

    Configuration

    Конфигурация Chains хранится в ConfigMap с именем chains-config в пространстве имён tekton-pipelines или tekton-chains. Вы можете изменить этот ConfigMap, чтобы изменить поведение Chains.

    По умолчанию Tekton Chains разворачивается автоматически через ресурс TektonConfig. Вы можете изменить ресурс TektonConfig для настройки Chains.

    По сути, Tekton Operator синхронизирует конфигурацию Chains из ресурса TektonConfig в ресурс TektonChains, а затем отражает её в ConfigMap chains-config.

    WARNING

    Если вы разворачиваете Chains через TektonConfig, вы должны настраивать Chains через TektonConfig.

    Если вы измените конфигурацию только в ConfigMap chains-config, и она не будет синхронизирована с ресурсом TektonChains, конфигурация может быть потеряна.

    Когда конфигурация в TektonConfig изменяется или по другой причине происходит реконсиляция, конфигурация в ConfigMap chains-config будет перезаписана.

    TIP

    Однако некоторые расширенные настройки поддерживаются только в ConfigMap chains-config и не могут быть настроены в TektonConfig из-за webhook валидации.

    Если вы столкнулись с этой проблемой, необходимо отключить автоматическое развертывание Chains через TektonConfig и вручную создать ресурс TektonHub.

    Ниже приведена простая демонстрация различных способов настройки Chains.

    Конфигурация в ConfigMap chains-config

    Ниже пример ConfigMap chains-config:

    apiVersion: v1
    data:
      artifacts.oci.format: simplesigning
      artifacts.oci.storage: oci
      artifacts.pipelinerun.format: in-toto
      artifacts.pipelinerun.storage: oci
      artifacts.taskrun.format: in-toto
      artifacts.taskrun.storage: oci
      transparency.enabled: "false"
    kind: ConfigMap
    metadata:
      name: chains-config

    Советы: Булевы значения представлены строками, например "true" или "false".

    Объяснение полей YAML:

    • artifacts.oci.format: Формат аттестаций.
    • artifacts.oci.storage: Хранилище для аттестаций.
    • artifacts.pipelinerun.format: Формат аттестаций для PipelineRuns.
    • artifacts.pipelinerun.storage: Хранилище аттестаций для PipelineRuns.
    • artifacts.taskrun.format: Формат аттестаций для TaskRuns.
    • artifacts.taskrun.storage: Хранилище аттестаций для TaskRuns.

    Конфигурация в TektonConfig

    В ресурсе TektonConfig конфигурация Chains примерно следующая:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      chain:
        disabled: false
        generateSigningSecret: false
        controllerEnvs:
          - name: SIGSTORE_ID_TOKEN
            value: "<your-id-token>"
    
        artifacts.oci.format: simplesigning
        artifacts.oci.storage: oci
        artifacts.pipelinerun.format: in-toto
        artifacts.pipelinerun.storage: oci
        artifacts.taskrun.format: in-toto
        artifacts.taskrun.storage: oci
    
        signers.x509.fulcio.enabled: <false>
        signers.x509.fulcio.address: <ttps://fulcio.sigstore.dev>
        signers.x509.fulcio.issuer: <https://oauth2.sigstore.dev/auth>
        transparency.enabled: <false>
        transparency.url: <https://rekor.sigstore.dev>
    
        storage.oci.repository.insecure: true
    
        options:
          deployments:
            tekton-chains-controller:
              spec:
                template:
                  spec:
                    containers:
                    - name: tekton-chains-controller
                      env:
                        - name: SIGSTORE_ID_TOKEN
                          value: "<your-id-token>"
                      resources: {}

    Советы: Булевы значения имеют исходный тип, например true или false.

    Объяснение полей YAML:

    • spec.chain: Этот раздел содержит конфигурацию Chains.
      • disabled: Отключить Chains или нет.
        • Эта настройка уникальна для TektonConfig и отсутствует в TektonChains.
      • generateSigningSecret: Генерировать секрет для подписи или нет.
        • Эта настройка уникальна для TektonConfig и отсутствует в TektonChains.
      • controllerEnvs: Переменные окружения для контроллера Tekton Chains.
        • Эта настройка уникальна для TektonConfig и отсутствует в TektonChains.
        • name: Имя переменной окружения.
        • value: Значение переменной окружения.
      • options: Опции для контроллера Tekton Chains.
        • Эта настройка уникальна для TektonConfig и отсутствует в TektonChains.
        • deployments.tekton-chains-controller: Опции развертывания контроллера Tekton Chains.
          • spec.template.spec.containers.env.SIGSTORE_ID_TOKEN: ID токен для контроллера Tekton Chains.
        • Более подробная поддержка описана в Additional fields as options
      • Следующие настройки также существуют в TektonChains и в конечном итоге синхронизируются в ConfigMap chains-config.
        • artifacts.oci.format
        • artifacts.oci.storage
        • artifacts.pipelinerun.format
        • artifacts.pipelinerun.storage
        • artifacts.taskrun.format
        • artifacts.taskrun.storage
        • storage.oci.repository.insecure
        • signers.x509.fulcio.address
        • signers.x509.fulcio.issuer
        • transparency.enabled
        • transparency.url

    Конфигурация TaskRun

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    artifacts.taskrun.formatФормат для хранения полезной нагрузки TaskRun.in-toto, slsa/v1, slsa/v2alpha3, slsa/v2alpha4in-toto
    artifacts.taskrun.storageХранилище для хранения подписей TaskRun. Можно указать несколько хранилищ через запятую ("tekton,oci"). Чтобы отключить артефакт TaskRun, укажите пустую строку ("").tekton, oci, gcs, docdb, grafeas, archivistatekton
    artifacts.taskrun.signerБэкенд подписи для подписания полезной нагрузки TaskRun.x509, kmsx509

    Объяснение

    • slsa/v1 является псевдонимом in-toto для обратной совместимости.
    • Если хранилище — oci, аттестации будут храниться рядом с самим OCI артефактом. Дополнительную информацию смотрите в документации cosign.
    • Если хранилище — tekton, аттестации будут храниться в аннотациях Tekton TaskRun.

    Конфигурация PipelineRun

    Аналогично TaskRuns, вы можете настроить подпись и хранение PipelineRun.

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    artifacts.pipelinerun.formatФормат для хранения полезной нагрузки PipelineRun.in-toto, slsa/v1, slsa/v2alpha3, slsa/v2alpha4in-toto
    artifacts.pipelinerun.storageХранилище для хранения подписей PipelineRun. Можно указать несколько хранилищ через запятую ("tekton,oci"). Чтобы отключить артефакт PipelineRun, укажите пустую строку ("").tekton, oci, gcs, docdb, grafeas, archivistatekton
    artifacts.pipelinerun.signerБэкенд подписи для подписания полезной нагрузки PipelineRun.x509, kmsx509
    artifacts.pipelinerun.enable-deep-inspectionЭтот булев параметр настраивает, должен ли Chains инспектировать дочерние taskruns для захвата входных и выходных данных внутри PipelineRun. Значение "false" означает, что Chains проверяет только результаты на уровне pipeline, а "true" — инспектирует и pipeline, и task."true", "false""false"
    • Если хранилище — oci, аттестации будут храниться рядом с самим OCI артефактом. Дополнительную информацию смотрите в документации cosign.
    • Если хранилище — tekton, аттестации будут храниться в аннотациях Tekton PipelineRun.

    Конфигурация OCI

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    artifacts.oci.formatФормат для хранения полезной нагрузки OCI.simplesigningsimplesigning
    artifacts.oci.storageХранилище для хранения подписей OCI. Можно указать несколько хранилищ через запятую ("oci,tekton"). Чтобы отключить артефакт OCI, укажите пустую строку ("").tekton, ocioci
    artifacts.oci.signerБэкенд подписи для подписания полезной нагрузки OCI.x509, kmsx509
    • Если хранилище — oci, аттестации будут храниться рядом с самим OCI артефактом. Дополнительную информацию смотрите в документации cosign.
    • Если хранилище — tekton, аттестации будут храниться в аннотациях Tekton TaskRun или PipelineRun.

    Конфигурация хранилища

    Chains поддерживает несколько бэкендов хранения для аттестаций и подписей. Некоторые из наиболее распространённых перечислены ниже, для более подробной настройки смотрите Storage Configuration

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    storage.oci.repositoryOCI репозиторий для хранения подписей и аттестаций OCIЕсли не задано и одно из значений artifacts.{oci,taskrun}.storage включает oci, аттестации будут храниться рядом с самим OCI артефактом. (пример для GCP) Определение этого значения приводит к хранению OCI бандла в указанном месте вместо хранения рядом с образом. Подробнее в документации cosign.
    storage.oci.repository.insecureИспользовать небезопасное соединение при подключении к OCI репозиториюtrue, falsefalse

    Объяснение

    • Если ваш OCI репозиторий использует самоподписанный сертификат, необходимо установить storage.oci.repository.insecure в true, чтобы разрешить небезопасное соединение.

    Конфигурация функций Sigstore

    Transparency Log

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    transparency.enabledВключить прозрачность или нет"true", "false""false"
    transparency.urlURL журнала прозрачности"https://rekor.sigstore.dev"

    Примечание: Если transparency.enabled установлен в manual, то в журнал прозрачности будут загружаться только TaskRuns и PipelineRuns с следующей аннотацией:

    chains.tekton.dev/transparency-upload: "true"

    Подпись без ключей с Fulcio

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    signers.x509.fulcio.enabledВключить автоматические сертификаты от fulcio или нет"true", "false""false"
    signers.x509.fulcio.addressАдрес Fulcio для запроса сертификата, если включено"https://fulcio.sigstore.dev"
    signers.x509.fulcio.issuerОжидаемый OIDC issuer"https://oauth2.sigstore.dev/auth"
    signers.x509.fulcio.providerПровайдер для запроса ID Token"google", "spiffe", "github", "filesystem"Не установлен, будет попытка для каждого провайдера.
    signers.x509.identity.token.fileПуть к файлу с ID Token
    signers.x509.tuf.mirror.urlURL сервера TUF. Ожидается наличие $TUF_URL/root.json"https://sigstore-tuf-root.storage.googleapis.com"

    References