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

    Обзор

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

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

    Конфигурация Chains хранится в ConfigMap с именем chains-config в namespace 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
    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: Нужно ли генерировать 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.
        • Более подробную поддержку можно найти в Дополнительные поля в качестве опций
      • Следующие конфигурации также существуют в 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" означает, что 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.oci.repositoryOCI-репозиторий для хранения подписей OCI и аттестацийЕсли не задано явно и в одном из artifacts.\{oci,taskrun}.storage указано хранилище oci, аттестации будут сохраняться рядом с самим OCI-артефактом. (пример на GCP) Если задать это значение, OCI bundle будет храниться в указанном месте, а не рядом с image. Дополнительную информацию см. в документации cosign.
    storage.oci.repository.insecureИспользовать ли небезопасное подключение при соединении с OCI-репозиториемtrue, falsefalse

    Пояснение

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

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

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

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    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"

    Ссылки