Проверка происхождения системы сборки
В 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 — для проверки provenance:
- Настройте Tekton Chains на автоматическую генерацию SLSA Provenance для собранного образа.
- Используйте Tekton Task
buildahдля сборки образа. - (Необязательно) Используйте
cosignCLI для проверки attestation. - Настройте правила Kyverno для проверки attestation.
- Используйте образ для создания Pod, чтобы проверить attestation.
Сценарии использования
Следующие сценарии требуют обращения к рекомендациям в этом документе:
- Проверка среды сборки контейнерных образов с использованием SLSA provenance
- Реализация проверки происхождения системы сборки с использованием политик CUE или Rego
- Применение политик безопасности, разрешающих только образы, собранные в определённых средах сборки
- Настройка автоматической проверки происхождения системы сборки в CI/CD pipeline
- Обеспечение целостности и подлинности происхождения системы сборки в production-средах
Предварительные требования
- Кластер Kubernetes, в котором установлены Tekton Pipelines, Tekton Chains и Kyverno
- Registry с включённой возможностью push образов
- Установленный и настроенный для доступа к кластеру CLI
kubectl - Установленный CLI-инструмент
cosign - Установленный CLI-инструмент
jq
Обзор процесса
Пошаговые инструкции
Шаги 1–7: (Необязательно) Базовая настройка
Если вы измените поле builder.id, вам нужно повторно запустить pipeline, чтобы сгенерировать образ.
Потому что старый образ не подписан новым builder.id, поэтому он будет заблокирован политикой.
В противном случае вы можете пропустить этот шаг и использовать старый образ для проверки политики.
Эти шаги идентичны руководству Quick Start: Signed Provenance. Следуйте инструкциям из этого руководства для:
-
Шаг 3: Настроить Tekton Chains
Если вы хотите изменить значение
builder.idпо умолчанию, вы можете скорректировать полеbuilder.idвconfigобъектаTektonConfig.TIPДля настройки этого процесса требуются привилегии администратора платформы.
Шаг 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
Для этого шага требуются привилегии администратора кластера.
Содержимое 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: открытый ключ подписанта.- Этот открытый ключ совпадает с открытым ключом
cosign.pubв секретеsigning-secrets. - Открытый ключ можно получить в разделе Получить открытый ключ подписи.
- Этот открытый ключ совпадает с открытым ключом
Сохраните политику в YAML-файл с именем kyverno.verify-tekton-built-images.yaml и примените её:
Шаг 9.2: Проверить политику
В пространстве имён policy, где определена политика, создайте Pod для проверки политики.
Используйте собранный образ для создания Pod.
Pod будет создан успешно.
Измените builder.id в ClusterPolicy на другое значение https://alauda.io/builders/tekton/v2 и повторите проверку.
Если вы получаете вывод, подобный следующему, это означает, что Pod заблокирован политикой.
Шаг 10: Очистка ресурсов
Удалите Pod, созданные на предыдущих шагах.
Удалите политику.
Ожидаемые результаты
После выполнения этого руководства:
- У вас будет рабочая настройка Tekton Chains для генерации SLSA provenance
- Ваши контейнерные образы будут автоматически подписываться provenance системы сборки во время процесса сборки
- Вы сможете проверять среду сборки образов с помощью политик CUE или Rego
- Только образы, собранные в указанной среде сборки, можно будет развёртывать в указанном namespace
- Образы, собранные в неавторизованных средах сборки, будут автоматически блокироваться политиками Kyverno
- Вы реализуете базовый контроль проверки происхождения системы сборки для ваших контейнерных образов
Это руководство даёт основу для внедрения проверки происхождения системы сборки в ваших CI/CD pipeline. В production-среде вам следует:
- Настроить корректную изоляцию namespace и контроль доступа
- Реализовать безопасное управление ключами для ключей подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно ротировать ключи подписи и обновлять политики безопасности
- Рассмотреть возможность внедрения дополнительных мер безопасности, таких как сканирование уязвимостей