Проверка подписи образа
В Tekton Chains можно автоматически подписывать собранный образ и записывать подпись в SLSA Provenance.
Содержание
Обзор функцииВарианты использованияПредварительные требованияОбзор процессаПошаговые инструкцииШаги 1–7: Базовая настройкаШаг 8: Проверка подписи с помощью KyvernoШаг 8.1: Создайте политику Kyverno, чтобы разрешить к развертыванию только подписанные образыШаг 8.2: Проверьте политикуШаг 9: Очистка ресурсовОжидаемые результатыСсылкиОбзор функции
Этот метод использует Tekton Chains для автоматической подписи собранного образа, а затем использует cosign или Kyverno для проверки подписи:
- Настройте Tekton Chains для автоматической подписи собранного образа.
- Используйте Tekton Task
buildahдля сборки образа. - (Необязательно) Используйте
cosignCLI для проверки подписи. - Настройте правила Kyverno, чтобы разрешать только подписанные образы.
- Используйте образ для создания Pod, чтобы проверить подпись.
По сравнению с Быстрый старт: Signed Provenance, этот метод добавляет только дополнительные шаги проверки.
Варианты использования
Для следующих сценариев необходимо обращаться к рекомендациям в этом документе:
- Реализация проверки подписи образов в кластерах Kubernetes с использованием Kyverno
- Принудительное применение политик безопасности, разрешающих к развертыванию только подписанные образы
- Настройка автоматической проверки подписи образов в CI/CD-пайплайнах
- Обеспечение целостности и подлинности образов в production-средах
- Реализация механизмов безопасности цепочки поставок для контейнерных образов
Предварительные требования
- Кластер Kubernetes с установленными Tekton Pipelines, Tekton Chains и Kyverno
- Registry с включенной возможностью push образов
- Установленный и настроенный для доступа к кластеру
kubectlCLI - Установленный инструмент
cosignCLI - Установленный инструмент
jqCLI
Обзор процесса
Пошаговые инструкции
Шаги 1–7: Базовая настройка
Эти шаги идентичны руководству Быстрый старт: Signed Provenance. Следуйте инструкциям в этом руководстве для:
- Шаг 1: Сгенерировать ключи подписи
- Шаг 2: Настроить аутентификацию
- Шаг 3: Настроить Tekton Chains
- Шаг 4: Создать пример Pipeline
- Шаг 5: Запустить пример Pipeline
- Шаг 6: Дождаться подписания PipelineRun
- Шаг 7: Получить образ из PipelineRun
Шаг 8: Проверка подписи с помощью Kyverno
В Шаге 8: Проверка образа и аттестации мы используем cosign CLI для проверки подписи.
Здесь мы используем Kyverno для проверки подписи.
Шаг 8.1: Создайте политику Kyverno, чтобы разрешить к развертыванию только подписанные образы
Для этого шага требуются права cluster administrator.
Подробнее о 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<registry>/test.
skipImageReferences: Ссылки на образы, которые будут пропущены.ghcr.io/trusted/*: будут пропущены только ссылки на образы в registryghcr.io/trusted.
imageRegistryCredentials:allowInsecureRegistry: Разрешать ли небезопасный registry.secrets: Secret, используемые для учетных данных image registry.registry-credentials: имя secret. Secret должен существовать в пространстве имен, где развернут kyverno.
attestors: Аттестаторы, которые будут использоваться для проверки образа.count: Количество аттестаторов, которые должны совпасть.entries: Записи аттестаторов.keys: Ключи аттестаторов.publicKeys: Открытые ключи аттестаторов.- Этот открытый ключ совпадает с открытым ключом
cosign.pubв secretsigning-secrets.
- Этот открытый ключ совпадает с открытым ключом
ctlog: ctlog аттестаторов.ignoreSCT: Нужно ли игнорировать SCT.- В изолированных сетевых средах сначала игнорируйте SCT.
rekor: rekor аттестаторов.ignoreTlog: Нужно ли игнорировать Tlog.- В изолированных сетевых средах сначала игнорируйте Tlog. :::
Необходимо скорректировать конфигурацию
spec.rules[].attestors[].entries[].keys.publicKeys: Открытый ключ подписывающей стороны.- Этот открытый ключ совпадает с открытым ключом
cosign.pubв secretsigning-secrets. - Открытый ключ можно получить из раздела Получить открытый ключ подписи.
- Этот открытый ключ совпадает с открытым ключом
Сохраните это в файл yaml с именем kyverno.only-cosign-image-deploy.yaml и примените его с помощью:
Шаг 8.2: Проверьте политику
В пространстве имен policy, где определена политика, создайте Pod для проверки политики.
Используйте подписанный образ, созданный pipeline, для создания Pod.
Pod будет создан успешно.
Используйте неподписанный образ для создания Pod.
Если вы получите такой вывод, это означает, что Pod заблокирован политикой.
Шаг 9: Очистка ресурсов
Удалите Pod, созданные на предыдущих шагах.
Удалите политику.
Ожидаемые результаты
После выполнения этого руководства:
- У вас будет рабочая конфигурация Tekton Chains для подписи образов и Kyverno для проверки подписи
- Контейнерные образы будут автоматически подписываться в процессе сборки
- Только подписанные образы можно будет развертывать в указанном пространстве имен
- Неподписанные образы будут автоматически блокироваться политиками Kyverno
- Вы реализуете базовый механизм контроля безопасности цепочки поставок для контейнерных образов
Это руководство служит основой для внедрения безопасности цепочки поставок в ваши CI/CD-пайплайны. В production-среде следует:
- Настроить правильную изоляцию пространств имен и контроль доступа
- Реализовать безопасное управление ключами подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно ротировать ключи подписи и обновлять политики безопасности
- Рассмотреть возможность внедрения дополнительных механизмов безопасности, таких как сканирование уязвимостей