• Русский
  • Конфигурация 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 изменяется, либо по какой-то другой причине запускается reconciliation, конфигурация в ConfigMap chains-config будет перезаписана.

    TIP

    Однако некоторые расширенные параметры конфигурации поддерживаются только в ConfigMap chains-config и не могут быть настроены в TektonConfig из-за validating 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: Нужно ли генерировать signing secret.
        • Эта конфигурация уникальна для 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 token для контроллера 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

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

    Пояснение

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

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

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

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

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

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

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

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

    KeyDescriptionSupported ValuesDefault
    storage.oci.repositoryOCI repo для хранения OCI signatures и attestationЕсли значение не задано, и один из вариантов artifacts.{oci,taskrun}.storage включает хранилище oci, аттестации будут храниться вместе с самим OCI artifact. (пример на GCP) Если задать это значение, OCI bundle будет храниться в указанном месте вместо хранения вместе с image. Дополнительную информацию см. в документации cosign.
    storage.oci.repository.insecureНужно ли использовать небезопасное соединение при подключении к OCI repositorytrue, falsefalse

    Пояснение

    • Если в вашем OCI repository используется self-signed certificate, необходимо установить storage.oci.repository.insecure в true, чтобы разрешить небезопасное соединение.

    Конфигурация возможностей Sigstore

    Журнал прозрачности

    KeyDescriptionSupported ValuesDefault
    transparency.enabledВключать ли прозрачность."true", "false""false"
    transparency.urlURL журнала прозрачности."https://rekor.sigstore.dev"

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

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

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

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

    Ссылки