Hook

Hook infra: ตรวจหาการตั้งค่า IaC ที่ผิดพลาด

สแกน Terraform, Dockerfile และ GitHub Actions หาการตั้งค่าที่ผิดพลาด หรือประเมินโค้ดตัวอย่างชิ้นเดียว ได้จากบรรทัดคำสั่ง

hook infra ชี้ว่าเป็นปัญหาเมื่อพบ การตั้งค่า infrastructure-as-code ที่ผิดพลาด ซึ่งตัดสินได้จากไฟล์เพียงอย่างเดียว: เครือข่ายที่เปิดสู่ทั้งโลก สิทธิ์แบบ wildcard secret ใน manifest คอนเทนเนอร์ที่รันด้วย root หรือค่าที่ไม่น่าเชื่อถือใน shell ของ CI hook นี้อ่านเฉพาะไฟล์ IaC (.tf/.tf.json/.hcl, Dockerfile*, .github/workflows/**) และเป็นเอนจินแบบ deterministic เบื้องหลัง ความรู้เฉพาะทาง infra ในโหมด scan หรือ check

การรัน​

npx lagune read infra # scans every IaC file
npx lagune read infra --dir infra # scans a directory
npx lagune read infra --file Dockerfile # scans a single file

การสแกนพิมพ์ผลออกมาได้สูงสุดสองส่วน Infrastructure risks found ทำให้จบการทำงานด้วย exit code ที่ไม่ใช่ศูนย์ และแสดงข้อบกพร่องที่ตัดสินได้ (ingress 0.0.0.0/0 บนพอร์ตที่อ่อนไหว statement ของ IAM แบบ wildcard secret ใน manifest encrypted = false โมดูล git ที่ไม่ได้ตรึงเวอร์ชัน image ที่ระบุให้รันด้วย root อย่างชัดเจน curl | sh การ inject สคริปต์ใน CI และ permissions: write-all) ส่วน Infrastructure hardening advisories ไม่เปลี่ยน exit code (base tag ที่เปลี่ยนแปลงได้ หรือ action ที่ตรึงด้วย tag) การรันที่ไม่พบปัญหาจะพิมพ์ no infrastructure risks found

วิธีอ่านผลตัดสิน​

โหมด check พิมพ์ tag ที่มีระดับความรุนแรงสูงสุดที่ตรงกัน (เช่น public-ingress, iam-wildcard, root-user, curl-pipe, script-injection, write-all) tag ระดับคำแนะนำ (mutable-tag, unpinned-action) หรือ safe มีเพียง tag ระดับข้อตรวจพบเท่านั้นที่ทำให้จบการทำงานด้วย exit code ที่ไม่ใช่ศูนย์

ตัวเลือก CLI​

ตัวเลือกค่าคำอธิบาย
--patternโค้ดตัวอย่างตรวจโค้ดตัวอย่างหนึ่งชิ้น ต้องใช้คู่กับ --kind ใส่ซ้ำเพื่อตรวจหลายชิ้น
--kindterraform | dockerfile | github-actionsชนิดที่ใช้ตัดสินโค้ดตัวอย่าง
--dirไดเรกทอรีจำกัดการสแกนไว้ที่ไดเรกทอรีเดียว ใช้ซ้ำได้และใช้ร่วมกับ --file ได้
--fileไฟล์จำกัดการสแกนไว้ที่ไฟล์เดียว ใช้ซ้ำได้และใช้ร่วมกับ --dir ได้

หากไม่ระบุตัวเลือก hook จะสแกนไฟล์ IaC ทุกไฟล์ในโปรเจกต์ --pattern ใช้ร่วมกับ --dir หรือ --file ไม่ได้

เลือกสิ่งที่จะสแกน​

hook นี้ข้ามสิ่งที่ Git ละเว้นไว้ หากต้องการข้ามมากกว่านั้น หรือต้องการสแกนสิ่งที่ Git ละเว้นไว้ ให้กำหนดการตั้งค่าเฉพาะของ infra เอง:

npx lagune write add --ignore examples --checker infra
{
"checkers": {
"infra": { "gitignore": false, "ignore": ["examples"] }
}
}

กำหนดค่า hook อธิบายการตั้งค่าทั้งหมด

tip

hook จับกรณีที่ชัดเจนและตัดสินได้: การไม่มีการเข้ารหัส ความเสี่ยงจาก pull_request_target และขอบเขต IAM ที่เหมาะสม เป็นเรื่องที่ต้องใช้วิจารณญาณ ซึ่ง ความรู้เฉพาะทาง infra ยังคงดูแลอยู่

คำถามที่พบบ่อย

Terraform/HCL (.tf, .tf.json, .hcl), Dockerfile และไฟล์ YAML ของ workflow และ action ของ GitHub Actions ใต้ .github/ hook นี้เข้าถึงไฟล์เหล่านั้นได้ แม้ตัวสแกนซอร์สโค้ดจะข้ามไฟล์เหล่านั้นไป