Image Signature Verification
В Tekton Chains можно автоматически подписывать собранный образ и записывать подпись в SLSA Provenance.
Содержание
Обзор функцииСценарии использованияПредварительные требованияОбзор процессаПошаговые инструкцииШаги 1-7: Базовая настройкаШаг 8: Проверка подписи с KyvernoШаг 8.1: Создание политики Kyverno для разрешения развертывания только подписанных образовШаг 8.2: Проверка политикиШаг 9: Очистка ресурсовОжидаемые результатыСсылкиОбзор функции
Этот метод использует Tekton Chains для автоматической подписи собранного образа, а затем использует cosign или Kyverno для проверки подписи:
- Настроить Tekton Chains для автоматической подписи собранного образа.
- Использовать задачу
buildahTekton Task для сборки образа. - (Опционально) Использовать CLI
cosignдля проверки подписи. - Настроить правила Kyverno для разрешения только подписанных образов.
- Использовать образ для создания Pod и проверки подписи.
По сравнению с Quick Start: Signed Provenance, этот метод добавляет только дополнительные шаги проверки.
Сценарии использования
Следующие сценарии требуют обращения к рекомендациям из этого документа:
- Реализация проверки подписи образа в кластерах Kubernetes с использованием Kyverno
- Применение политик безопасности, разрешающих развертывание только подписанных образов
- Настройка автоматической проверки подписи образов в CI/CD пайплайнах
- Обеспечение целостности и подлинности образов в продуктивной среде
- Внедрение мер безопасности цепочки поставок для контейнерных образов
Предварительные требования
- Kubernetes кластер с установленными Tekton Pipelines, Tekton Chains и Kyverno
- Реестр с разрешённой загрузкой образов
- Установленный и настроенный CLI
kubectlдля доступа к кластеру - Установленный CLI инструмент
cosign - Установленный CLI инструмент
jq
Обзор процесса
Пошаговые инструкции
Шаги 1-7: Базовая настройка
Эти шаги идентичны руководству Quick Start: Signed Provenance. Пожалуйста, следуйте инструкциям в том руководстве для:
- Шаг 1: Генерация ключей подписи
- Шаг 2: Настройка аутентификации
- Шаг 3: Настройка Tekton Chains
- Шаг 4: Создание примерного пайплайна
- Шаг 5: Запуск примерного пайплайна
- Шаг 6: Ожидание подписи PipelineRun
- Шаг 7: Получение образа из PipelineRun
Шаг 8: Проверка подписи с Kyverno
В Шаге 8: Проверка образа и аттестации мы используем CLI cosign для проверки подписи.
Здесь мы используем Kyverno для проверки подписи.
Шаг 8.1: Создание политики Kyverno для разрешения развертывания только подписанных образов
Для этого шага требуются права администратора кластера.
Подробнее о Kyverno ClusterPolicy смотрите в Kyverno ClusterPolicy
Политика выглядит следующим образом:
:::details {title="Объяснение полей YAML"}
spec.rules[].match.any[].resources: Ресурсы, которые будут сопоставлены и проверены.kinds: Типы ресурсов для сопоставления и проверки.Pod: Ресурсы типа Pod.
namespaces: Пространства имён ресурсов для сопоставления и проверки.policy: Ресурсы в пространстве имёнpolicyбудут сопоставлены и проверены.
spec.rules[].verifyImages: Настройки проверки образовimageReferences: Образы, которые будут проверяться.*: все образы будут проверены.<registry>/test/*: только образы из реестра<registry>/testбудут проверены.
skipImageReferences: Образы, которые будут пропущены.ghcr.io/trusted/*: образы из реестраghcr.io/trustedбудут пропущены.
imageRegistryCredentials:allowInsecureRegistry: Разрешить небезопасный реестр.secrets: Секреты для учётных данных реестра образов.registry-credentials: Имя секрета. Секрет должен существовать в namespace, где развернут kyverno.
attestors: Подписанты, используемые для проверки образа.count: Количество подписантов, которые должны совпасть.entries: Записи подписантов.keys: Ключи подписантов.publicKeys: Публичные ключи подписантов.- Этот публичный ключ совпадает с публичным ключом
cosign.pubв секретеsigning-secrets.
- Этот публичный ключ совпадает с публичным ключом
ctlog: ctlog подписантов.ignoreSCT: Игнорировать SCT.- В изолированных сетевых средах сначала игнорируйте SCT.
rekor: rekor подписантов.ignoreTlog: Игнорировать Tlog.- В изолированных сетевых средах сначала игнорируйте Tlog. :::
Требуется настроить конфигурацию
spec.rules[].attestors[].entries[].keys.publicKeys: Публичный ключ подписанта.- Этот публичный ключ совпадает с публичным ключом
cosign.pubв секретеsigning-secrets. - Публичный ключ можно получить из раздела Get the Signing Public Key.
- Этот публичный ключ совпадает с публичным ключом
Сохраните в yaml-файл с именем kyverno.only-cosign-image-deploy.yaml и примените командой:
Шаг 8.2: Проверка политики
В пространстве имён policy, где определена политика, создайте Pod для проверки политики.
Используйте подписанный образ, созданный пайплайном, для создания Pod.
Pod будет успешно создан.
Используйте неподписанный образ для создания Pod.
Если вы получите такой вывод, значит Pod заблокирован политикой.
Шаг 9: Очистка ресурсов
Удалите Pod, созданные на предыдущих шагах.
Удалите политику.
Ожидаемые результаты
После выполнения этого руководства:
- У вас настроена работа с Tekton Chains для подписи образов и Kyverno для проверки подписей
- Ваши контейнерные образы автоматически подписываются в процессе сборки
- В указанном пространстве имён разрешено развертывание только подписанных образов
- Неподписанные образы автоматически блокируются политиками Kyverno
- Вы реализовали базовый контроль безопасности цепочки поставок для контейнерных образов
Это руководство предоставляет основу для внедрения безопасности цепочки поставок в ваших CI/CD пайплайнах. В продуктивной среде рекомендуется:
- Настроить правильную изоляцию пространств имён и контроль доступа
- Реализовать безопасное управление ключами подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно менять ключи подписи и обновлять политики безопасности
- Рассмотреть возможность внедрения дополнительных мер безопасности, таких как сканирование уязвимостей