ความปลอดภัยของพ็อดและนโยบายเครือข่าย
แยกเวิร์กโหลดออกจากกัน
ความปลอดภัยของพ็อดและนโยบายเครือข่าย เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
การแยกเวิร์กโหลด
การควบคุมสองประการช่วยจำกัดสิ่งที่พ็อดที่ถูกเจาะระบบสามารถทำได้ ได้แก่ การรักษาความปลอดภัยของพ็อด ซึ่งจำกัดสิทธิ์ของพ็อด และ นโยบายเครือข่าย ซึ่งจำกัดว่าพ็อดใดสามารถสื่อสารระหว่างกันได้ เมื่อนำมาใช้ร่วมกัน จะช่วยจำกัดขอบเขตความเสียหาย
- การรักษาความปลอดภัยของพ็อดช่วยป้องกันการหลบหนีไปยังโหนด
- นโยบายเครือข่ายช่วยป้องกันการแพร่ขยายการโจมตีข้ามพ็อด
การตั้งค่าพ็อดที่เป็นอันตราย
ฟิลด์หลายรายการในข้อกำหนดพ็อดจะเพิ่มความเสี่ยงอย่างมากหากอนุญาตให้ใช้
privileged: trueให้สิทธิ์เข้าถึงโฮสต์ได้เกือบทั้งหมดhostPID,hostNetwork,hostIPCทำลายการแยกเนมสเปซ- โวลุม
hostPathจะเมาต์ไดเรกทอรีของโหนด - ความสามารถเพิ่มเติม เช่น
SYS_ADMINเปิดทางให้หลบหนีได้ - ทำงานในฐานะผู้ใช้รูท (
runAsUser: 0)
การตรวจรับความปลอดภัยของพ็อด
การตรวจรับความปลอดภัยของพ็อด (PSA) เข้ามาแทนที่ PodSecurityPolicy โดยบังคับใช้มาตรฐานในตัวสามระดับต่อเนมสเปซ
- สิทธิ์พิเศษ: ไม่จำกัดสิทธิ์ (ควรหลีกเลี่ยงสำหรับเวิร์กโหลด)
- พื้นฐาน: บล็อกการยกระดับสิทธิ์ที่ทราบกันดี
- จำกัด: แนวปฏิบัติที่รัดกุมที่สุด (ไม่ใช้รูท ไม่มีสิทธิ์พิเศษ และตัดความสามารถที่ไม่จำเป็น)
# Enforce the restricted standard on a namespace
kubectl label namespace prod \
pod-security.kubernetes.io/enforce=restrictedsecurityContext ที่เสริมความแข็งแกร่ง
กำหนดสิทธิ์เท่าที่จำเป็นในระดับพ็อดและคอนเทนเนอร์ด้วย securityContext
- ทำงานในฐานะผู้ใช้ที่ไม่ใช่รูท และใช้ระบบไฟล์รูทแบบอ่านอย่างเดียว
- ตัดความสามารถของ Linux ทั้งหมดออก แล้วเพิ่มกลับเฉพาะความสามารถที่จำเป็น
- ไม่อนุญาตให้ยกระดับสิทธิ์
# securityContext fields (YAML)
# runAsNonRoot: true
# readOnlyRootFilesystem: true
# allowPrivilegeEscalation: false
# capabilities: drop: [ALL]
kubectl apply -f hardened-deploy.yamlนอกเหนือจากมาตรฐาน: กลไกนโยบาย
หากต้องการกฎที่ละเอียดกว่า PSA ตัวควบคุมการอนุมัติจะบังคับใช้นโยบายแบบกำหนดเอง
- OPA Gatekeeper ประเมินข้อจำกัดของ Rego
- Kyverno ใช้นโยบาย YAML และสามารถแก้ไขข้อมูลพร้อมกับตรวจสอบได้
เครื่องมือเหล่านี้สามารถห้ามใช้ hostPath บังคับให้อิมเมจมีลายเซ็น หรือบังคับใช้ป้ายกำกับทั่วทั้งคลัสเตอร์ได้
# Apply a Kyverno policy that disallows privileged pods
kubectl apply -f disallow-privileged.yamlเครือข่ายที่เปิดโดยค่าเริ่มต้น
โดยค่าเริ่มต้น พ็อดทั้งหมดสามารถเข้าถึงพ็อดอื่นทั้งหมดในทุกเนมสเปซได้ จะไม่มีการแบ่งส่วนจนกว่าคุณจะเพิ่มนโยบายเครือข่าย เครือข่ายแบบแบนนี้เป็นเหตุผลที่พ็อดเพียงพ็อดเดียวที่ถูกเจาะระบบสามารถสแกนและโจมตีทั้งคลัสเตอร์ได้
# From a pod, the flat network lets you reach any service
curl http://internal-db.prod.svc.cluster.local:5432พื้นฐานนโยบายเครือข่าย
นโยบายเครือข่ายคือกฎในระดับเนมสเปซที่ใช้เลือกพ็อดและอนุญาตการรับส่งข้อมูลขาเข้าและขาออกบางประเภท นโยบายเหล่านี้มีผลสะสม กล่าวคือ เมื่อนำนโยบายใด ๆ ไปใช้กับพ็อด พ็อดนั้นจะเปลี่ยนเป็นปฏิเสธทั้งหมดโดยค่าเริ่มต้นในทิศทางที่นโยบายครอบคลุม
- ตัวคัดเลือกจะจับคู่พ็อดตามป้ายกำกับ
- กฎจะอนุญาตการรับส่งข้อมูลจากหรือไปยังพ็อด เนมสเปซ หรือช่วง CIDR ที่ระบุ
- ต้องใช้ CNI ที่รองรับนโยบาย เช่น Calico หรือ Cilium
ปฏิเสธทั้งหมดโดยค่าเริ่มต้น แล้วจึงอนุญาต
รูปแบบที่แนะนำคือกำหนดพื้นฐานให้ปฏิเสธทั้งหมดโดยค่าเริ่มต้นสำหรับแต่ละเนมสเปซ จากนั้นจึงเพิ่มกฎอนุญาตอย่างชัดเจนสำหรับการรับส่งข้อมูลที่จำเป็น
# Default-deny all ingress in a namespace (YAML)
# kind: NetworkPolicy spec: podSelector: {} policyTypes: [Ingress]
kubectl apply -f default-deny.yaml
# Then allow only frontend -> backend
kubectl apply -f allow-frontend.yamlการควบคุมทราฟฟิกขาออกและการบล็อกเมทาดาทา
นโยบายทราฟฟิกขาออกมีความสำคัญไม่แพ้นโยบายทราฟฟิกขาเข้า
- จำกัดปลายทางภายนอกที่พ็อดสามารถเข้าถึงได้ (ช่วยจำกัดการลักลอบนำข้อมูลออกและการควบคุมสั่งการ)
- บล็อก IP เมทาดาทาของคลาวด์
169.254.169.254จากพ็อด เพื่อป้องกันการขโมยข้อมูลรับรองของโหนด - จำกัด DNS และทราฟฟิกภายในระหว่างบริการ
การป้องกันขณะทำงาน
นโยบายแบบคงที่ควรใช้ร่วมกับการตรวจจับขณะทำงาน
- Falco แจ้งเตือนเมื่อพบการเรียกระบบที่น่าสงสัย เช่น การใช้เชลล์ในคอนเทนเนอร์หรือการเมาต์ข้อมูลสำคัญ
- โพรไฟล์ seccomp จำกัดการเรียกระบบที่คอนเทนเนอร์สามารถทำได้
- AppArmor และ SELinux เพิ่มการควบคุมการเข้าถึงแบบบังคับบนโหนด
# Apply the runtime/default seccomp profile (securityContext)
# seccompProfile: type: RuntimeDefault
kubectl apply -f seccomp-deploy.yamlการทดสอบการแยก
เมื่อตรวจสอบการจำกัดขอบเขต ให้ลองเชื่อมต่อข้ามพ็อดและใช้กลไกพื้นฐานสำหรับการหลบหนีจากพ็อดทดสอบ เพื่อยืนยันว่านโยบายบล็อกการกระทำเหล่านั้น ดำเนินการในเนมสเปซที่ควบคุมไว้ และลบพ็อดทดสอบออกภายหลัง
รายงานพ็อดใด ๆ ที่ทำงานด้วยสิทธิ์พิเศษ หรือเนมสเปซใด ๆ ที่ไม่มีการปฏิเสธทั้งหมดโดยค่าเริ่มต้น พร้อมการแก้ไขแมนนิเฟสต์ที่ตรงจุด
ตรวจสอบความเข้าใจ
ยืนยันความรู้เกี่ยวกับการแยกเวิร์กโหลดของคุณ
สรุปทบทวน
คุณได้เรียนรู้วิธีแยกเวิร์กโหลด
- การตรวจรับความปลอดภัยของพ็อด (ระดับจำกัด) และ securityContext ช่วยป้องกันการหลบหนี
- Gatekeeper และ Kyverno บังคับใช้นโยบายการอนุมัติแบบกำหนดเอง
- เครือข่ายเปิดโดยค่าเริ่มต้น ให้ใช้การปฏิเสธทั้งหมดโดยค่าเริ่มต้น แล้วเพิ่มการอนุญาตอย่างชัดเจน
- กฎทราฟฟิกขาออก การบล็อกเมทาดาทา และ Falco ช่วยเสริมการป้องกันให้รัดกุมยิ่งขึ้น
ถัดไป: การรักษาความปลอดภัยของห่วงโซ่อุปทานและข้อมูลลับ
คำถามที่พบบ่อย
บทเรียน “ความปลอดภัยของพ็อดและนโยบายเครือข่าย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ความปลอดภัยของพ็อดและนโยบายเครือข่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ความปลอดภัยของพ็อดและนโยบายเครือข่าย”
แยกเวิร์กโหลดออกจากกัน คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ความปลอดภัยของพ็อดและนโยบายเครือข่าย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แบบจำลองภัยคุกคาม Kubernetes
- RBAC และบัญชีบริการ
- ความปลอดภัยของพ็อดและนโยบายเครือข่าย
- การรักษาความปลอดภัยห่วงโซ่อุปทานและข้อมูลลับ