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

    Обзор

    Tekton Chains — это контроллер Kubernetes Custom Resource Definition (CRD), который позволяет управлять безопасностью цепочки поставок в 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.
        • Более подробную поддержку можно найти в 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Формат, в котором сохраняются полезные данные 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 artifact. Дополнительные сведения см. в cosign documentation.
    • Если хранилище tekton, аттестации будут сохраняться в аннотациях TaskRun Tekton.

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

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

    KeyDescriptionSupported ValuesDefault
    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 artifact. Дополнительные сведения см. в cosign documentation.
    • Если хранилище tekton, аттестации будут сохраняться в аннотациях PipelineRun Tekton.

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

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

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

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

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

    Пояснение

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

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

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

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

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

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

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

    KeyDescriptionSupported ValuesDefault
    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"

    Ссылки