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

    Обзор

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

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

    Конфигурация 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
    TIP

    Булевы значения представлены строками, например "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: {}
    TIP

    Булевы значения имеют исходный тип, например 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

    Аналогично TaskRun, можно настроить подпись и хранение 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" — что Chains проверяет и 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Включить прозрачность (transparency)."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"

    Ссылки