วิธีติดตั้งและกำหนดค่า Trivy สแกนคอนเทนเนอร์อิมเมจใน GitHub Actions อย่างปลอดภัย

ที่มาภาพ: 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

คุณสมบัติTrivyClairAnchore Engine
การติดตั้งเพียง 1 คำสั่งต้องรันเซิร์ฟเวอร์หลายคอมโพเนนท์มี UI เพิ่มเติมแต่ซับซ้อน
รองรับ registryDocker, OCI, ECR, GCR, GHCRDocker 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

Related

บทความที่เกี่ยวข้อง

วิธีตั้งค่า Sandboxed Python Environment ด้วย pyenv‑virtualenv บน Windows เพื่อความปลอดภัยGrowth
21 สิงหาคม 2569 เวลา 18:30

วิธีตั้งค่า Sandboxed Python Environment ด้วย pyenv‑virtualenv บน Windows เพื่อความปลอดภัย

การสร้างสภาพแวดล้อม Python ที่ทำงานแบบ sandboxed ช่วยให้คุณรันโค้ดจากแหล่งที่ไม่เชื่อถือได้โดยไม่เสี่ยงต่อระบบหลักของ Windows ​คอมพิวเตอร์ ​บทความนี้จะแนะนำวิธีตั้งค่า **pyenv‑virtualenv** บน Windows…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีตั้งค่า Git Hook เพื่อตรวจสอบคุณภาพโค้ดก่อน Commit อย่างปลอดภัยGrowth
21 สิงหาคม 2569 เวลา 12:30

วิธีตั้งค่า Git Hook เพื่อตรวจสอบคุณภาพโค้ดก่อน Commit อย่างปลอดภัย

Git Hook คือสคริปต์ที่ทำงานอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่างในระบบเวอร์ชันคอนโทรล เช่น `pre‑commit` หรือ `post‑merge` การใช้ Hook ช่วยให้เราตรวจสอบคุณภาพโค้ดก่อนที่การเปลี่ยนแปลงจะถูกบันทึกเข้าสู่ r…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่า Windows Terminal พร้อมโปรไฟล์ PowerShell เพื่อเพิ่มประสิทธิภาพการทำงานGrowth
21 สิงหาคม 2569 เวลา 11:00

วิธีตั้งค่า Windows Terminal พร้อมโปรไฟล์ PowerShell เพื่อเพิ่มประสิทธิภาพการทำงาน

การใช้ Windows Terminal ร่วมกับ PowerShell เป็นวิธีที่ทำให้การทำงานบนคอมพิวเตอร์เร็วขึ้นและเป็นระเบียบมากยิ่งขึ้น บทความนี้จะแนะนำขั้นตอนตั้งค่าโปรไฟล์ PowerShell อย่างละเอียด เพื่อเพิ่มประสิทธิภาพในก…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีเชื่อมต่อ Google Cloud BigQuery กับ Power BI โดยใช้ Direct Query อย่างปลอดภัยGrowth
20 สิงหาคม 2569 เวลา 18:30

วิธีเชื่อมต่อ Google Cloud BigQuery กับ Power BI โดยใช้ Direct Query อย่างปลอดภัย

การเชื่อมต่อ Google Cloud BigQuery กับ Power BI ด้วยโหมด **Direct Query** ช่วยให้ผู้ใช้สามารถดึงข้อมูลสดจากคลังข้อมูลขนาดใหญ่ได้โดยไม่ต้องทำการนำเข้าข้อมูลลงเครื่องมือ BI อีกครั้ง ทำให้งานรายงานเป็นแบ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
คัดลอกลิงก์แล้ว!