Проверка происхождения системы сборки
В SLSA provenance есть поле builder.id, которое используется для указания среды сборки образа.
В этом документе мы будем использовать это поле builder.id для проверки образа.
Поскольку Tekton Chains уже выполнил и подпись образа, и генерацию SLSA provenance на подготовительном этапе, мы можем напрямую повторно использовать процесс и образы из Быстрый старт: Signed Provenance.
В этом документе мы сосредоточимся на проверке SLSA provenance.
Содержание
Обзор возможностейСценарии использованияПредварительные требованияОбзор процессаПошаговые инструкцииШаги 1-7: (Необязательно) Базовая настройкаШаг 8: (Необязательно) Проверка информации о builder с помощью cosignСпособ 1: Использование CUE для проверкиСпособ 2: Использование Rego для проверкиШаг 9: Проверка подписи с помощью KyvernoШаг 9.1: Создайте политику Kyverno, чтобы разрешить развертывание только образов, собранных в определенных средах сборкиШаг 9.2: Проверка политикиШаг 10: Очистка ресурсовОжидаемые результатыСсылкиОбзор возможностей
Этот метод использует Chains для автоматической генерации SLSA Provenance для собранного образа, а затем Kyverno для проверки provenance:
- Настройте Tekton Chains для автоматической генерации SLSA Provenance для собранного образа.
- Используйте Tekton Task
buildahдля сборки образа. - (Необязательно) Используйте
cosigncli для проверки attestation. - Настройте правила Kyverno для проверки attestation.
- Используйте образ для создания Pod, чтобы проверить attestation.
Сценарии использования
Следующие сценарии требуют обращения к рекомендациям из этого документа:
- Проверка среды сборки container image с использованием SLSA provenance
- Реализация проверки происхождения системы сборки с помощью политик CUE или Rego
- Принудительное применение политик безопасности, разрешающих только образы, собранные в определенных средах сборки
- Настройка автоматической проверки происхождения системы сборки в CI/CD pipelines
- Обеспечение целостности и подлинности происхождения системы сборки в production-средах
Предварительные требования
- Kubernetes cluster с установленными Tekton Pipelines, Tekton Chains и Kyverno
- Registry с включенной возможностью push образов
- Установленный и настроенный для доступа к вашему cluster
kubectlCLI - Установленный инструмент
cosignCLI - Установленный инструмент
jqCLI
Обзор процесса
Пошаговые инструкции
Шаги 1-7: (Необязательно) Базовая настройка
Если вы измените поле builder.id, вам нужно повторно запустить pipeline, чтобы сгенерировать образ.
Поскольку старый образ не подписан новым builder.id, политика его заблокирует.
В противном случае вы можете пропустить этот шаг и использовать старый образ для проверки политики.
Эти шаги полностью совпадают с руководством Быстрый старт: Signed Provenance. Пожалуйста, следуйте инструкциям в этом руководстве для:
-
Шаг 3: Настройка Tekton Chains
Если вы хотите изменить значение
builder.idпо умолчанию, вы можете настроить полеbuilder.idвconfigобъектаTektonConfig.TIPДля выполнения этого процесса требуются права platform administrator.
Шаг 8: (Необязательно) Проверка информации о builder с помощью cosign
Этот шаг необязателен и должен выполняться, когда вам нужно проверить подлинность builder образа с помощью cosign.
Если вам интересно, как использовать CUE или Rego для проверки информации о builder, вы можете продолжить чтение следующего содержимого.
Получите публичный ключ подписи согласно разделу Получение публичного ключа подписи.
Cosign предоставляет два способа проверки attestation:
Ниже показаны методы проверки для этих двух способов.
Способ 1: Использование CUE для проверки
Сгенерируйте CUE-файл для проверки информации о builder.
Сохраните CUE-файл как builder.cue
Проверьте информацию о builder с помощью cosign.
Если вы получите такой вывод, значит проверка информации о builder прошла успешно.
Измените builder id в файле builder.cue на другое значение https://alauda.io/builders/tekton/v2 и повторите проверку.
Если вы получите такой вывод, значит проверка информации о builder не прошла.
Способ 2: Использование Rego для проверки
Сгенерируйте Rego-файл для проверки информации о builder.
Сохраните Rego-файл как builder.rego
Проверьте информацию о builder с помощью cosign.
Если вы получите такой вывод, значит проверка информации о builder прошла успешно.
Измените builder id в файле builder.rego на другое значение https://alauda.io/builders/tekton/v2 и повторите проверку.
Если вы получите такой вывод, значит проверка информации о builder не прошла.
Шаг 9: Проверка подписи с помощью Kyverno
Для этого шага требуются права cluster administrator.
Содержимое provenance примерно следующее; мы будем использовать поле builder.id для проверки среды сборки.
Шаг 9.1: Создайте политику Kyverno, чтобы разрешить развертывание только образов, собранных в определенных средах сборки
Подробнее о Kyverno ClusterPolicy см. в Kyverno ClusterPolicy
Политика выглядит следующим образом:
Пояснение полей YAML
- Политика в целом соответствует политике из Проверка подписи образа. Ниже описаны только различия.
spec.rules[0].verifyImages[].attestations[0].conditionstype: тип slsa provenance — этоhttps://slsa.dev/provenance/v0.2илиhttps://slsa.dev/provenance/v1.attestors: как и выше.conditions: условия, которые нужно проверить.all: должны быть выполнены все условия.key: "{{ builder.id }}": эта проверка убеждается, что полеbuilder.idв attestation равноhttps://alauda.io/builders/tekton/v1
Нужно скорректировать конфигурацию
spec.rules[].attestors[].entries[].keys.publicKeys: публичный ключ signer.- Этот публичный ключ совпадает с публичным ключом
cosign.pubв secretsigning-secrets. - Публичный ключ можно получить в разделе Получение публичного ключа подписи.
- Этот публичный ключ совпадает с публичным ключом
Сохраните политику в yaml-файл с именем kyverno.verify-tekton-built-images.yaml и примените ее:
Шаг 9.2: Проверка политики
В namespace policy, где определена политика, создайте Pod для проверки политики.
Используйте собранный образ для создания Pod.
Pod будет создан успешно.
Измените builder id в ClusterPolicy на другое значение https://alauda.io/builders/tekton/v2 и повторите проверку.
Если вы получите такой вывод, значит Pod был заблокирован политикой.
Шаг 10: Очистка ресурсов
Удалите Pods, созданные на предыдущих шагах.
Удалите политику.
Ожидаемые результаты
После завершения этого руководства:
- У вас будет рабочая конфигурация Tekton Chains для генерации SLSA provenance
- Ваши container images будут автоматически подписываться provenance системы сборки в процессе сборки
- Вы сможете проверять среду сборки образов с помощью политик CUE или Rego
- В указанном namespace можно будет развертывать только образы, собранные в заданной среде сборки
- Образы, собранные в неавторизованных средах сборки, будут автоматически блокироваться политиками Kyverno
- Вы реализуете базовый механизм контроля проверки происхождения системы сборки для ваших container images
Это руководство служит основой для реализации проверки происхождения системы сборки в ваших CI/CD pipelines. В production-среде вам следует:
- Настроить корректную изоляцию namespace и контроль доступа
- Реализовать безопасное управление ключами для ключей подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно ротировать ключи подписи и обновлять политики безопасности
- Рассмотреть возможность внедрения дополнительных механизмов безопасности, таких как сканирование уязвимостей