Проверка происхождения системы сборки
В SLSA provenance есть поле builder.id, которое используется для указания среды сборки образа.
В этом документе мы будем использовать поле builder.id для проверки образа.
Поскольку Tekton Chains уже обрабатывает как подписание образов, так и генерацию SLSA provenance на этапе подготовки, мы можем напрямую повторно использовать процесс и образы из Quick Start: 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 для проверки происхождения:
- Настроить Tekton Chains для автоматической генерации SLSA Provenance для собранного образа.
- Использовать задачу
buildahTekton Task для сборки образа. - (Опционально) Использовать CLI
cosignдля проверки аттестации. - Настроить правила Kyverno для проверки аттестации.
- Использовать образ для создания Pod и проверки аттестации.
Сценарии использования
Следующие сценарии требуют обращения к рекомендациям из этого документа:
- Проверка среды сборки контейнерных образов с использованием SLSA provenance
- Реализация проверки происхождения системы сборки с помощью политик CUE или Rego
- Применение политик безопасности, разрешающих только образы, собранные в определённых средах сборки
- Настройка автоматической проверки происхождения системы сборки в CI/CD пайплайнах
- Обеспечение целостности и подлинности происхождения системы сборки в продуктивных средах
Предварительные требования
- Kubernetes кластер с установленными Tekton Pipelines, Tekton Chains и Kyverno
- Реестр с разрешением на пуш образов
- Установленный и настроенный CLI
kubectlдля доступа к кластеру - Установленный CLI инструмент
cosign - Установленный CLI инструмент
jq
Обзор процесса
Пошаговые инструкции
Шаги 1-7: (Опционально) Базовая настройка
Если вы измените поле builder.id, необходимо повторно запустить пайплайн для генерации образа.
Потому что старый образ не подписан новым builder.id, и политика его заблокирует.
В противном случае можно пропустить этот шаг и использовать старый образ для проверки политики.
Эти шаги идентичны руководству Quick Start: Signed Provenance. Пожалуйста, следуйте инструкциям в этом руководстве для:
-
Шаг 3: Настройка Tekton Chains
Если вы хотите изменить значение по умолчанию
builder.id, можно отредактировать полеbuilder.idвconfigобъектаTektonConfig.TIPДля выполнения этой операции требуются права администратора платформы.
Шаг 8: (Опционально) Проверка информации о builder с помощью cosign
Этот шаг опционален и выполняется, если необходимо проверить подлинность сборщика образа с помощью cosign.
Если вас интересует, как использовать CUE или Rego для проверки информации о builder, продолжайте читать далее.
Получите публичный ключ подписи согласно разделу Получение публичного ключа подписи.
Cosign предоставляет два способа валидации аттестации:
Ниже показаны методы проверки для обоих способов.
Способ 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
Для выполнения этого шага требуются права администратора кластера.
Содержимое provenance примерно следующее, мы будем использовать поле builder.id для проверки среды сборки.
Шаг 9.1: Создайте политику Kyverno, разрешающую развертывание только образов, собранных в определённых средах сборки
Подробнее о Kyverno ClusterPolicy смотрите в Kyverno ClusterPolicy
Политика выглядит следующим образом:
Объяснение полей YAML
- Политика в основном совпадает с той, что в Image Signature Verification. Здесь описаны только отличия.
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в аттестации равноhttps://alauda.io/builders/tekton/v1
Необходимо отредактировать конфигурацию
spec.rules[].attestors[].entries[].keys.publicKeys: публичный ключ подписанта.- Этот публичный ключ совпадает с публичным ключом
cosign.pubв секретеsigning-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: Очистка ресурсов
Удалите Pod, созданные на предыдущих шагах.
Удалите политику.
Ожидаемые результаты
После выполнения этого руководства:
- У вас настроен рабочий процесс с Tekton Chains для генерации SLSA provenance
- Ваши контейнерные образы автоматически подписываются с происхождением системы сборки во время сборки
- Вы можете проверять среду сборки образов с помощью политик CUE или Rego
- В указанном namespace разрешено развертывание только образов, собранных в определённой среде сборки
- Образы, собранные в неавторизованных средах сборки, автоматически блокируются политиками Kyverno
- Вы реализовали базовый контроль проверки происхождения системы сборки для ваших контейнерных образов
Это руководство предоставляет основу для реализации проверки происхождения системы сборки в ваших CI/CD пайплайнах. В продуктивной среде рекомендуется:
- Настроить правильную изоляцию namespace и контроль доступа
- Реализовать безопасное управление ключами для ключей подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно менять ключи подписи и обновлять политики безопасности
- Рассмотреть внедрение дополнительных мер безопасности, таких как сканирование уязвимостей