Security Checklist
Kube Security
- 1. อย่า Run Docker โดย root user
- ควรจะใช้ package docker file ที่เราจะใช้เท่านั้น
- allow port สำหรับที่จะใช้เท่านั้น
- ควรกำหนด Network policy ให้ Pod สามารถคุยกันได้เฉพาะ ที่จะใช้เท่านั้น
- set policy agent pod ให้ Deployment deploy only namespace ที่ pod สามารถ deploy ได้เท่านั้น
- service account pod ควร สิทธิ์ เฉพาะที่ pod นั้นใช้เท่านั้น
- Image ควรใช้ Private Registry
- Pod ตัวไหน ที่ไม่ได้ใช้ API ของ Cloud ไม่ควร access API ของ Cloud ได้ (Metadata consealing)
- ห้ามเก็บ Password ที่อยู่ใน App ควรอยู่ใน Secret manager
- Scan image ที่เรา Build เป็นประจำ
- แบ่งสิทธิ์ ในการใช้ Kubectl ให้ access only namespace
- worker node ไม่ควรเปิด SSH ให้ผ่าน Kubectl เท่านั้น
- Kube cluster ควรอยู่ใน Private network เท่านั้น ให้ set ผ่าน LB เท่านั้น
Api Security
- ทุก Api ควรมี AccessKeys
- Api ควร enable oauth2
- ไม่ควรนำข้อมูล เกี่ยวกับ User Profile ส่วนตัวไว้ใน JWT
- Api ทุกตัว ควร Enable HSTS
- Api ใช้ port ไหน allow port นั้น
- ให้ทุก API ผ่าน LB เท่านั้น เพราะ LB ใส่ firewall ได้ แล้ว ไม่ควรใช้ Port เดี่ยวกับ port API
- Api แยก ENV ชัดเจน ไม่ควร test บน Production เช่น Dev, SIT, UAT, PROD, PROD Support, Perf Test, Perf Test on cloud
- User ที่เข้ามาใช้งาน API ควรมี สิทธิ์ไม่เท่ากัน กำหนด By Route
- เช็คสิทธิ์ Api ทุกเส้น ว่า user นั้นมี สิทธิ์เข้าถึงไหม
- JWT ควร Encode ด้วย RSA(Asymmetric key) ทำ Secret
- Refresh token ควรเก็บไว้ใน DB หรือใน Redis ด้วย เพื่อที่จะสามารถ Revoke ได้
- Logout ออกจากระบบ ควรลบ Refresh token และ Token ออกจาก DB ด้วย
- Set X-Forwarded-for ที่ LB เพื่อเก็บ Log User IP ไว้ด้วย เมื่อ login
- ปิด Debug mode
- ไม่ควรใช้ Phpmyadmin
- ทุก API ที่ต่อ Database ควร close session ด้วย