Docker Image Scanning เป็นกระบวนการที่สำคัญในการตรวจสอบ Docker Image เพื่อค้นหา Vulnerability ปัญหาด้าน Security และ Malware ก่อนที่จะนำไป Deploy ไปยัง Production Environment บทความนี้จะอธิบายถึง Best Practices และเครื่องมือต่างๆ สำหรับการ Scanning Docker Image ให้อย่างมีประสิทธิภาพ
Docker Image Scanning คืออะไร?
Docker Image Scanning หมายถึงการวิเคราะห์ Docker Image เพื่อค้นหา Vulnerabilities ข้อบกพร่อง และ Security Issues ต่างๆ ที่อาจมีอยู่ในเลเยอร์ของ Image โดยการสแกนนี้จะตรวจสอบจากฐานข้อมูล Vulnerability Database ที่มีการอัปเดตอย่างสม่ำเสมอ
วัตถุประสงค์หลักของการ Docker Image Scanning คือ:
- ค้นหา Known Vulnerabilities ในแพคเกจ Libraries และ Dependencies
- ตรวจสอบวัตถุดิบ Base Image ที่ใช้ในการสร้าง Container
- ป้องกันการนำ Malicious Code เข้า Production Environment
- ลดความเสี่ยงด้าน Security Breaches และ Data Leaks
เครื่องมือ Docker Image Scanning ยอดนิยม
มีเครื่องมือต่างๆ ที่ช่วยในการ Scanning Docker Image ดังต่อไปนี้:
- Trivy – Scanner ที่จัดการโดย Aqua Security มีประสิทธิภาพสูง ใช้งานง่าย สามารถสแกน Docker Image OS Packages และ Application Dependencies
- Grype – Vulnerability Scanner จาก Anchore ออกแบบมาเพื่อค้นหา Vulnerability ในระดับ OS และ Language-specific
- Docker Scout – เครื่องมือ Official ของ Docker มีการอินทิเกรต Container Image Security ที่ดีเยี่ยม
- Clair – Vulnerability Scanner ที่ออกแบบมาสำหรับการสแกน Container Image ในสภาวะ Registry
- Snyk – เครื่องมือที่สามารถสแกน Vulnerability และ License Issues ในแอปพลิเคชัน Dependencies
ตัวอย่างการใช้ Trivy Scanner
Trivy เป็นเครื่องมือที่นิยมใช้งานมากที่สุด เนื่องจากมีความเร็วและความแม่นยำสูง นี่คือขั้นตอนการติดตั้งและใช้งาน:
# ติดตั้ง Trivy
apt-get update
apt-get install wget
wget https://github.com/aquasecurity/trivy/releases/download/v0.48.0/trivy_0.48.0_Linux-64bit.deb
dpkg -i trivy_0.48.0_Linux-64bit.deb
# สแกน Docker Image อย่างง่าย
trivy image myapp:latest
# สแกนและส่งออกผลลัพธ์เป็น JSON
trivy image --format json --output results.json myapp:latest
# สแกนเฉพาะ Vulnerabilities ระดับ HIGH และ CRITICAL เท่านั้น
trivy image --severity HIGH,CRITICAL myapp:latest
# สแกนและหยุดถ้าพบ Critical Vulnerabilities
trivy image --exit-code 1 --severity CRITICAL myapp:latest
Best Practices สำหรับ Docker Image Scanning
- สแกนก่อนที่ Push ไป Registry – ตรวจสอบ Image ในแบบ Local ก่อนที่จะ Push ไปยัง Container Registry
- แก้ไข Vulnerabilities ทันที – เมื่อพบปัญหา ให้แก้ไข Dockerfile และสร้าง Image ใหม่
- รวม Scanning ใน CI/CD Pipeline – ทำให้กระบวนการ Automated และป้องกันการ Deploy แบบต่อเนื่อง
- ตั้ง Baseline และ Threshold – กำหนดระดับความรุนแรงที่ยอมรับได้ (Acceptable Risk Level)
- ตรวจสอบ Base Image อย่างสม่ำเสมอ – ใช้ Base Image ที่มีการอัปเดตอย่างสม่ำเสมอ
- มอนิตอร์ผลการสแกน – ติดตามผลการสแกน Vulnerabilities ที่พบใหม่อย่างต่อเนื่อง
- ใช้ Minimal Base Images – เลือก Alpine หรือ Distroless Images เพื่อลดจำนวน Vulnerabilities
การ Integration Scanning ใน CI/CD Pipeline
ตัวอย่างการรวม Docker Image Scanning ลงใน GitHub Actions Pipeline:
name: Docker Image Scanning
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker Image
run: |
docker build -t myapp:latest .
- name: Scan with Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myapp:latest'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Scan Results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
- name: Fail if Critical Vulnerabilities Found
run: |
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image --exit-code 1 --severity CRITICAL myapp:latest
การใช้ Dockerfile ที่ปลอดภัย
เพื่อให้ผ่านการ Scanning ได้ดีขึ้น ให้สร้าง Dockerfile ที่สมบูรณ์:
# ใช้ Minimal Base Image
FROM node:18-alpine3.18
# ตั้งค่า Non-root User
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
WORKDIR /app
# Copy Package Files
COPY package*.json ./
# ติดตั้ง Dependencies
RUN npm ci --only=production
# Copy Application Code
COPY --chown=nodejs:nodejs . .
# สลับไปใช้ Non-root User
USER nodejs
# Expose Port
EXPOSE 3000
# Health Check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node healthcheck.js
# Run Application
CMD ["node", "server.js"]
ความสำคัญของ Docker Image Scanning ในสภาวะจริง
ในการใช้งาน ผู้ให้บริการโฮสติ้ง Cloud VPS หรือ Cloud Hosting Service Docker Image Scanning จำเป็นอย่างยิ่ง เพื่อให้การ Deploy Application บน Infrastructure ของเรามีความปลอดภัยสูงสุด ด้วยการ Scanning ก่อน Deploy จะช่วยลดความเสี่ยงจากการถูก Attack หรือการถูก Compromise ของ Application ได้ในระดับสูง
ผู้ให้บริการโฮสติ้ง มี Cloud VPS ที่มี Performance สูง เหมาะสำหรับการ Deploy Container Application ที่ได้รับการ Scan และ Verify ผ่านแล้ว
สรุป
Docker Image Scanning เป็นส่วนสำคัญของ DevSecOps Pipeline ที่ไม่ควรมองข้าม การใช้เครื่องมือเช่น Trivy ร่วมกับ CI/CD Pipeline จะช่วยให้มั่นใจว่า Application ที่ Deploy ไป Production มีความปลอดภัยจากการโจมตีและ Vulnerability ต่างๆ
ด้วยการ Implement Best Practices ต่างๆ ที่กล่าวมา จะสามารถลดความเสี่ยงและเพิ่มความเชื่อมั่นในระบบงาน Container ของคุณได้ลำดับสำคัญ

