# Custom Nginx + Image Signing + Kyverno Policy ## Описание Демонстрация полного цикла: сборка кастомного nginx-образа, подпись через HashiCorp Vault, деплой в Kubernetes через Helm и валидация подписи Kyverno. --- ## Шаги запуска ### 1. Подготовка Vault - Настройте Transit Engine и сгенерируйте ключ `container-sign` в Vault. - Примените политику из `vault_approle_policy.hcl`: ```sh vault policy write container-sign vault_approle_policy.hcl ``` - Создайте appRole и получите RoleID/SecretID: ```sh sh vault_approle_setup.sh ``` - Сохраните RoleID и SecretID для переменных CI/CD. ### 2. Настройка GitLab CI/CD - В настройках проекта добавьте переменные: - `VAULT_ROLE_ID` — из Vault - `VAULT_SECRET_ID` — из Vault - Убедитесь, что `.gitlab-ci.yml` корректно настроен под ваш реестр и адрес Vault. ### 3. Сборка и подпись образа - Запустите pipeline в GitLab. - Образ будет собран, отправлен в реестр и подписан через cosign с использованием Vault. ### 4. Деплой в Kubernetes - Перейдите в директорию helm-чарта: ```sh cd helm/nginx helm install nginx . ``` - Проверьте, что деплой прошёл успешно. ### 5. Настройка Kyverno - Получите публичный ключ из Vault: ```sh vault read -field=public_key transit/keys/container-sign ``` - Вставьте ключ в `kyverno-image-signature-policy.yaml` вместо ``. - Примените политику: ```sh kubectl apply -f kyverno-image-signature-policy.yaml ``` --- ## Итог - Только подписанные образы будут запускаться в кластере. - Весь процесс автоматизирован через CI/CD и Vault.