ข้ามไปยังเนื้อหาหลัก

Trivy Security Scan (สแกนความปลอดภัยด้วย Trivy)

สแกนหาช่องโหว่ในซอร์สโค้ดหรือ container image ด้วย Trivy scanner พร้อมอัปโหลดหลักฐานผลสแกน

การอ้างอิง (Reference): loha/trivy-scan@v2

หมวดหมู่: Security (ความปลอดภัยและการสแกน)

รันไทม์ (Runtime): aquasec/trivy:0.58.0 (รันแบบ non-root, ตรึงด้วย digest)

สัญญาอนุญาต (License): Apache-2.0

ควรใช้เมื่อ​

ใช้เก็บหลักฐานและตรวจสอบความปลอดภัยใน pipeline: สามารถสแกนไฟล์ dependency lockfile ในโหมด fs หรือสแกน container image หลัง build ในโหมด image ทั้งนี้ หลักฐานที่ได้จัดเป็นข้อมูลที่ส่งขึ้นจาก pipeline ของลูกค้า (pipeline-uploaded) ซึ่งไม่สามารถใช้ทดแทนการสแกนระดับแพลตฟอร์มที่ Loha จัดการสำหรับบังคับใช้นโยบาย (policy enforcement) ของ workspace ได้

พารามิเตอร์​

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
SCAN_TYPEenum: fs, imagefsไม่ชนิดการสแกน: fs สำหรับตรวจ filesystem ในโค้ด หรือ image สำหรับตรวจ container image
SCAN_TARGETstring.ไม่เป้าหมายการสแกน: path ของโฟลเดอร์ในโหมด fs หรือชื่อ image reference ในโหมด image
WORKING_DIRECTORYstring.ไม่ไดเรกทอรีทำงานของ task โดยคิดเทียบจาก root ของ workspace
SCANNERSenum: vuln,secret, vuln,secret,misconfig, vuln,secret,license, vuln,secret,misconfig,licensevuln,secretไม่ประเภท scanner ของ Trivy ที่ต้องการเปิดใช้งาน (คั่นด้วยจุลภาค) เช่น vuln,secret และสามารถเพิ่ม misconfig หรือ license ได้

พื้นที่ทำงาน (Workspaces)​

  • source (จำเป็น): เชื่อมโยงจาก pipeline workspace source

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
SCAN_RESULTสถานะการเก็บหลักฐานผลสแกน: COMPLETED หรือ ERROR
REPORT_IDรหัสประจำตัว (ID) ของรายงานความปลอดภัยที่ collector ได้รับและบันทึกแล้ว
VULN_COUNTจำนวนช่องโหว่ (vulnerabilities) ทั้งหมดที่พบในรายงาน
CRITICAL_COUNTจำนวนช่องโหว่ระดับวิกฤต (CRITICAL) ที่พบ

การทำงาน​

รัน Trivy เวอร์ชันที่ตรึง digest โดยเปิดใช้งานประเภทการสแกนตาม SCANNERS อย่างชัดเจน จากนั้นระบบจะอัปโหลดผลลัพธ์ JSON ดิบผ่าน receipt ชั่วคราวที่ controller ออกให้ โดยข้อมูล receipt และ collector URL จะถูกส่งให้ผ่านระบบ Loha โดยตรง (ไม่ใช่พารามิเตอร์ของ task) ตัว collector จะทำการตรวจสอบความถูกต้องและตัดข้อมูลสำคัญ (เช่น secret, โทเค็น หรือโค้ดตัวอย่าง) ออกก่อนจัดเก็บ ค่า SCAN_RESULT จะแสดงเพียงว่าการเก็บหลักฐานสำเร็จหรือเกิดข้อผิดพลาด ซึ่งข้อมูลนี้มีสถานะเป็น pipeline_uploaded สำหรับการตรวจสอบและสังเกตการณ์เท่านั้น

ตัวอย่าง​

สแกน filesystem ของแอปพลิเคชันใน monorepo​

steps:
- name: scan-deps
uses: loha/trivy-scan@v2
with:
SCAN_TYPE: 'fs'
WORKING_DIRECTORY: 'apps/dashboard'
SCANNERS: 'vuln,secret'

สแกน container image ทันทีหลังขั้นตอน build​

steps:
- name: build
uses: loha/buildah-build@v1
with:
IMAGE: 'registry.example.com/my-org/app:${COMMIT_SHA}'

- name: scan-image
uses: loha/trivy-scan@v2
with:
SCAN_TYPE: 'image'
SCAN_TARGET: 'registry.example.com/my-org/app:${COMMIT_SHA}'
SCANNERS: 'vuln,secret,misconfig'

เลือกสแกนเพิ่มเติมทั้ง configuration และ license​

steps:
- name: scan-deps
uses: loha/trivy-scan@v2
with:
SCAN_TYPE: 'fs'
SCANNERS: 'vuln,secret,misconfig,license'

การแก้ปัญหา​

ปัญหา: task ส่งคืนผลลัพธ์เป็น SCAN_RESULT: ERROR

วิธีแก้: เกิดจาก scanner พบข้อผิดพลาด, ไม่สามารถเข้าถึงฐานข้อมูลช่องโหว่ได้, รูปแบบรายงานไม่ถูกต้อง หรือ collector ปฏิเสธการเชื่อมต่อ ให้ตรวจสอบการตั้งค่าระบบหรือเครือข่ายแล้วสั่ง retry ใหม่ (ห้ามเข้าใจผิดว่าสถานะ ERROR หมายถึงไม่พบช่องโหว่)


ปัญหา: ดาวน์โหลดฐานข้อมูลช่องโหว่ (CVE database) ไม่สำเร็จในการทำงานครั้งแรก

วิธีแก้: Trivy จำเป็นต้องเชื่อมต่ออินเทอร์เน็ตเพื่อดึงฐานข้อมูล vulnerability database หากคลัสเตอร์ปิดกั้นการเข้าถึงภายนอก (egress blocked) ให้ทำ pre-cache ฐานข้อมูลไว้ล่วงหน้าหรือใช้ internal mirror ภายในองค์กร


ปัญหา: นโยบายของ workspace บล็อกการปล่อยรีลีส ทั้งที่ task นี้ทำงานผ่านแล้ว

วิธีแก้: task นี้ให้ผลลัพธ์เป็นหลักฐานระดับ pipeline_uploaded เท่านั้น แต่นโยบายที่บังคับใช้จริงอาจต้องการหลักฐานระดับแพลตฟอร์ม (Loha-managed evidence) หรือขอยกเว้นตามขั้นตอน แนะนำให้ตรวจสอบการประเมินในหน้า Build Security ของ Loha