Skip to content
tinAI
Go back

GitHub - rtvkiz/minimal: Bộ sưu tập hình ảnh container tối giản và bảo mật CVE

Bài gốc: GitHub - rtvkiz/minimal: Minimal CVE Hardened container image collection

Tác giả: Unknown

Ngày đăng: Dịch ngày:

TL;DR

Minimal là bộ sưu tập hình ảnh container được làm mới hàng ngày với số lượng CVE tối thiểu. Chúng sử dụng các gói từ Chainguard's apko và Wolfi để tối ưu hóa bảo mật. Dev có thể nhanh chóng giảm bề mặt tấn công và đáp ứng các yêu cầu tuân thủ bảo mật.

Minimal: Hình Ảnh Container Bảo Mật

Một bộ sưu tập hình ảnh container sẵn sàng cho sản xuất với CVE tối thiểu, được làm mới hàng ngày bằng cách sử dụng Chainguard’s apko và các gói Wolfi. Bằng cách chỉ bao gồm các gói cần thiết, những hình ảnh này duy trì một bề mặt tấn công giảm và thường không có hoặc gần như không có lỗ hổng.

Hình Ảnh Có Sẵn

ImageLệnh PullShellSử Dụng
Pythondocker pull ghcr.io/rtvkiz/minimal-python:latestNoỨng dụng Python, microservices
Node.jsdocker pull ghcr.io/rtvkiz/minimal-node:latestYesỨng dụng Node.js, JavaScript
Bundocker pull ghcr.io/rtvkiz/minimal-bun:latestNoRuntime JavaScript/TypeScript nhanh
Godocker pull ghcr.io/rtvkiz/minimal-go:latestNoPhát triển Go, CGO builds
Nginxdocker pull ghcr.io/rtvkiz/minimal-nginx:latestNoProxy ngược, tệp tĩnh
HTTPDdocker pull ghcr.io/rtvkiz/minimal-httpd:latestMaybe*Máy chủ web Apache
Jenkinsdocker pull ghcr.io/rtvkiz/minimal-jenkins:latestYesTự động hóa CI/CD
Redis-slimdocker pull ghcr.io/rtvkiz/minimal-redis-slim:latestNoKho dữ liệu trong bộ nhớ
PostgreSQL-slimdocker pull ghcr.io/rtvkiz/minimal-postgres-slim:latestNoCơ sở dữ liệu quan hệ

*HTTPD, Jenkins, Node.js có thể bao gồm shell (sh, busybox) thông qua phụ thuộc Wolfi chuyển tiếp. CI xử lý sự hiện diện shell như thông tin.

Tại Sao Điều Này Quan Trọng

Các lỗ hổng container là một vector tấn công hàng đầu. Phần lớn các hình ảnh cơ bản có hàng tá CVE chưa được vá:

Traditional images:     Your containers:
┌──────────────────┐    ┌──────────────────┐
│ debian:latest    │    │ minimal-python   │
│ 127 CVEs         │    │ 0-5 CVEs         │
│ Patched: ~30 days│    │ Patched: <48 hrs │
└──────────────────┘    └──────────────────┘

Tác Động:

Khởi Đầu Nhanh

# Python - chạy ứng dụng của bạn
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-python:latest /app/main.py

# Node.js - chạy ứng dụng của bạn
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node:latest index.js

# Bun - runtime JavaScript nhanh
docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version

# Go - build ứng dụng của bạn
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app .

# Nginx - proxy ngược
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-nginx:latest

# HTTPD - phục vụ nội dung tĩnh
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest

# Jenkins - CI/CD controller
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest

# Redis - kho dữ liệu trong bộ nhớ
docker run -d -p 6379:6379 ghcr.io/rtvkiz/minimal-redis-slim:latest

# PostgreSQL - cơ sở dữ liệu quan hệ
docker run -d -p 5432:5432 -v pgdata:/var/lib/postgresql/data ghcr.io/rtvkiz/minimal-postgres-slim:latest

Đặc Điểm Hình Ảnh

ImageVersionUserEntrypointWorkdir
Python3.13.xnonroot (65532)/usr/bin/python3/app
Node.js22.x LTSnonroot (65532)/usr/bin/dumb-init -- /usr/bin/node/app
Bunlatestnonroot (65532)/usr/bin/bun/app
Go1.25.xnonroot (65532)/usr/bin/go/app
Nginxmainlinenginx (65532)/usr/sbin/nginx -g "daemon off;"/
HTTPD2.4.xwww-data (65532)/usr/sbin/httpd -DFOREGROUND/var/www/localhost/htdocs
Jenkins2.541.x LTSjenkins (1000)tini -- java -jar jenkins.war/var/jenkins_home
Redis8.4.xredis (65532)/usr/bin/redis-server/
PostgreSQL18.xpostgres (70)/usr/bin/postgres/

