
ที่มาภาพ: Unknown Source
วิธีติดตั้งและกำหนดค่า Trivy สแกนคอนเทนเนอร์อิมเมจใน GitHub Actions อย่างปลอดภัย
⚡ สรุป 30 วิ
การสแกนคอนเทนเนอร์อิมเมจในขั้นตอน CI/CD ช่วยให้เจอช่องโหว่ก่อนที่ซอฟต์แวร์จะไหลเข้าสู่ production Trivy เป็นเครื่องมือสแกนแบบโอเพ่นซอร์สที่ทำงานเร็วและรองรับหลายรูปแบบของ image registry. ในบทความนี้เร…
Overview — Overview
การสแกนคอนเทนเนอร์อิมเมจในขั้นตอน CI/CD ช่วยให้เจอช่องโหว่ก่อนที่ซอฟต์แวร์จะไหลเข้าสู่ production Trivy เป็นเครื่องมือสแกนแบบโอเพ่นซอร์สที่ทำงานเร็วและรองรับหลายรูปแบบของ image registry. ในบทความนี้เราจะมาดูวิธีติดตั้ง Trivy ภายใน GitHub Actions พร้อมการกำหนดค่าที่ปลอดภัย เพื่อให้ pipeline ของคุณตรวจจับช่องโหว่ได้อย่างต่อเนื่อง
Prerequisites — Prerequisites
ก่อนเริ่มต้องมีสิ่งต่อไปนี้พร้อมใช้งาน
- Repository บน GitHub ที่เปิดใช้ GitHub Actions
- Docker หรือ Podman ติดตั้งในเครื่องพัฒนา (เพื่อสร้าง image ก่อนอัพโหลด)
- สิทธิ์ write หรือ admin ใน repository เพื่อเพิ่ม workflow file
**Tip: ควรแยก token สำหรับการดึง image ออกจาก token ของผู้ใช้ทั่วไป เพื่อลดความเสี่ยงจากการละเมิดสิทธิ์
Install Trivy — Install Trivy
ขั้นตอนแรกคือให้ GitHub Actions ดาวน์โหลดและติดตั้ง Trivy ก่อนทำงานสแกน
- **ขัั้นที่ 1: ใช้ action `actions/setup-go` เพื่อติดตั้ง Go runtime (Trivy พัฒนาด้วย Go)
- **ขัั้นที่ 2: ดึง binary ของ Trivy จาก GitHub releases ด้วย `curl -L` หรือใช้ Docker image `aquasec/trivy:latest`
- **ขัั้นที่ 3: ตรวจสอบเวอร์ชันโดยรัน `trivy --version` เพื่อยืนยันการติดตั้งสำเร็จ
ข้อควรระวัง อย่าเรียกใช้ `curl` จากแหล่งที่ไม่เป็นทางการ เพราะอาจทำให้ binary ถูกดัดแปลงได้
Configure GitHub Action — Configure GitHub Action
สร้างไฟล์ workflow ที่สแกน image หลังขั้นตอน build
```yaml name: Scan Container Image
on: push: branches: [ main ] pull_request:
jobs: trivy-scan: runs-on: ubuntu-latest steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v4 with: go-version: '1.22'
- name: Install Trivy
run: | curl -sSfL https://github.com/aquasecurity/trivy/releases/latest/download/trivy_$(uname -s)_$(uname -m).tar.gz | tar zx -C /usr/local/bin trivy
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Scan image with Trivy
env: TRIVY_DB_REPOSITORY: https://github.com/aquasecurity/trivy-db.git run: | trivy image --severity HIGH,CRITICAL --exit-code 1 myapp:${{ github.sha }} ```
Key Points — Key Points
- ใช้ `--severity` กำหนดระดับความรุนแรงที่ต้องตรวจจับ เพื่อลด noise จากช่องโหว่ระดับต่ำ
- `--exit-code 1` ทำให้ workflow ล้มเหลวเมื่อพบช่องโหว่ระดับที่กำหนด ช่วยบังคับทีมแก้ไขก่อน merge
Secure Settings — Secure Settings
การตั้งค่าอย่างปลอดภัยช่วยป้องกันข้อมูลรั่วไหลและลดความเสี่ยงจากอ attacker
- เก็บ TRIVY_USERNAME และ TRIVY_PASSWORD ใน GitHub Secrets หากสแกน image ที่อยู่ใน private registry
- ตั้งค่า `permissions: contents: read` ให้ workflow มีสิทธิ์อ่าน repository เท่านั้น ไม่ต้องการ write
- ใช้ `actions/cache@v3` เพื่อแคชฐานข้อมูลของ Trivy ระหว่างรัน ลดจำนวนการดึง DB จากอินเทอร์เน็ต
```yaml
- name: Cache Trivy DB
uses: actions/cache@v3 with: path: ~/.cache/trivy key: trivy-db-${{ runner.os }}-${{ hashFiles('/trivy.yaml') }} ```
Comparison Table — Comparison
| คุณสมบัติ | Trivy | Clair | Anchore Engine |
|---|---|---|---|
| การติดตั้ง | เพียง 1 คำสั่ง | ต้องรันเซิร์ฟเวอร์หลายคอมโพเนนท์ | มี UI เพิ่มเติมแต่ซับซ้อน |
| รองรับ registry | Docker, OCI, ECR, GCR, GHCR | Docker Registry เท่านั้น | รองรับหลายประเภท |
| เวลาสแกน | 10‑30 วินาทีต่อ image (ขนาดกลาง) | 1–2 นาที | ขึ้นกับการตั้งค่า |
| การอัปเดต DB | อัตโนมัติหรือด้วย `trivy db update` | ใช้ ClairDB แยก | ต้องทำ cron job |
**Tip: หากต้องสแกนหลายร้อย image ต่อวัน Trivy จะให้ประสิทธิภาพดีกว่า Clair เนื่องจากไม่มีการตั้งค่าเซิร์ฟเวอร์แยก
Best Practices — Best Practices
- สแกน ก่อนและหลัง การทำขั้นตอน build เพื่อจับช่องโหว่ที่อาจถูกเพิ่มระหว่างขั้นตอนต่าง ๆ
- กำหนด policy ที่ชัดเจน เช่น ไม่อนุญาตให้ผ่าน image ที่มี CVE ระดับ CRITICAL หรือ HIGH อย่างใดอย่างหนึ่ง
- ตรวจสอบผลลัพธ์ของ Trivy เป็นไฟล์ JSON แล้วส่งต่อไปยังระบบจัดการข้อบกพร่อง (เช่น Jira) ด้วย webhook
Summary — Summary
สรุปขั้นตอนสำคัญที่ควรจำ
- ติดตั้ง Trivy ภายใน workflow โดยใช้ `curl` หรือ Docker image อย่างปลอดภัย
- กำหนดระดับ severity ที่ต้องตรวจจับและให้ workflow ล้มเหลวเมื่อพบช่องโหว่สำคัญ
- เก็บ credential ของ registry ใน GitHub Secrets และกำหนดสิทธิ์ workflow ให้จำกัดเพียง read‑only
- แคชฐานข้อมูล Trivy เพื่อเร่งความเร็วและลดการดาวน์โหลดจากอินเทอร์เน็ต
ด้วยการตั้งค่าเหล่านี้ คุณจะได้ pipeline ที่ตรวจจับช่องโหว่ของคอนเทนเนอร์อิมเมจอย่างต่อเนื่องและปลอดภัย ลดความเสี่ยงที่ซอฟต์แวร์ของคุณจะถูกโจมตีในสภาพแวดล้อม production.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีติดตั้งและกำหนดค่า Trivy สแกนคอนเทนเนอร์อิมเมจใน GitHub Actions อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 8 สิงหาคม 2569 เวลา 17:50



