[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-bezopasnost-konteynerov-kak-organizovat-protsess-obnovleniya-i-patchinga-bazovykh-obrazov":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},326,"kak-organizovat-protsess-obnovleniya-i-patchinga-bazovykh-obrazov",9,"bezopasnost-konteynerov","Безопасность контейнеров","🛡️","Как организовать процесс обновления и патчинга базовых образов?","\u003C!-- grade: -->\n\nУязвимости обнаруживаются постоянно — образ, безопасный сегодня, завтра может содержать критическую CVE. Регулярное обновление базовых образов и зависимостей является обязательным процессом для банковских систем и требованием стандартов безопасности (PCI DSS Requirement 6).\n\n**1. Стратегия фиксации (pin) версий:**\n\n```dockerfile\n# ПЛОХО — неизвестно, что получим при следующей сборке\nFROM eclipse-temurin:21-jre\n\n# ЛУЧШЕ — фиксация конкретной минорной версии\nFROM eclipse-temurin:21.0.4_7-jre-alpine\n\n# ЛУЧШЕЕ — pin по digest (неизменная ссылка на конкретный образ)\nFROM eclipse-temurin@sha256:1a2b3c4d5e6f...\n```\n\nТег (например, `21-jre`) может указывать на разные образы в разное время — разработчики базового образа обновляют теги при выпуске патчей. Digest (`@sha256:...`) — это криптографический хеш, однозначно идентифицирующий конкретную версию образа. Pin по digest гарантирует воспроизводимость сборки, но требует дисциплины при обновлениях.\n\n**2. Автоматическое обнаружение обновлений с Renovate\u002FDependabot:**\n\nRenovate и Dependabot — инструменты, автоматически создающие Pull Request при появлении новых версий зависимостей. Они поддерживают Dockerfile, docker-compose, Maven, Gradle и другие экосистемы.\n\n```json\n\u002F\u002F renovate.json\n{\n  \"$schema\": \"https:\u002F\u002Fdocs.renovatebot.com\u002Frenovate-schema.json\",\n  \"extends\": [\"config:base\"],\n  \"docker\": {\n    \"enabled\": true,\n    \"pinDigests\": true\n  },\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"eclipse-temurin\"],\n      \"automerge\": false,\n      \"schedule\": [\"every weekday\"],\n      \"groupName\": \"base-image-updates\"\n    }\n  ],\n  \"vulnerabilityAlerts\": {\n    \"enabled\": true,\n    \"labels\": [\"security\"]\n  }\n}\n```\n\nПараметр `pinDigests: true` автоматически добавляет digest к тегам при создании PR. Параметр `automerge: false` означает, что PR с обновлением базового образа требует ручного review — для банковских систем автоматический merge обновлений обычно запрещён политиками безопасности.\n\n```yaml\n# .github\u002Fdependabot.yml\nversion: 2\nupdates:\n  - package-ecosystem: \"docker\"\n    directory: \"\u002F\"\n    schedule:\n      interval: \"weekly\"\n    reviewers:\n      - \"security-team\"\n    labels:\n      - \"docker\"\n      - \"dependencies\"\n\n  - package-ecosystem: \"maven\"\n    directory: \"\u002F\"\n    schedule:\n      interval: \"daily\"\n    open-pull-requests-limit: 10\n```\n\n**3. Периодическое пересканирование развёрнутых образов:**\n\nНовые CVE появляются ежедневно. Образ, не имевший известных уязвимостей при деплое, может стать уязвимым через неделю. Поэтому необходимо регулярно пересканировать уже развёрнутые образы:\n\n```yaml\n# CronJob для ежедневного сканирования всех образов в кластере\napiVersion: batch\u002Fv1\nkind: CronJob\nmetadata:\n  name: image-scan\n  namespace: security\nspec:\n  schedule: \"0 6 * * *\"  # Каждый день в 6:00\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n          - name: scanner\n            image: aquasec\u002Ftrivy:latest\n            command:\n            - \u002Fbin\u002Fsh\n            - -c\n            - |\n              # Получить список уникальных образов во всех namespace-ах\n              for image in $(kubectl get pods -A -o jsonpath='{.items[*].spec.containers[*].image}' | tr ' ' '\\n' | sort -u); do\n                echo \"Scanning: $image\"\n                trivy image --severity CRITICAL,HIGH --exit-code 0 \"$image\"\n              done\n          restartPolicy: OnFailure\n          serviceAccountName: image-scanner-sa\n```\n\n**4. Процесс патчинга для банковского проекта:**\n\n```\n1. Обнаружение (автоматическое):\n   +-- Renovate\u002FDependabot создаёт PR с обновлением зависимости\n   +-- Trivy обнаруживает CVE при ежедневном пересканировании\n   +-- Подписка на security advisories (GitHub Advisory, Alpine SecDB, Spring Security)\n\n2. Оценка (определение приоритета):\n   +-- CVSS >= 9.0 (Critical)  -> патч в течение 24 часов\n   +-- CVSS 7.0-8.9 (High)    -> патч в течение 7 дней\n   +-- CVSS 4.0-6.9 (Medium)  -> патч в следующем плановом релизе\n   +-- CVSS \u003C 4.0 (Low)       -> в бэклог\n\n3. Патчинг:\n   +-- Обновить базовый образ в Dockerfile\n   +-- Обновить зависимости (Maven\u002FGradle)\n   +-- Прогнать полный набор тестов (unit, integration, e2e)\n   +-- Сканировать новый образ на уязвимости\n   +-- Деплой через стандартный CI\u002FCD пайплайн\n\n4. Верификация:\n   +-- Повторное сканирование после деплоя (подтверждение устранения CVE)\n   +-- Мониторинг стабильности сервиса в течение контрольного периода\n```\n\nSLA по патчингу (24 часа для Critical, 7 дней для High) — типичное требование PCI DSS и внутренних политик безопасности банков. Каждое исключение из SLA должно быть задокументировано с обоснованием и планом устранения.\n\n**5. Пересборка образов по расписанию:**\n\n```yaml\n# GitHub Actions: еженедельная пересборка для актуализации базового образа\nname: Weekly Rebuild\non:\n  schedule:\n    - cron: '0 2 * * 1'  # Каждый понедельник в 2:00 UTC\n  workflow_dispatch: {}   # Возможность ручного запуска\n\njobs:\n  rebuild:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions\u002Fcheckout@v4\n    - name: Build with latest base image\n      run: docker build --pull --no-cache -t banking-service:weekly .\n    - name: Scan\n      run: trivy image --exit-code 1 --severity CRITICAL banking-service:weekly\n    - name: Push if clean\n      run: docker push registry.bank.local\u002Fbanking-service:weekly\n```\n\nФлаг `--pull` гарантирует, что Docker скачает свежую версию базового образа, а не использует локальный кэш. Флаг `--no-cache` отключает кэш слоёв, обеспечивая полную пересборку. В результате все пакеты ОС и зависимости будут обновлены до последних доступных версий.","","middle",[15,16,17,18,19,20],"renovate","trivy","container-security","patching","dependabot","docker",[],null,{"title":24,"description":25,"ogTitle":24,"ogDescription":26,"keywords":27,"schemaAnswer":35,"featuredSnippetReady":36},"Обновление и патчинг базовых Docker-образов: процесс и автоматизация — Gymterview","Как организовать процесс обновления базовых образов? Pin по digest, Renovate и Dependabot, периодическое сканирование Trivy, процесс патчинга по CVSS, еженедельная пересборка.","Процесс обновления базовых Docker-образов: pin по digest, автоматизация с Renovate\u002FDependabot, периодическое сканирование и пересборка образов.",[28,29,30,31,32,33,34],"патчинг базовых образов","обновление Docker образов","Renovate Docker","Dependabot Docker","pin digest","Trivy сканирование","CVSS патчинг","Процесс патчинга включает: фиксацию версий через pin по digest (неизменная ссылка на конкретный образ); автоматическое обнаружение обновлений с Renovate\u002FDependabot; периодическое пересканирование развёрнутых образов через CronJob с Trivy; процесс реагирования по CVSS — Critical (24 часа), High (7 дней), Medium (следующий релиз), Low (бэклог); еженедельную пересборку образов с флагами --pull и --no-cache для получения свежего базового образа и полной пересборки.",true]