Hình Ảnh Được Xây Dựng Như Thế Nào

┌─────────────────────────────────────────────────────────────────────┐
│                         BUILD PIPELINE                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  Package Source            Image Assembly           Verification    │
│  ──────────────           ──────────────           ──────────────   │
│                                                                     │
│  ┌─────────────┐          ┌────────────┐          ┌────────────┐   │
│  │   Wolfi     │─────────▶│    apko    │─────────▶│   Trivy    │   │
│  │ (pre-built) │  install │ (OCI image)│  scan    │ (CVE gate) │   │
│  │ Python, Go, │          │            │          │            │   │
│  │ Node, etc.  │          │            │          │            │   │
│  └─────────────┘          └─────┬──────┘          └─────┬──────┘   │
│                                 │                       │          │
│  ┌─────────────┐                │                       ▼          │
│  │   melange   │────────────────┘              ┌────────────────┐  │
│  │ (Jenkins,   │  build from                   │ cosign + SBOM  │  │
│  │  Redis)     │  source                       │ (sign & publish│  │
│  └─────────────┘                               └────────────────┘  │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Lịch Cập Nhật

TriggerKhi nàoMục đích
ScheduledHàng ngày lúc 2:00 AM UTCNhận các bản vá CVE mới nhất từ Wolfi
PushTrên merge vào mainTriển khai các thay đổi cấu hình
ManualPhát hành thủ côngTái tạo gấp

Tất cả các bản xây dựng phải vượt qua cổng CVE (không có lỗ hổng ở mức CRITICAL/HIGH) trước khi công bố.

Xây Dựng Tại Chỗ

# Yêu cầu
cài đặt `chainguard.dev/apko@latest`
cài đặt `chainguard.dev/melange@latest`  # cần cho Jenkins, Redis
brew cài đặt trivy  # hoặc: apt cài đặt trivy

# Xây dựng tất cả hình ảnh
make build

# Xây dựng hình ảnh cụ thể
make python
make node
make bun
make go
make nginx
make httpd
make jenkins
make redis-slim
make postgres-slim

# Quét CVE
make scan

# Chạy thử nghiệm
make test

Cấu Trúc Dự Án

minimal/
├── python/apko/python.yaml       # Hình ảnh Python (Wolfi pkg)
├── node/apko/node.yaml           # Hình ảnh Node.js (Wolfi pkg)
├── bun/apko/bun.yaml             # Hình ảnh Bun (Wolfi pkg)
├── go/apko/go.yaml               # Hình ảnh Go (Wolfi pkg)
├── nginx/apko/nginx.yaml         # Hình ảnh Nginx (Wolfi pkg)
├── httpd/apko/httpd.yaml         # Hình ảnh HTTPD (Wolfi pkg)
├── jenkins/
│   ├── apko/jenkins.yaml         # Hình ảnh Jenkins
│   └── melange.yaml              # jlink JRE build
├── redis-slim/
│   ├── apko/redis.yaml           # Hình ảnh Redis
│   └── melange.yaml              # Redis source build
├── postgres-slim/apko/postgres.yaml  # Hình ảnh PostgreSQL (Wolfi pkg)
├── .github/workflows/
│   ├── build.yml                 # CI pipeline hàng ngày
│   ├── update-jenkins.yml        # Cập nhật phiên bản Jenkins
│   ├── update-redis.yml          # Cập nhật phiên bản Redis
│   └── update-wolfi-packages.yml # Cập nhật gói Wolfi
├── Makefile
└── LICENSE

Tính Năng Bảo Mật

Xác Minh Chữ Ký Hình Ảnh

Tất cả hình ảnh được ký bằng cosign không có khóa qua Sigstore. Để xác minh:

cosign verify \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp https://github.com/rtvkiz/minimal/ \
  ghcr.io/rtvkiz/minimal-python:latest

Thay thế minimal-python bằng tên hình ảnh bất kỳ. Kết quả thành công xác nhận rằng hình ảnh được xây dựng bởi CI của tư liệu này và chưa bị can thiệp.

Giấy Phép

Dự án này được cấp phép theo MIT License - xem tệp LICENSE để biết chi tiết.

Gói Bên Thứ Ba

Hình ảnh container bao gồm các gói từ Wolfi và các nguồn khác, mỗi gói với giấy phép riêng (Apache-2.0, MIT, GPL, LGPL, BSD, v.v.). Thông tin giấy phép đầy đủ được bao gồm trong SBOM của từng hình ảnh:

# Xem giấy phép gói trong một hình ảnh
cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'

Read Original (EN) Quay lại Newsletter