docker build args - build args docker - docker build build arg

Argumenty kompilacji Dockera: Ukryty wektor wycieków tajnych informacji w obrazach

Budowanie argumentów: wygoda, która może zagrozić bezpieczeństwu

Argumenty kompilacji Dockera ułatwiają przekazywanie wartości konfiguracyjnych w trakcie kompilacji, ale wiążą się z często pomijanym kosztem: te argumenty są zachowywane w metadanych i warstwach obrazu. Programiści często zakładają, że te wartości znikają po kompilacji, ale w rzeczywistości instrukcje kompilacji Dockera osadzają je w historii obrazu Dockera.

⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.

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

				
			

Każdy, kto biega historia dokera or Inspekcja dokera znajdzie KLUCZ API Wartość osadzona w metadanych obrazu. Dzieje się tak, ponieważ instrukcja Docker build build arg commitkażdy etap kompilacji traktowany jest jako stała warstwa.

Wersja bezpieczna:

				
					# 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

				
			

Uwaga edukacyjna: Unikaj wstrzykiwania sekretów za pomocą argumentów kompilacji Dockera. Użyj -sekret punkty mocowania udostępniane przez BuildKit dla poufnych danych; nigdy nie są one utrwalane w warstwach ani metadanych.

Jak sekrety utrzymują się w warstwach i metadanych

Każda instrukcja w pliku Dockerfile tworzy nową warstwę obrazu. Nawet jeśli nadpiszesz lub usuniesz pliki, wcześniejsze warstwy pozostaną w pamięci podręcznej. Dlatego sekrety wstrzykiwane za pomocą argumentów kompilacji Docker lub argumentów kompilacji Docker są przechowywane w nieskończoność.

⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.

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

				
			

Korzystanie z ARG w ten sposób osadza token w warstwie obrazu, widoczny przez inspekcja obrazu dokera lub wyodrębnione z pamięci podręcznej. Wersja bezpieczna:

				
					# 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

				
			

Uwaga edukacyjna: W tym przypadku wrażliwe wartości pozostają w historii. Zamiast tego należy używać efemerycznych, tajnych mocowań, aby chronić tokeny i dane uwierzytelniające.

Typowe błędne konfiguracje CI/CD Pipelines

In nowoczesny pipelines, programiści często przekazują sobie tajemnice CI/CD środowiska korzystające z argumentów Dockera lub współdzielonych pamięci podręcznych. Ten nawyk powoduje wyciek sekretów do logów, programów uruchamiających i pamięci podręcznych rejestru. Z udostępnionymi biegaczami w Akcje GitHub, GitLab CI lub Jenkins, sekrety te mogą łatwo przenieść się na niezwiązane z pracą zadania.

⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.

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

				
			

Tajemnica kończy się w dziennikach kompilacji i metadanych obrazu, co narusza zasadę najmniejszych uprawnień. Wersja bezpieczna: 

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

				
			

Uwaga edukacyjna: Uniknąć –build-arg dla sekretów. W CI/CDSekrety nigdy nie powinny przechodzić przez zmienne środowiskowe ani logi. Zawsze preferuj tymczasowe montowanie sekretów.

Najlepsze praktyki zapobiegające ujawnianiu informacji poufnych

Zapobieganie ujawnieniu poufnych danych zaczyna się od uznania, że ​​argumenty kompilacji Dockera są z założenia publiczne. Są one przydatne do konfiguracji (np. tagi wersji czy flagi funkcji), ale nie do uwierzytelniania.

Najlepsze praktyki

  1. Użyj BuildKit — sekret dla danych wrażliwych.
  2. Nigdy nie definiuj sekretów poprzez ARG lub ENV.
  3. Dodaj .env, tajniki/, config / katalogi do .dockerignore.
  4. Zastosuj kompilacje wieloetapowe w celu odizolowania scen prywatnych.
  5. Wyczyść skrzynki po wrażliwych etapach kompilacji.
  6. Sprawdź poprawność metadanych obrazu z historią Dockera przed publikacją.

Mini lista kontrolna działań zapobiegawczych

  • Przeprowadź audyt wszystkich plików Dockerfile buduj argumenty Dockera stosowanie.
  • Zastąp dane uwierzytelniające za pomocą BuildKit -sekret.
  • Zapewniać .dockerignore wyklucza pliki poufne.
  • Sanitize CI/CD Zmienne środowiska.
  • Zautomatyzuj tajne skanowanie przed przesłaniem obrazów.

Uwaga edukacyjna: Jeśli wartość przechodzi przez argument kompilacji Dockera, staje się ona trwała. Użyj tajnych montowań i izolowanych etapów kompilacji, aby chronić poufne dane.

Wykrywanie niebezpiecznego użycia argumentów kompilacji przed wdrożeniem

Automatyczne skanowanie jest niezbędne do identyfikacji ryzykownych wzorców argumentów kompilacji Dockera przed przekazaniem obrazu do produkcji. Narzędzia takie jak Ciekawostki, Hadolint, Xygeni może wykrywać poświadczenia osadzone w plikach Dockerfile lub warstwach obrazu.

Fragment funkcjonalny z kontekstem i zabezpieczeniem kontrolnym

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

				
			

Ten krok pełni funkcję kontroli zapobiegawczej, blokując niebezpieczne argumenty kompilacji instrukcji Docker przed wdrożeniem.

Uwaga edukacyjna: Zintegruj skanowanie Dockerfile jako obowiązkowe CI/CD etapie. Zautomatyzowane narzędzia pomagają zapewnić spójną i bezpieczną higienę kompilacji.

Jak Xygeni chroni przed wyciekiem tajnych informacji w czasie kompilacji

Xygeni Tajemnice bezpieczeństwa zapewnia specjalistyczną detekcję niewłaściwego użycia argumentów Dockera. Identyfikuje niebezpieczne definicje ARG, śledzi tajne wartości na różnych etapach kompilacji i sygnalizuje resztkowe poświadczenia w metadanych obrazu lub warstwach pamięci podręcznej. Integrując się z Twoim CI/CD pipeline, egzekwuje zasady bezpieczeństwa Docker build build arg przed scaleniem lub wydaniem.

Fragment kodu funkcjonalnego, przykład egzekwowania kontekstowego

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

				
			

Dodaj tę pracę do swojej pipelineEtap walidacji dla ciągłej ochrony.

Uwaga edukacyjna: Xygeni automatycznie wymusza bezpieczne praktyki Dockera, zapobiegając wyciekaniu poufnych informacji w ryzykownych konfiguracjach kompilacji pomiędzy środowiskami.

Podsumowanie: Docker nigdy nie powinien obsługiwać sekretów podczas budowania argumentów

Argumenty kompilacji Dockera to miecz obosieczny: wygodny w konfiguracji, ale ryzykowny w przypadku sekretów. Każda wstrzyknięta wartość Dockera może zostać zapisana w metadanych, historii obrazów lub pamięci podręcznej.
Chroń swoje kompilacje poprzez:

  • Korzystanie z BuildKit -sekret w celu uzyskania referencji.
  • Izolowanie wrażliwych danych w kompilacjach wieloetapowych.
  • Przed wdrożeniem przeprowadzane jest skanowanie w celu wykrycia wycieków wartości.
  • Wdrażanie zasad bezpieczeństwa poprzez Xygeni Code Security.

Twoja kompilacja pipeline jest tak bezpieczny, jak sekrety, których nie ujawniasz. Traktuj każdy argument kompilacji Dockera jako potencjalny wektor ujawnienia i zabezpiecz go, zanim atakujący go znajdą.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni