
ที่มาภาพ: Unknown Source
วิธียก OPA (Open Policy Agent) ไปทำ policy‑as‑code กับ GitHub Actions เพื่อตรวจสอบความสอดคล้องของ Terraform Plan อย่างอัตโนมัติและปลอดภัย
⚡ สรุป 30 วิ
การทำ *policy‑as‑code* ด้วย OPA (Open Policy Agent) ช่วยให้ทีม DevOps ตรวจสอบความสอดคล้องของโครงสร้างพื้นฐานได้โดยอัตโนมัติในขั้นตอน CI/CD ของ GitHub Actions. บทความนี้จะอธิบายวิธีตั้งค่า OPA ให้ตรวจส…
ภาพรวม — Overview
การทำ *policy‑as‑code* ด้วย OPA (Open Policy Agent) ช่วยให้ทีม DevOps ตรวจสอบความสอดคล้องของโครงสร้างพื้นฐานได้โดยอัตโนมัติในขั้นตอน CI/CD ของ GitHub Actions. บทความนี้จะอธิบายวิธีตั้งค่า OPA ให้ตรวจสอบ Terraform Plan เพื่อป้องกันการเปลี่ยนแปลงที่ละเมิดกฎบริษัทหรือมาตรฐานความปลอดภัย.
ความต้องการเบื้องต้น — Prerequisites
ก่อนเริ่ม คุณต้องมีสิ่งต่อไปนี้พร้อมใช้งาน:
- รีโพซิทอรีบน GitHub ที่ใช้ Terraform เพื่อจัดการโครงสร้างพื้นฐาน
- ไฟล์ *.tf* และ *.tfstate* ที่ถูกจัดเก็บในระบบเวอร์ชัน
- OPA ติดตั้งได้บนเครื่อง local หรือ Docker image
- สิทธิ์ในการเรียกใช้งาน GitHub Actions (workflow permission)
**Tip: ควรใช้ Terraform เวอร์ชัน 1.0 ขึ้นไปเพื่อให้รองรับการส่งออกแผนเป็น JSON อย่างเต็มที่.
สร้าง Policy ด้วย Rego — Write Policies in Rego
Rego เป็นภาษาที่ OPA ใช้กำหนดกฎ คุณสามารถเขียนไฟล์ *.rego* เพื่อตรวจสอบคุณสมบัติต่าง ๆ ของ Terraform Plan:
- **ตรวจสอบ Tag: บังคับให้ทุก Resource มี tag `environment` ที่ต้องเป็น `prod`, `staging` หรือ `dev`
- **จำกัดขนาด Instance: ไม่อนุญาตให้สร้าง EC2 instance ขนาด t2.micro ใน production
- ห้ามเปิด Port 22 ไปสู่ Internet: ตรวจสอบ security group rule
ตัวอย่างไฟล์ *terraform_policy.rego*:
```rego package terraform.policy
deny[msg] { input.resource_changes[_].type == "aws_instance" not input.resource_changes[_].change.after.tags.environment msg = "Missing required tag 'environment' on AWS instance." } ```
บันทึกไฟล์ในโฟลเดอร์ `opa/policies/` ของรีโพซิทอรี เพื่อให้ GitHub Actions สามารถดึงมาใช้ได้.
เตรียม Workflow ของ GitHub Actions — Setup GitHub Actions Workflow
ขั้นตอนที่ 1 — ตั้งค่า Job เริ่มต้น
```yaml name: Terraform Plan Validation
on: pull_request: paths:
- '/*.tf'
jobs: validate-plan: runs-on: ubuntu-latest ```
ขั้นตอนที่ 2 — เช็คเอาท์โค้ดและติดตั้งเครื่องมือ
```yaml steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Terraform
uses: hashicorp/setup-terraform@v2 with: terraform_version: 1.5.0
- name: Install OPA
run: | curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64_static chmod +x opa sudo mv opa /usr/local/bin/ ```
ขั้นตอนที่ 3 — สร้างและแปลง Terraform Plan เป็น JSON
```yaml
- name: Terraform Init
run: terraform init -input=false
- name: Generate Plan (JSON)
id: plan run: | terraform plan -out=tfplan.binary terraform show -json tfplan.binary > tfplan.json ```
ขั้นตอนที่ 4 — รัน OPA ตรวจสอบ Policy
```yaml
- name: Run OPA policy check
id: opa run: | opa eval --data opa/policies --input tfplan.json "data.terraform.policy.deny" \ --format pretty > opa-result.txt cat opa-result.txt
- name: Fail on policy violation
if: success() && (steps.opa.outputs.stdout != ) run: exit 1 ```
**Warning: อย่าลืมตั้งค่า `continue-on-error: false` ให้แน่ใจว่าการละเมิดกฎทำให้ workflow หยุดทันที.
ตัวเลือกการรัน OPA — OPA Execution Options
| วิธี | รายละเอียด | ข้อดี | ข้อเสีย |
|---|---|---|---|
| OPA binary (เช่นขั้นตอนด้านบน) | ดาวน์โหลดและใช้ไฟล์ปฏิบัติการโดยตรง | ความเร็วสูง, ไม่ต้องพึ่ง Docker | ต้องจัดการเวอร์ชันด้วยตนเอง |
| OPA Docker image | รัน OPA ภายในคอนเทนเนอร์ | แยกสภาพแวดล้อม, ง่ายต่ออัปเดต | ใช้เวลาโหลด Image เพิ่มขึ้น |
| OPA GitHub Action (opa/opa-action) | Action สำเร็จรูปสำหรับ OPA | ลดโค้ดซ้ำ, ตั้งค่าง่าย | ความยืดหยุ่นจำกัดเมื่อเปรียบเทียบกับ CLI |
เลือกวิธีที่เหมาะสมตามขนาดทีมและความต้องการในการควบคุมเวอร์ชัน.
เคล็ดลับเพิ่มประสิทธิภาพ — Best Practices
- เก็บไฟล์ *.rego* ในโฟลเดอร์ `opa/policies` แล้วใช้ Git tag เพื่อทำ versioning ของกฎ
- ใช้ `terraform fmt -check` ร่วมกับ OPA เพื่อตรวจสอบรูปแบบโค้ดและนโยบายพร้อมกัน
- แยก Policy ตามโมดูล (เช่น network, compute) เพื่อให้ง่ายต่อการบำรุงรักษา
**Tip: หากต้องการทดสอบ Policy ก่อน commit ให้ตั้งค่า workflow แบบ `workflow_dispatch` เพื่อรันด้วยตนเอง
การจัดการผลลัพธ์และแจ้งเตือน — Handling Results & Notifications
- ใช้ขั้นตอน `actions/upload-artifact@v3` เพื่อเก็บไฟล์ `opa-result.txt` เป็น artifact ของ run
- เชื่อมต่อกับ Slack หรือ Microsoft Teams ผ่าน webhook ใน step ที่ตรวจสอบผลเพื่อส่งข้อความแจ้งเมื่อตรวจพบการละเมิด
```yaml
- name: Notify on violation
if: failure() uses: slackapi/[email protected] with: payload: | { "textOPA policy violation detected in PR #${{ github.event.pull_request.number }}." } ```
สรุป — Summary
การผสาน OPA เข้ากับ GitHub Actions ทำให้การตรวจสอบ Terraform Plan เป็นอัตโนมัติและปลอดภัยยิ่งขึ้น. ขั้นตอนหลักประกอบด้วย:
- เตรียม Policy ด้วย Rego และเก็บไว้ในโฟลเดอร์ `opa/policies`
- สร้าง workflow ที่ติดตั้ง Terraform, OPA และแปลง Plan เป็น JSON
- รัน OPA เพื่อตรวจสอบนโยบายและทำให้ build ล้มเหลวเมื่อพบการละเมิด
- ใช้เครื่องมือแจ้งเตือนเพื่อสื่อสารผลลัพธ์กับทีม
สิ่งที่ควรจำ
- Policy‑as‑code ช่วยลดความผิดพลาดมนุษย์ในขั้นตอน CI/CD
- เลือกวิธีรัน OPA ที่เหมาะสม (binary, Docker, หรือ Action) ตามสภาพแวดล้อมของทีม
- อย่าลืมบันทึกผลการตรวจสอบเป็น artifact และแจ้งเตือนผู้รับผิดชอบทันที
ด้วยการตั้งค่าเหล่านี้ ทีมคุณจะมั่นใจได้ว่าการเปลี่ยนแปลงโครงสร้างพื้นฐานผ่าน Terraform จะสอดคล้องกับมาตรฐานความปลอดภัยและกฎระเบียบขององค์กรโดยอัตโนมัติ.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธียก OPA (Open Policy Agent) ไปทำ policy‑as‑code กับ GitHub Actions เพื่อตรวจสอบความสอดคล้องของ Terraform Plan อย่างอัตโนมัติและปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 8 สิงหาคม 2569 เวลา 10:50



