1. บทนำ
ในยุคดิจิทัลที่ containerization ได้กลายเป็นส่วนสำคัญของ modern architecture การรักษาความปลอดภัย container images จึงเป็นสิ่งที่หลีกเลี่ยงไม่ได้ Docker Scout เป็นเครื่องมือที่ Docker Inc. พัฒนาขึ้นมา พัฒนาขึ้นมา สำหรับการวิเคราะห์ความปลอดภัยของ container images โดยพร้อมกันด้วยคุณสมบัติที่ครอบคลุมที่สุดในตลาดปัจจุบัน
Docker Scout ไม่เพียงแต่สแกนหา Common Vulnerabilities and Exposures (CVE) อย่างเดียว แต่ยังให้ Software Bill of Materials (SBOM) และ Container Provenance Data ซึ่งช่วยให้ผู้ใช้สามารถติดตามต้นกำเนิดของ container images และประกอบการตัดสินใจด้านความปลอดภัยได้อย่างแม่นยำ
บทความนี้จะพาคุณไปรู้จักกับ Docker Scout อย่างลึกซึ้ง ตั้งแต่การติดตั้ง การใช้งานพื้นฐาน ไปจนถึงการรวมเข้ากับ CI/CD pipeline และการประยุกต์ใช้งานในบริบทของประเทศไทย
2. คุณสมบัติเด่นของ Docker Scout
CVE Scanning
สแกนหาช่องโหว่ใน container images อย่างละเอียด ครอบคลุมทั้ง OS packages และ application dependencies พร้อมให้ข้อมูลรุนแรงของแต่ละ CVE แบบ real-time
SBOM (Software Bill of Materials)
สร้างรายงานแสดงส่วนประกอบทั้งหมดของ container แบบ detailed ตามมาตรฐาน CycloneDX หรือ SPDX ช่วยให้ติดตาม dependencies และ license compliance ได้ง่าย
Provenance
ตรวจสอบต้นกำเนิดของ container images อย่างแม่นยำ ตั้งแต่ source code ผ่าน build process จนถึง deploy environment ช่วยป้องกัน supply chain attacks
Recommendations
ให้คำแนะนำการแก้ไขช่องโหว่แบบเฉพาะเจาะจง พร้อมให้ reference ไปยัง Dockerfile ที่แนะนำ ทำให้ทีมพัฒนาสามารถนำไปปรับปรุงได้ทันที
Architecture Overview
3. การติดตั้งและตั้งค่าเริ่มต้น
3.1 ข้อกำหนดเบื้องต้น
-
Docker Engine เวอร์ชัน 20.10 ขึ้นไป
-
Docker Desktop เวอร์ชัน 4.15 ขึ้นไป (สำหรับ Window/Mac)
-
Docker Hub Account บัญชีฟรีหรือ Pro plan
-
Docker CLI ติดตั้งแล้วบนระบบของคุณ
3.2 ขั้นตอนการติดตั้ง
Docker Scout ถูกผนวกรวมเข้ากับ Docker CLI แล้วตั้งแต่เวอร์ชัน 20.10 ดังนั้นคุณไม่จำเป็นต้องติดตั้งแยกต่างหาก
# ตรวจสอบ Docker CLI พร้อมใช้งาน
$ docker --version
Docker version 24.0.5, build ced0996
# ตรวจสอบ Docker Scout plugin
$ docker scout --version
Docker Scout version v1.7.0+docker1
# เข้าสู่ระบบ Docker Hub (จำเป็นสำหรับฟีเจอร์บางอย่าง)
$ docker login
# ป้อน Docker Hub username และ password
หลังจาก login แล้ว คุณสามารถใช้ Docker Scout ได้ทันที
# ดูคำสั่งที่มีทั้งหมด
$ docker scout --help
# ดูคำสั่งย่อยที่มี
$ docker scout cves --help
$ docker scout sbom --help
$ docker scout provenance --help
$ docker scout recommendations --help
3.3 การตั้งค่า Environment Variables (Optional)
สำหรับผู้ที่ต้องการตั้งค่าล่วงหน้าเพื่อความสะดวกในการใช้งาน:
# ตั้งค่า Docker Hub username (สำหรับผู้ที่ใช้ Docker Hub)
export DH_USER="your-dockerhub-username"
# ตั้งค่า environment สำหรับ CI/CD
export SCOUT_ENV="production"
export SCOUT_ORGANIZATION="your-organization"
4. วิธีใช้งาน Docker Scout (Usage Examples)
4.1 สแกนช่องโหว่ (CVE Scanning)
คำสั่งพื้นฐานในการสแกนช่องโหว่ใน container image ที่คุณสร้างหรือ pull มาแล้ว
# สแกน image ที่มีอยู่ใน local (ชื่อ image:tag)
$ docker scout cves nginx:1.25
# สแกน image จาก Docker Hub
$ docker scout cves redis:7-alpine
# สแกน image ที่ build แล้วพร้อม tag ใหม่
$ docker build -t myapp:1.0 .
$ docker scout cves myapp:1.0
# สแกน image จาก registry อื่น
$ docker pull gcr.io/my-project/myapp:latest
$ docker scout cves gcr.io/my-project/myapp:latest
ผลลัพธ์ตัวอย่าง:
4.2 สร้าง SBOM (Software Bill of Materials)
คำสั่งในการสร้างรายงาน SBOM สำหรับ container image:
# สร้าง SBOM ในรูปแบบ JSON (CycloneDX)
$ docker scout sbom myapp:1.0 --format json > sbom.json
# สร้าง SBOM ในรูปแบบ SPDX (JSON)
$ docker scout sbom myapp:1.0 --format spdx-json > sbom.spdx.json
# สร้าง SBOM และแสดงเป็น text summary
$ docker scout sbom myapp:1.0
# สร้าง SBOM แบบ interactive (view ใน terminal)
$ docker scout sbom myapp:1.0 -i
โครงสร้าง SBOM:
{
"bomFormat" : "CycloneDX",
"specVersion" : "1.4",
"metadata" : {
"component" : {
"name" : "myapp",
"version" : "1.0"
}
},
"components" : [
{
"name" : "openssl",
"version" : "1.1.1w"
},
{
"name" : "curl",
"version" : "7.88.1"
}
]
}
4.3 ตรวจสอบ Provenance
ตรวจสอบต้นกำเนิดของ container image สำหรับการยืนยันความน่าเชื่อถือ:
# ตรวจสอบ provenance ของ image
$ docker scout provenance myapp:1.0
# ตรวจสอบ provenance และแสดงรายละเอียด
$ docker scout provenance myapp:1.0 --details
# ตรวจสอบ provenance พร้อม verification
$ docker scout provenance myapp:1.0 --verify
4.4 รับคำแนะนำในการแก้ไข (Recommendations)
รับคำแนะนำการแก้ไขช่องโหว่แบบเฉพาะเจาะจง:
# รับคำแนะนำการแก้ไข
$ docker scout recommendations myapp:1.0
# รับคำแนะนำและแสดงเป็น HTML report
$ docker scout recommendations myapp:1.0 --format html > recommendations.html
# ดู recommendations แบบ interactive
$ docker scout recommendations myapp:1.0 -i
4.5 การเปรียบเทียบเวอร์ชัน (Version Comparison)
เปรียบเทียบช่องโหว่ระหว่างเวอร์ชันต่างๆ เพื่อดูว่าการอัปเดตช่วยลดช่องโหว่ได้มากน้อยเพียงใด:
# เปรียบเทียบ between two versions
$ docker scout cves myapp:1.0 --compare myapp:1.1
# ดูช่องโหว่ที่เพิ่มขึ้นในเวอร์ชันใหม่
$ docker scout cves myapp:1.1 --since myapp:1.0
# ดูการเปลี่ยนแปลงของ SBOM
$ docker scout sbom myapp:1.1 --compare myapp:1.0
5. การรวมเข้ากับ CI/CD Pipeline
5.1 GitHub Actions Integration
ตัวอย่าง GitHub Actions workflow ที่ใช้ Docker Scout:
name: Docker Scout Security Scan
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: myapp:${{ github.sha }}
- name: Run Docker Scout
uses: docker/scout-action@v1
with:
command: cves
image: myapp:${{ github.sha }}
format: sarif
output: docker-scout-results.sarif
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: docker-scout-results.sarif
- name: Fail build if critical vulnerabilities found
run: |
if docker scout cves myapp:${{ github.sha }} --fail-on=critical 2>&1 | grep -q "critical"; then
echo "Critical vulnerabilities detected!"
exit 1
fi
5.2 GitLab CI Integration
ตัวอย่าง GitLab CI configuration:
stages:
- build
- security
variables:
DOCKER image: myregistry/myapp
DOCKER Tag: $CI_COMMIT_SHA
build:
stage: build
image: docker:24.0.5
services:
- docker:24.0.5-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $DOCKER image:$DOCKER Tag .
- docker push $DOCKER image:$DOCKER Tag
security-scan:
stage: security
image: docker:24.0.5
services:
- docker:24.0.5-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $DOCKER image:$DOCKER Tag
- docker scout cves $DOCKER image:$DOCKER Tag --fail-on=critical
- docker scout sbom $DOCKER image:$DOCKER Tag --format json > sbom.json
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: always
- when: manual
5.3 Jenkins Integration
ตัวอย่าง Jenkins pipeline script:
pipeline {
agent any
stages {
stage("Build") {
steps {
withDockerContainer(image: "docker:24.0.5") {
sh """
docker build -t myapp:${BUILD_NUMBER} .
"""
}
}
}
stage("Security Scan") {
steps {
withDockerContainer(image: "docker:24.0.5") {
sh """
docker pull myapp:${BUILD_NUMBER}
docker scout cves myapp:${BUILD_NUMBER} --fail-on=critical
docker scout sbom myapp:${BUILD_NUMBER} --format json > sbom.json
docker scout recommendations myapp:${BUILD_NUMBER} --format html > report.html
"""
}
}
}
stage("Security Gate") {
steps {
script {
def result = sh(script: 'docker scout cves myapp:${BUILD_NUMBER} --json', returnStdout: true)
def json = readJSON text: result
if (json.summary.critical > 0 || json.summary.high > 2) {
error "Security gate failed: Too many vulnerabilities"
}
}
}
}
}
}
5.4 Bitbucket Pipelines Integration
ตัวอย่าง Bitbucket Pipelines configuration:
image: docker:24.0.5
pipelines:
default:
- step:
name: Build and Push Docker Image
services:
- docker
script:
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
- docker build -t myapp:$BITBUCKET_COMMIT .
- docker push myapp:$BITBUCKET_COMMIT
- step:
name: Security Scan with Docker Scout
services:
- docker
script:
- docker pull myapp:$BITBUCKET_COMMIT
- docker scout cves myapp:$BITBUCKET_COMMIT --fail-on=critical
- docker scout sbom myapp:$BITBUCKET_COMMIT --format json > sbom.json
- docker scout recommendations myapp:$BITBUCKET_COMMIT > recommendations.txt
- step:
name: Security Gate
script:
- docker pull myapp:$BITBUCKET_COMMIT
- |
if docker scout cves myapp:$BITBUCKET_COMMIT --json | grep -q '"critical": [1-9]'; then
echo "CRITICAL vulnerabilities found!"
exit 1
fi
definitions:
services:
docker:
memory: 3072
6. บริบทไทยและตัวอย่างการใช้งานในประเทศไทย
6.1 ความสำคัญสำหรับองค์กรไทย
ในบริบทของประเทศไทย การรักษาความปลอดภัยของ container images มีความสำคัญอย่างยิ่ง โดยเฉพาะสำหรับองค์กรที่ให้บริการด้านการเงิน การแพทย์ และรัฐบาล ซึ่งต้องปฏิบัติตามมาตรฐานความปลอดภัยที่เข้มงวด
การเงินและธนาคาร
ตรวจสอบช่องโหว่ใน container ที่ใช้ในระบบธนาคารออนไลน์และระบบชำระเงิน อิเล็กทรอนิกส์
การแพทย์และสุขภาพ
รักษาความปลอดภัยของข้อมูลผู้ป่วยในระบบ e-Health และระบบจัดการคลินิก
รัฐบาลและภาคสาธารณะ
ปฏิบัติตามมาตรฐาน ISO 27001 และมาตรฐานด้านcybersecurity ของสำนักงานพระพุทธศาสนาแห่งชาติ
Logistical และอีคอมเมิร์ซ
คุ้มครองข้อมูลลูกค้าและธุรกรรมในระบบ logistics และ e-commerce platform
6.2 ตัวอย่างการใช้งานจริงในองค์กรไทย
บริษัท FinTech ชื่อดัง
สถาบันการเงินดิจิทัลระดับประเทศ
โรงพยาบาลเอกชนใหญ่
ระบบ e-Health และ HIS
6.3 การแปลงหน่วยและค่าพื้นฐานที่ควรทราบ
สำหรับผู้ที่ยังไม่คุ้นเคยกับ Docker Scout นี่คือคำอธิบายของคำศัพท์ที่ใช้บ่อย:
CVE (Common Vulnerabilities and Exposures)
ระบบรหัสประจำช่องโหว่ความปลอดภัยที่เป็นที่ยอมรับในระดับสากล
CVSS (Common Vulnerability Scoring System)
ระบบการให้คะแนนความรุนแรงของช่องโหว่ (0-10)
SBOM (Software Bill of Materials)
รายการส่วนประกอบทั้งหมดของซอฟต์แวร์ (คล้าย slip ของอาหาร)
SLSA (Supply Chain Levels for Software Artifacts)
ระดับความปลอดภัยของ supply chain สำหรับซอฟต์แวร์
Provenance
ข้อมูลต้นทางและประวัติการสร้าง container image
Docker Hub
Registry ของ Docker สำหรับเก็บและแชร์ container images
7. Best Practices ในการใช้งาน Docker Scout
ใช้ใน CI/CD Pipeline
รวม Docker Scout เข้ากับ pipeline ทุกครั้งที่มีการ build หรือ deploy image เพื่อป้องกันไม่ให้ deploy image ที่มีช่องโหว่
ตั้ง Security Gate
กำหนด rule ว่าไม่ให้ deploy image ที่มีช่องโหว่ระดับ critical และจำกัดจำนวน high vulnerability
ใช้ SBOM สำหรับ Inventory
ใช้ SBOM เพื่อจัดการ inventory ของ software packages และติดตาม license compliance
ตรวจสอบ Provenance อย่างสม่ำเสมอ
ตรวจสอบ provenance ของ third-party images และ container images ที่มาจาก source ภายนอก
อัปเดต Docker Scout อย่างสม่ำเสมอ
อัปเดต Docker Scout ให้เป็นเวอร์ชันล่าสุดเพื่อให้ได้ database ของ CVE ล่าสุดและฟีเจอร์ใหม่ๆ
ใช้ Base Image ที่ปลอดภัย
เริ่มต้นด้วย base image ที่ได้รับการตรวจสอบแล้ว เช่น Docker Official Images หรือ images จากผู้ผลิตที่น่าเชื่อถือ
Pro Tip: การอ่านผลลัพธ์ของ Docker Scout
เมื่อคุณได้รับผลลัพธ์จากการสแกน อย่าเพียงแค่มองดูจำนวนช่องโหว่ แต่ให้พิจารณา:
- • CVE Score (CVSS): ดูคะแนนความรุนแรง ตั้งแต่ 0-10 ช่องโหว่ที่มีคะแนนสูงกว่า 7.0 ถือว่า High
- • PWNED: หากมีคำนี้หมายความว่าช่องโหว่นี้มีชุดการโจมตี (exploit) ที่ใช้ได้จริงแล้ว
- • Fix Available: ดูว่ามีการอัปเดต patch หรือไม่ ถ้ามีควรอัปเดตทันที
- • Base Image: ตรวจสอบว่าช่องโหว่มาจาก base image หรือ application layer
8. เปรียบเทียบ: Docker Scout vs Trivy
| หัวข้อ | Docker Scout | Trivy |
|---|---|---|
| พัฒนาโดย | Docker Inc. | Aqua Security |
| ประเภท | SaaS (Cloud-native) | Open Source / Commercial |
| การติดตั้ง | รวมกับ Docker CLI (ง่าย) | ต้องติดตั้งแยก (ซับซ้อนกว่า) |
| CVE Database | Docker Vulnerability Reporting (อัปเดตเร็ว) | Multi-source (NVD, RedHat, etc.) |
| SBOM Generation | Built-in | Built-in |
| Provenance | Built-in | ไม่มี (ต้องใช้ tool อื่น) |
| Integration | Docker native (ง่ายที่สุด) | Third-party tools (มาก variety) |
| ราคา | Free / Pro Plan ($4-8 ต่อ user/เดือน) | Free (Open Source) / Commercial ($20+/user/เดือน) |
| Recommended Use Case |
Docker native workflow
• ผู้ใช้ Docker ที่มีอยู่แล้ว
• องค์กรที่ต้องการ simplicity
|
Multi-cloud / Multi-container
• ผู้ใช้หลาย platform
• ต้องการ Customization สูง
|
Docker Scout Advantage
- ✓ ผนวกรวมกับ Docker CLI ได้ดีที่สุด
- ✓ มี Provenance ตรวจสอบต้นทาง image
- ✓ มี interface ที่ใช้งานง่าย
- ✓ Database อัปเดตเร็วจาก Docker Inc.
- ✓ มีRecommendations แบบเฉพาะเจาะจง
Trivy Advantage
- ✓ Free และ Open Source (ไม่เสียค่าใช้จ่าย)
- ✓ ครอบคลุมหลาย platform (Kubernetes, Cloud, etc.)
- ✓ ปรับแต่งได้มาก (Custom rules, config)
- ✓ มี community ที่แข็งแรง
- ✓ รองรับหลาย source ของ CVE
9. แก้ไขปัญหาที่พบบ่อย (Troubleshooting & FAQ)
ไม่สามารถใช้ docker scout ได้ หรือหา command ไม่เจอ
ปัญหา: เมื่อพิมพ์ docker scout แล้วได้ error:
docker: 'scout' is not a docker command.
วิธีแก้:
- ตรวจสอบเวอร์ชัน Docker CLI ของคุณ:
docker --versionควรเป็น 20.10 ขึ้นไป - ถ้าเวอร์ชันเก่า ให้อัปเดต Docker Desktop หรือ Docker CLI
- สำหรับ Linux:
sudo apt-get update && sudo apt-get install docker-ce-cli
Error: "authentication required"
ปัญหา: เมื่อใช้คำสั่ง docker scout ได้รับ error ว่าต้อง authentication
วิธีแก้:
# เข้าสู่ระบบ Docker Hub
$ docker login
# หรือถ้าใช้ Docker Hub Pro/Team
$ docker login --username your-username
ผลลัพธ์ไม่มีข้อมูลหรือว่างเปล่า
ปัญหา: เมื่อสแกน image แล้วไม่เจอข้อมูลใดๆ
สาเหตุที่เป็นไปได้:
- Image อาจไม่มี package ใดๆ (เช่น image เปล่าหรือ scratch)
- Image อาจเป็น multi-stage build ที่ไม่ได้ include package manager
- Docker Scout ไม่สามารถ read image ได้
วิธีแก้:
# ตรวจสอบว่า image มี package หรือไม่
$ docker run --rm -it your-image ls /usr/bin
# หรือลองสแกน image ที่มี package ชัดเจน
$ docker scout cves alpine:latest
ช่องโหว่ที่แสดงมีจำนวนมากเกินไป!
คำแนะนำ: อย่าเพียงแค่มองดูจำนวนช่องโหว่ ให้ดู:
1. Critical & High: แก้ไขทันที (ควรไม่มี)
2. Medium: วางแผนแก้ไขใน sprint ถัดไป
3. Low: อาจปล่อยไว้ชั่วคราว ถ้าไม่มีผลกระทบใหญ่
# ดูเฉพาะ critical ซึ่งควรแก้ไขทันที
$ docker scout cves your-image --severity=critical
# ดูเฉพาะ high ขึ้นไป
$ docker scout cves your-image --severity=high
# ดูเฉพาะ medium ขึ้นไป
$ docker scout cves your-image --severity=medium
ตัวอย่าง Dockerfile ที่ปลอดภัย (Best Practice)
ตัวอย่าง Dockerfile ที่ลดช่องโหว่ได้:
# ใช้ Base Image ที่ได้รับการตรวจสอบแล้ว
FROM python:3.11-slim
# ไม่ใช้ root
RUN useradd -m appuser
USER appuser
# ตั้งค่า working directory
WORKDIR /app
# Copy only needed files
COPY --chown=appuser requirements.txt .
COPY --chown=appuser app.py .
# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt
# ปล่อย port
EXPOSE 8080
# Command
CMD ["python", "app.py"]
* Docker Scout จะช่วยตรวจสอบว่า Dockerfile นี้มีปัญหาด้านความปลอดภัยหรือไม่เมื่อ build image แล้ว