IT General
เอาแบบเข้าใจง่ายเลยนะน้อง DevSecOps Pipeline เนี่ย มันคือการเอา Security (ความปลอดภัย) เข้าไปฝังใน DevOps (การพัฒนาและดูแลระบบ) ตั้งแต่ต้นทางยันปลายทางเลย สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่องความปลอดภัยนี่สำคัญสุดๆ เพราะข้อมูลลูกค้ามัน sensitive มาก ถ้าโดนแฮกนี่จบเห่เลย
เมื่อก่อนเราทำแบบ Waterfall คือพัฒนาเสร็จค่อยมาเทสความปลอดภัย ซึ่งมันช้าและเปลืองงบมาก ถ้าเจอช่องโหว่ตอนสุดท้ายนี่ต้องรื้อ code กันใหม่หมด แต่ DevSecOps เนี่ย มันช่วยให้เราเจอช่องโหว่ตั้งแต่เนิ่นๆ ลดความเสี่ยงไปเยอะเลย แถมยังช่วยให้ปล่อย software ได้เร็วขึ้นด้วยนะ
ก่อนจะไปลงมือทำ DevSecOps Pipeline เราต้องมีพื้นฐานพวกนี้ก่อนนะ ไม่งั้นจะงงเต๊กเลย
อันนี้สำคัญมาก CI/CD คือหัวใจของ DevOps เลย มันคือการรวม code ของ developer หลายๆ คนเข้าด้วยกัน แล้วก็ build, test, deploy แบบอัตโนมัติ สมัยผมทำ SiamCafe เนี่ย เราใช้ Jenkins ในการทำ CI/CD ทำให้เรา deploy code ได้วันละหลายรอบเลย
ลองนึกภาพนะ ถ้าเราไม่มี CI/CD เราต้องมานั่ง merge code เอง, build เอง, test เอง, deploy เอง ทุกอย่าง manual หมด เสียเวลาสุดๆ แถม error เพียบ SiamCafe Blog มีบทความเรื่อง CI/CD อย่างละเอียด ลองไปอ่านดูนะ
DevSecOps มันต้องมีเครื่องมือช่วย ไม่งั้นเราจะรู้ได้ไงว่า code เรามันปลอดภัยรึเปล่า เครื่องมือที่ใช้กันบ่อยๆ ก็มีพวก Static Application Security Testing (SAST), Dynamic Application Security Testing (DAST), Software Composition Analysis (SCA) พวกนี้แหละ
SAST มันจะ scan code เราตั้งแต่ยังไม่ได้ run เพื่อหาช่องโหว่ DAST มันจะ scan ตอนที่ application เรา run อยู่ เพื่อดูว่ามีช่องโหว่อะไรบ้าง SCA มันจะเช็คว่า library ที่เราใช้มีช่องโหว่รึเปล่า
IaC คือการจัดการ infrastructure ด้วย code แทนที่จะมานั่ง clickๆ ใน console สมัยนี้เค้าใช้พวก Terraform หรือ Ansible กันเยอะแยะ IaC ช่วยให้เราสร้าง infrastructure ได้ซ้ำๆ กันได้อย่างรวดเร็ว แถมยังช่วยให้เราจัดการ security ได้ง่ายขึ้นด้วย
เอาล่ะ ทีนี้มาดูวิธีเริ่มต้นทำ DevSecOps Pipeline กันบ้าง ไม่ยากอย่างที่คิด แต่ต้องค่อยๆ เป็น ค่อยๆ ไปนะ
อย่างที่บอกไป DevSecOps มันต้องมีเครื่องมือช่วย เลือกเครื่องมือที่เหมาะกับทีมเรา และงบประมาณของเรา เริ่มจากตัวที่เราคุ้นเคยก่อนก็ได้ ไม่ต้องรีบร้อน
สมัยผมทำ SiamCafe เนี่ย เราเริ่มจากใช้ SonarQube ในการทำ SAST ก่อน เพราะมันฟรี แล้วก็ค่อยๆ เพิ่มเครื่องมืออื่นๆ เข้ามาทีหลัง
เอา security tools ที่เราเลือกไว้ มาฝังเข้าไปใน CI/CD Pipeline ของเรา เช่น หลังจาก build code เสร็จ ก็ให้ SAST scan code เลย ถ้าเจอช่องโหว่ ก็ให้ fail build ไปเลย ไม่ให้ code ที่มีช่องโหว่ deploy ได้
# Jenkinsfile example
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean install'
}
}
stage('SAST Scan') {
steps {
sh 'sonar-scanner -Dsonar.projectKey=my-project -Dsonar.sources=. -Dsonar.host.url=http://sonarqube:9000 -Dsonar.login=admin:admin'
}
}
stage('Deploy') {
when {
expression {
return sh(script: 'echo $?', returnStatus: true) == 0
}
}
steps {
sh 'echo "Deploying..."'
}
}
}
}
Code snippet ข้างบนเป็นตัวอย่าง Jenkinsfile ที่มีการ integrate SonarQube เข้าไปใน CI/CD Pipeline ถ้า SonarQube เจอช่องโหว่ Build จะ fail ทันที
DevSecOps มันต้อง automate ทุกอย่างที่เป็นไปได้ ตั้งแต่การ scan security, การสร้าง infrastructure, การ deploy code ยิ่งเรา automate ได้มากเท่าไหร่ เราก็จะยิ่งประหยัดเวลา และลดความผิดพลาดได้มากขึ้นเท่านั้น
สมัยผมทำ SiamCafe เนี่ย เราใช้ Ansible ในการ automate การสร้าง server และ deploy application ทำให้เรา deploy application ได้ภายในไม่กี่นาที
แน่นอนว่า DevSecOps ไม่ใช่ทางเลือกเดียวในการดูแลความปลอดภัยของ software แต่เป็นทางเลือกที่ดีที่สุดในยุคปัจจุบัน มาดูตารางเปรียบเทียบกับทางเลือกอื่นๆ กัน
| ทางเลือก | ข้อดี | ข้อเสีย | เหมาะกับใคร |
|---|---|---|---|
| Waterfall Security | ง่ายต่อการเข้าใจ | ช้า, เปลืองงบ, เจอช่องโหว่ตอนท้ายๆ | โครงการขนาดเล็ก ที่ไม่ต้องการความเร็ว |
| DevOps (ไม่มี Security) | เร็ว, คล่องตัว | เสี่ยงต่อการโดนแฮก, ข้อมูลรั่วไหล | Startup ที่เน้นความเร็วเป็นหลัก |
| DevSecOps | เร็ว, ปลอดภัย, ลดความเสี่ยง | ซับซ้อน, ต้องใช้เครื่องมือ | ทุกองค์กรที่ต้องการความปลอดภัยและความเร็ว |
จากตารางจะเห็นว่า DevSecOps เป็นทางเลือกที่ดีที่สุด เพราะมันผสมผสานความเร็วและความปลอดภัยเข้าด้วยกัน แต่ก็ต้องแลกมาด้วยความซับซ้อน และต้องใช้เครื่องมือ SiamCafe Blog มีบทความเรื่อง DevSecOps tools เยอะแยะ ลองไปหาอ่านดูนะ
เอาล่ะน้องๆ มาถึงตรงนี้แล้ว หวังว่าคงพอเห็นภาพ DevSecOps Pipeline กันบ้างแล้วนะ ทีนี้มาดู Best Practices หรือเคล็ดลับที่พี่บอมสั่งสมมาจากการทำร้านเน็ต (ที่ไม่ค่อยเกี่ยวเท่าไหร่ แต่เรื่อง IT มันเชื่อมกันหมดแหละ!) และประสบการณ์ IT กว่า 28 ปีกันบ้างดีกว่า
สมัยก่อนร้านเน็ตพี่เนี่ย โดน Hack บ่อยมาก! เพราะอะไร? เพราะเราไม่ได้ Security ตั้งแต่แรกไง! พอโดนแล้วค่อยมาแก้ มันสายไปแล้ว เสียทั้งเงิน เสียทั้งเวลา แถมเสียลูกค้าอีกต่างหาก DevSecOps ก็เหมือนกัน ต้องคิดเรื่อง Security ตั้งแต่เริ่ม Develop เลย
ต่อไปนี้เป็นเทคนิคที่พี่ว่าใช้ได้จริง และเอาไปปรับใช้ได้เลยนะ:
// ตัวอย่าง Code ที่มีการ Validate Input ตั้งแต่แรก
function processData(userInput) {
if (typeof userInput !== 'string' || userInput.length > 100) {
throw new Error("Invalid Input");
}
// ... process data ...
}
# ตัวอย่าง Jenkinsfile สำหรับ Automation
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean install'
}
}
stage('Security Scan') {
steps {
sh 'sonar-scanner'
}
}
stage('Deploy') {
steps {
sh 'kubectl apply -f deployment.yaml'
}
}
}
}
สมัยก่อนร้านเน็ตพี่ มีระบบแจ้งเตือนเวลามีคนพยายาม Hack เข้ามา ตอนนี้เทคโนโลยีมันไปไกลกว่านั้นเยอะแล้ว มีเครื่องมือให้ใช้มากมาย
# ตัวอย่าง Terraform Configuration
resource "aws_instance" "web_server" {
ami = "ami-0c55b5a45c55b508a"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
พี่รวบรวมคำถามที่น้องๆ น่าจะสงสัยมาให้แล้วนะ:
DevOps คือการรวม Development กับ Operations เข้าด้วยกัน ส่วน DevSecOps คือการเอา Security เข้ามาเพิ่ม Security กลายเป็นส่วนหนึ่งของกระบวนการตั้งแต่ต้นจนจบ
มี Tool ให้เลือกใช้เยอะมาก! ขึ้นอยู่กับความต้องการของแต่ละทีมเลย แต่หลักๆ ก็จะมีพวก Static Analysis Tool, Dynamic Analysis Tool, Vulnerability Scanner, Container Security Tool, และ SIEM Tool
เริ่มจากเล็กๆ ก่อนก็ได้ น้องอาจจะเริ่มจากการ Scan Code หา Vulnerability ง่ายๆ ก่อน แล้วค่อยๆ ขยายไปส่วนอื่นๆ
เหมาะกับทุก Project แหละ! แต่จะเห็นผลชัดเจนใน Project ที่มีความซับซ้อนสูง และต้องการ Security ที่เข้มงวด SiamCafe Blog มีบทความอื่นที่น่าสนใจ ลองเข้าไปอ่านดูนะ
DevSecOps ไม่ใช่แค่ Buzzword แต่เป็นแนวคิดที่สำคัญมากในการพัฒนา Software ในยุคปัจจุบัน Security ไม่ใช่สิ่งที่ต้องทำทีหลัง แต่ต้องคิดถึงตั้งแต่แรกเริ่ม iCafeForex ก็ให้ความสำคัญกับ Security มากเช่นกัน
หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย!