докер изграждане на аргументи - изграждане на аргументи докер - докер изграждане изграждане на аргумент

Аргументи за изграждане на Docker: Скритият вектор за тайни течове в изображения

Изграждане на аргументи: Удобство, което може да компрометира сигурността

Аргументите за изграждане на Docker улесняват предаването на конфигурационни стойности по време на изграждане, но те идват с често пренебрегвана цена: тези аргументи се запазват в метаданните и слоевете на изображението. Разработчиците често приемат, че тези стойности изчезват след изграждането, но в действителност инструкциите за изграждане на Docker аргументи ги вграждат в историята на изображенията на Docker.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

FROM node:18 ARG API_KEY=my-secret-key RUN echo "API_KEY=$API_KEY" > /app/config.txt 

Всеки, който тича история на докера or докер инспектира ще намери API_KEY стойност, вградена в метаданните на изображението. Това се случва, защото инструкцията Docker build build arg commitвсяка стъпка от изграждането като постоянен слой.

Защитена версия:

# Use Docker BuildKit secrets instead of ARG # docker build --secret id=api_key,src=./api.key . FROM node:18 RUN --mount=type=secret,id=api_key cat /run/secrets/api_key > /app/config.txt 

Образователна бележка: Избягвайте инжектирането на секрети чрез аргументи за изграждане на Docker. Използвайте –тайна монтирания, предоставени от BuildKit за чувствителни данни; те никога не се запазват в слоеве или метаданни.

Как тайните се съхраняват в слоеве и метаданни

Всяка инструкция в Dockerfile създава нов слой с изображение. Дори когато презаписвате или изтривате файлове, по-ранните слоеве остават в кеша. Ето защо тайните, инжектирани с Docker build args или build args Docker, се запазват за неопределено време.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

FROM python:3.10 ARG GITHUB_TOKEN=ghp_ABC123TOKEN RUN pip install private-package --extra-index-url https://user:$GITHUB_TOKEN@pypi.example.com 

Използването на ARG По този начин токенът се вгражда в слоя с изображението, видим през проверка на изображението на Docker или извлечени от кеша. Защитена версия:

# Secure alternative using BuildKit secrets # docker build --secret id=gh_token,src=.secrets/token.txt . FROM python:3.10 RUN --mount=type=secret,id=gh_token pip install private-package --extra-index-url https://pypi.example.com 

Образователна бележка: При употребата му, чувствителните стойности остават в историята. Използвайте ефимерни секретни монтирания вместо това, за да защитите токени и идентификационни данни.

Често срещани неправилни конфигурации в CI/CD Pipelines

In модерен pipelines, разработчиците често предават тайни чрез CI/CD среди, използващи аргументи на Docker или споделени кешове. Този навик изтича тайни в лог файлове, runners и кешове на системния регистър. С общи бегачи вътре Действия на GitHub, GitLab CI или Дженкинс, тези тайни могат лесно да се разпространят към несвързани работни места.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

# Never expose real tokens, credentials, or internal URLs in pipelines - name: Build image   run: docker build -t app --build-arg TOKEN=${{ secrets.API_TOKEN }} . 

Тайната се озовава в лог файловете за изграждане и метаданните на изображенията, нарушавайки принципите за най-малки привилегии. Защитена версия: 

# Secure build command using BuildKit secret mount - name: Secure Docker build   run: docker buildx build --secret id=api_token,src=.secrets/api_token.txt . 

Образователна бележка: Избягвайте –build-arg за тайни. В CI/CD, тайните никога не трябва да преминават през променливи на средата или лог файлове. Винаги предпочитайте ефимерни тайни монтирания.

Най-добри практики за предотвратяване на тайно разкриване

Предотвратяването на разкриването на тайни данни започва с признаването, че аргументите за изграждане на Docker са публични по дизайн. Те са чудесни за конфигуриране (като тагове за версии или флагове на функции), но не и за идентификационни данни.

Най-добри практики

  1. Използвайте BuildKit — тайна за чувствителни данни.
  2. Никога не дефинирайте тайни чрез ARG или ENV.
  3. Добави .env, тайни/, и конфигурация/ директории към .dockerignore.
  4. Прилагане на многоетапни компилации да изолира частни етапи.
  5. Изчистване на кешовете след чувствителни етапи на изграждане.
  6. Валидиране на метаданните на изображението с историята на Docker преди публикуване.

Мини превантивен контролен списък

  • Одитирайте всички Docker файлове за изграждане на аргументи в Docker използване.
  • Заменете идентификационните данни с BuildKit –тайна.
  • Уверете се, .dockerignore изключва чувствителни файлове.
  • дезинфенкцирам CI/CD променливи на средата.
  • Автоматизирайте тайното сканиране преди изпращане на изображения.

Образователна бележка: Ако дадена стойност премине през аргумент за изграждане на Docker, тя става постоянна. Използвайте секретни монтирания и изолирани етапи на изграждане, за да защитите чувствителните данни.

Откриване на опасно използване на аргументи за изграждане преди внедряване

Автоматизираното сканиране е от съществено значение за идентифициране на рискови модели на аргументи за изграждане на Docker, преди изображението да бъде пуснато в производство. Инструменти като Дребнав, Хадолинт, и Ксигени може да открива идентификационни данни, вградени в Docker файлове или слоеве с изображения.

Функционален фрагмент, с контекст и контролен парапет

# CI/CD guardrail: pre-deployment Dockerfile security scan - name: Dockerfile security scan   run: trivy config --severity HIGH, CRITICAL --ignore-unfixed. 

Тази стъпка действа като превантивен контрол, блокирайки несигурните Docker инструкции за аргументи за изграждане преди внедряването им.

Образователна бележка: Интегрирайте сканирането на Dockerfile като задължително CI/CD етап. Автоматизираните инструменти помагат за прилагането на последователна и сигурна хигиена на изграждането.

Как Xygeni предпазва от секретни течове по време на изграждане

Ксигени Тайни за сигурност осигурява специализирано откриване на злоупотреба с аргументи на Docker. Той идентифицира опасни ARG дефиниции, проследява секретни стойности в етапите на изграждане и маркира остатъчни идентификационни данни в метаданните на изображението или кешираните слоеве. Чрез интегриране с вашия CI/CD pipeline, той прилага политиките за сигурност на Docker build build arg преди сливания или пускания.

Функционален фрагмент, пример за контекстуално прилагане

# Secure enforcement of Docker build arg usage - name: Xygeni Docker ARG enforcement   run: dotnet xygeni enforce --rules dockerfile,secrets,build --fail-on-risk 

Добавете тази работа към вашата pipelineетапът на валидиране за непрекъсната защита.

Образователна бележка: Xygeni автоматично налага безопасни практики на Docker, предотвратявайки изтичането на секрети в различни среди от рискови конфигурации по време на изграждане.

В крайна сметка: Докерът за изграждане на аргументи никога не трябва да обработва секрети

Аргументите за изграждане на Docker са нож с две остриета - удобни за конфигуриране, но рискови за секрети. Всяка инжектирана от вас стойност в Docker за изграждане може да се запази в метаданни, история на изображенията или кешове.
Защитете вашите конструкции чрез:

  • Използване на BuildKit –тайна за пълномощия.
  • Изолиране на чувствителни данни в многоетапни компилации.
  • Сканиране за изтекли стойности преди внедряване.
  • Прилагане на политики за сигурност чрез Xygeni Code Security.

Вашата компилация pipeline е толкова сигурно, колкото са тайните, които не разкривате. Отнасяйте се към всеки Docker build arg като към потенциален вектор за разкриване и го заключете, преди атакуващите да го открият.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni