Проверка подписи образа
В Tekton Chains можно автоматически подписывать собранный образ и записывать подпись в SLSA Provenance.
Содержание
Обзор функцииСценарии использованияПредварительные требованияОбзор процессаПошаговые инструкцииШаги 1-7: Базовая настройкаШаг 8: Проверка подписи с помощью KyvernoШаг 8.1: Создайте политику Kyverno, чтобы разрешить развертывание только подписанных образовШаг 8.2: Проверьте политикуШаг 9: Очистка ресурсовОжидаемые результатыСсылкиОбзор функции
Этот метод использует Tekton Chains для автоматической подписи собранного образа, а затем использует cosign или Kyverno для проверки подписи:
- Настройте Tekton Chains для автоматической подписи собранного образа.
- Используйте Tekton Task
buildahдля сборки образа. - (Необязательно) Используйте CLI
cosignдля проверки подписи. - Настройте правила Kyverno, чтобы разрешать только подписанные образы.
- Используйте образ для создания Pod и проверки подписи.
По сравнению с Быстрый старт: Signed Provenance, этот метод добавляет только дополнительные шаги проверки.
Сценарии использования
Следующие сценарии требуют обращения к рекомендациям в этом документе:
- Реализация проверки подписи образов в кластерах Kubernetes с использованием Kyverno
- Применение политик безопасности, разрешающих развертывание только подписанных образов
- Настройка автоматической проверки подписи образов в конвейерах CI/CD
- Обеспечение целостности и подлинности образов в production-средах
- Реализация контролей безопасности цепочки поставки для контейнерных образов
Предварительные требования
- Кластер Kubernetes с установленными Tekton Pipelines, Tekton Chains и Kyverno
- Реестр с включенной возможностью push образов
- Установленный и настроенный CLI
kubectlдля доступа к вашему кластеру - Установленный CLI-инструмент
cosign - Установленный CLI-инструмент
jq
Обзор процесса
Пошаговые инструкции
Шаги 1-7: Базовая настройка
Эти шаги идентичны руководству Быстрый старт: Signed Provenance. Следуйте инструкциям в этом руководстве для:
- Шаг 1: Сгенерировать ключи подписи
- Шаг 2: Настроить аутентификацию
- Шаг 3: Настроить Tekton Chains
- Шаг 4: Создать пример pipeline
- Шаг 5: Запустить пример pipeline
- Шаг 6: Дождаться подписи PipelineRun
- Шаг 7: Получить образ из PipelineRun
Шаг 8: Проверка подписи с помощью Kyverno
В разделе Шаг 8: Проверка образа и attestation мы используем 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: Secrets, которые будут использоваться для учетных данных реестра образов.registry-credentials: Имя Secret. Secret должен существовать в пространстве имен, где развернут kyverno.
attestors: Attestors, которые будут использоваться для проверки образа.count: Количество attestors, которые должны совпасть.entries: Записи attestors.keys: Ключи attestors.publicKeys: Открытые ключи attestors.- Этот открытый ключ совпадает с открытым ключом
cosign.pubв Secretsigning-secrets.
- Этот открытый ключ совпадает с открытым ключом
ctlog: ctlog attestors.ignoreSCT: Игнорировать ли SCT.- В изолированных сетевых средах сначала игнорируйте SCT.
rekor: rekor attestors.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-среде следует:
- Настроить правильную изоляцию пространств имен и контроль доступа
- Реализовать безопасное управление ключами для ключей подписи
- Настроить мониторинг и оповещения о нарушениях политик
- Регулярно ротировать ключи подписи и обновлять политики безопасности
- Рассмотреть возможность внедрения дополнительных мер безопасности, таких как сканирование уязвимостей