Подписанное происхождение
Это руководство помогает новым пользователям быстро настроить Tekton Chains для защиты CI/CD-пайплайнов путем генерации и проверки SLSA Provenance для Tekton PipelineRuns.
Содержание
ВведениеСценарии использованияОценка времени чтенияВажные примечанияПредварительные требованияОбзор процессаПошаговые инструкцииШаг 1: Сгенерировать ключи подписиШаг 2: Настроить аутентификациюШаг 3: Настроить Tekton ChainsШаг 4: Создать пример пайплайнаШаг 5: Запустить пример пайплайнаШаг 6: Дождаться подписи PipelineRunШаг 7: Получить image из PipelineRunШаг 8: Проверить image и attestationОжидаемые результатыСсылкиВведение
Сценарии использования
Tekton Chains помогает защитить цепочку поставки ПО, автоматически генерируя SLSA Provenance для ваших артефактов сборки. В этом руководстве показано, как настроить Tekton Chains, сгенерировать ключ подписи, запустить пример пайплайна и проверить его SLSA Provenance.
Оценка времени чтения
15-20 минут
Важные примечания
- Tekton Chains по умолчанию устанавливается в namespace
tekton-pipelinesпри использовании Alauda Devops Pipelines Operator - Ключи подписи следует хранить и управлять ими безопасно; в production-средах рассмотрите возможность использования системы управления ключами (KMS)
- В этом руководстве используется упрощенный workflow: Containerfile генерируется непосредственно внутри пайплайна
- В production-средах следует использовать корректное управление исходным кодом и version control
Предварительные требования
- Kubernetes-кластер с установленными Tekton Pipelines и Tekton Chains
- Registry с включенной возможностью push image
- Установленный и настроенный CLI
kubectlдля доступа к вашему кластеру - Установленный CLI-инструмент
cosign - Установленный CLI-инструмент
jq
Обзор процесса
Пошаговые инструкции
Шаг 1: Сгенерировать ключи подписи
Подробнее см. в разделе Signing Key Configuration
Tekton Chains использует криптографические ключи для подписи артефактов. По умолчанию он ищет secret с именем signing-secrets в namespace Chains.
-
Установите cosign, если вы еще этого не сделали
-
Сгенерируйте пару ключей и сохраните ее как Kubernetes secret:
TIPЭтот пароль будет сохранен в Kubernetes secret с именем
signing-secretsв namespacetekton-pipelines. -
Убедитесь, что secret был создан:
Шаг 2: Настроить аутентификацию
Подробнее см. в разделе Authentication for Chains
Настройте учетные данные registry для push image:
-
Создайте secret с учетными данными:
-
Установите ключ
config.json: -
Примените patch к service account, чтобы он использовал secret:
Шаг 3: Настроить Tekton Chains
Подробнее см. в разделе Chains Configuration
Настройте Tekton Chains на хранение артефактов в формате OCI:
Шаг 4: Создать пример пайплайна
Это ресурс Pipeline, который используется для сборки image и генерации attestation SLSA Provenance.
В production-средах следует:
- Использовать task
git-cloneдля получения исходного кода из вашего repository - Собирать image с использованием Containerfile, который уже находится в вашем исходном коде
- Такой подход обеспечивает корректный version control и сохраняет разделение между code и конфигурацией пайплайна
Пояснение полей YAML
params: Параметры пайплайна.generate-containerfile: Скрипт для генерации Containerfile для сборки image.image: Целевой адрес собираемого image.
tasks: Задачи пайплайна.generate-containerfile: Задача для генерации Containerfile для сборки image.build-image: Задача для сборки и push image в registry.params.TLS_VERIFY: Нужно ли проверять TLS certificate registry.
results: Результаты пайплайна.first_image_ARTIFACT_OUTPUTS: Результат первого выходного артефакта image.digest: Digest image.uri: URI image.
- Этот формат совместим с Tekton Chains; см. Tekton Chains Type Hinting в разделе выше для получения дополнительных сведений.
workspaces: Workspaces для пайплайна.source: Workspace для исходного кода.registryconfig: Workspace для конфигурации registry распространения.
Необходимо изменить конфигурацию
params:generate-containerfiledefault: Укажите корректный from image address.
image:default: Целевой адрес собираемого image.
Сохраните это в yaml-файл с именем chains.demo-1.pipeline.yaml и примените его с помощью:
Шаг 5: Запустить пример пайплайна
Это ресурс PipelineRun, который используется для запуска пайплайна.
Пояснение полей YAML
pipelineRef: Пайплайн, который нужно запустить.name: Имя пайплайна.
taskRunTemplate: Шаблон task run.serviceAccountName: service account, который будет использоваться для пайплайна.
workspaces: Workspaces для пайплайна.registryconfig: Workspace для конфигурации registry распространения.source: Workspace для исходного кода.
Необходимо изменить конфигурацию
taskRunTemplate:serviceAccountName: service account, подготовленный на предыдущем шаге ServiceAccount Configuration.
workspaces:registryconfig:secret.secretName: Secret registry, подготовленный на предыдущем шаге Creating Registry Credentials.
source:volumeClaimTemplate.spec.storageClassName: Имя storage class для шаблона volume claim.
Сохраните это в yaml-файл с именем chains.demo-1.pipelinerun.yaml и примените его с помощью:
Дождитесь завершения PipelineRun.
Шаг 6: Дождаться подписи PipelineRun
Дождитесь, пока у PipelineRun не появится аннотация chains.tekton.dev/signed: "true".
Когда у PipelineRun появляется аннотация chains.tekton.dev/signed: "true", это означает, что image подписан.
Шаг 7: Получить image из PipelineRun
Этот image будет использоваться для проверки подписи.
Шаг 8: Проверить image и attestation
-
Получите публичный ключ подписи
Если у вас нет разрешения, вы можете попросить администратора получить публичный ключ.
-
Проверьте подпись
Если проверка прошла успешно, вы увидите следующий вывод:
-
Проверьте attestation SLSA provenance
Если проверка прошла успешно, вы увидите следующий вывод:
-
Извлеките payload с помощью jq:
Payload attestation
Ожидаемые результаты
После завершения этого руководства:
- У вас будет рабочая настройка Tekton Chains с ключом подписи
- Ваши PipelineRuns будут автоматически подписываться после завершения, а image будет иметь attestation SLSA Provenance
- Вы сможете проверять подписи и attestations, чтобы убедиться в целостности ваших сборок
Это руководство дает основу для внедрения безопасности цепочки поставки в ваши CI/CD-пайплайны. В production-среде следует:
- Использовать корректное управление исходным кодом и version control
- Реализовать безопасное управление ключами с помощью cloud KMS
- Настроить автоматическую проверку в процессе deployment
- Настроить корректные механизмы контроля доступа и политики безопасности
- Регулярно выполнять ротацию ключей подписи и обновлять конфигурации безопасности