• Русский
  • Конфигурация 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: Формат attestations.
    • artifacts.oci.storage: Бэкенд хранения для attestations.
    • artifacts.pipelinerun.format: Формат attestations для PipelineRuns.
    • artifacts.pipelinerun.storage: Бэкенд хранения для attestations для PipelineRuns.
    • artifacts.taskrun.format: Формат attestations для TaskRuns.
    • artifacts.taskrun.storage: Бэкенд хранения для attestations для 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: Нужно ли генерировать 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

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    artifacts.taskrun.formatФормат, в котором хранятся payload 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Бэкенд подписи, который используется для подписи payload TaskRun.x509, kmsx509

    Пояснение

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

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

    Как и для TaskRun, вы можете настроить подпись и storage для PipelineRun.

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    artifacts.pipelinerun.formatФормат, в котором хранятся payload 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Бэкенд подписи, который используется для подписи payload PipelineRun.x509, kmsx509
    artifacts.pipelinerun.enable-deep-inspectionЭтот логический параметр определяет, должен ли Chains проверять дочерние taskruns, чтобы собрать входные и выходные данные внутри pipelinerun. Значение "false" означает, что Chains проверяет только результаты на уровне pipeline, а значение "true" означает, что Chains проверяет результаты как на уровне pipeline, так и на уровне task."true", "false""false"
    • Если storage — oci, attestations будут храниться вместе с самим сохраненным OCI-артефактом. Дополнительную информацию см. в документации cosign.
    • Если storage — tekton, attestations будут храниться в аннотациях Tekton PipelineRun.

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

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

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

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

    КлючОписаниеПоддерживаемые значенияПо умолчанию
    storage.oci.repositoryOCI repo для хранения OCI signatures и attestationsЕсли не задано и один из artifacts.{oci,taskrun}.storage включает oci storage, attestations будут храниться вместе с самим сохраненным OCI-артефактом. (пример в GCP) Указание этого значения приводит к тому, что OCI bundle хранится в заданном расположении вместо совместного хранения с образом. Дополнительную информацию см. в документации cosign.
    storage.oci.repository.insecureНужно ли использовать insecure connection при подключении к OCI repositorytrue, falsefalse

    Пояснение

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

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

    Transparency Log

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

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

    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 server. Ожидается наличие $TUF_URL/root.json."https://sigstore-tuf-root.storage.googleapis.com"

    Ссылки