สร้าง Kubernetes? ลองใช้เครื่องมือ RBAC ทั้ง 5 เหล่านี้เพื่อตรวจสอบสิทธิ์

เผยแพร่แล้ว: 2022-03-14

Kubernetes RBAC เป็นวิธีการให้สิทธิ์ตามบทบาทที่มีประสิทธิภาพซึ่งใช้ในการจัดเตรียมการเข้าถึงทรัพยากรในคลัสเตอร์ Kubernetes อย่างละเอียด

อย่างไรก็ตาม หากใช้ไม่ถูกต้อง อาจทำให้เกิดหายนะได้ง่าย นั่นเป็นเหตุผลที่เราต้องการเครื่องมือ RBAC เพื่อตรวจสอบและค้นหาการอนุญาตที่มีความเสี่ยงใน Kubernetes

ในบทความนี้ เราจะพูดถึงว่า Kubernetes RBAC คืออะไร เหตุใดการตรวจสอบการอนุญาตที่มีความเสี่ยงจึงเป็นสิ่งสำคัญ และค้นหาเครื่องมือที่สามารถช่วยเราตรวจสอบการอนุญาตที่มีความเสี่ยงได้ดีที่สุด!

RBAC คืออะไร?

การควบคุมการเข้าถึงตามบทบาท (RBAC) เป็นกลไกการรักษาความปลอดภัยซึ่งการอนุญาตการเข้าถึงแต่ละครั้งจะขึ้นอยู่กับบทบาทที่กำหนดให้กับผู้ใช้ ด้วยระบบนี้ จึงสามารถจำกัดการเข้าถึงทรัพยากรของคลัสเตอร์ Kubernetes (เนมสเปซ พ็อด งาน) ให้กับแอปพลิเคชันหรือผู้ใช้ได้

ใน Kubernetes นโยบาย RBAC สามารถใช้เพื่อจัดการสิทธิ์การเข้าถึงของผู้ใช้ระบบ (ผู้ใช้หรือกลุ่ม) รวมถึงของบัญชีบริการ (บัญชีบริการ)

มีวิธีอื่นในการอนุญาตผู้ใช้ใน Kubernetes เช่น ABAC (การควบคุมการเข้าถึงตามแอตทริบิวต์) ผ่าน Webhook หรือ Node Authorization แต่กลไกการอนุญาตที่ใช้กันอย่างแพร่หลายและมีอยู่ในเวอร์ชันเสถียรคือ RBAC

ในทางปฏิบัติแล้ว การโต้ตอบกับทรัพยากรทั้งหมดทำได้ผ่านเซิร์ฟเวอร์ API ซึ่งหมายความว่าในท้ายที่สุด ทุกอย่างจะจำกัดแค่การส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ดังกล่าว (ส่วนประกอบสำคัญของโหนดหลักหรือแผงควบคุม)

Kubernetes มีออบเจ็กต์ที่เกี่ยวข้องกับ RBAC สี่รายการที่สามารถรวมกันเพื่อกำหนดสิทธิ์การเข้าถึงทรัพยากรคลัสเตอร์ สิ่งเหล่านี้คือ Role, ClusterRole, RoleBinding และ ClusterRoleBinding เมื่อต้องการทำงานกับวัตถุเหล่านี้ เช่นเดียวกับวัตถุ Kubernetes ทั้งหมด ต้องใช้ Kubernetes API

บทบาทใน Kubernetes

ใน Kubernetes มีบทบาทสองประเภทที่เรียกว่า Role และ ClusterRole ความแตกต่างที่ใหญ่ที่สุดระหว่างทั้งสองคือบทบาทเป็นของเนมสเปซที่เป็นรูปธรรม ในขณะที่ ClusterRole เป็นโกลบอลของคลัสเตอร์ ดังนั้น ในกรณีของ ClusterRole ชื่อต้องไม่ซ้ำกันเนื่องจากเป็นของคลัสเตอร์ ในกรณีของ Role เนมสเปซที่แตกต่างกันสองรายการสามารถมีบทบาทที่มีชื่อเดียวกันได้

ความแตกต่างอีกประการที่ควรกล่าวถึงคือ Role อนุญาตให้เข้าถึงทรัพยากรที่อยู่ในเนมสเปซเดียวกัน ในขณะที่ ClusterRole นอกจากจะให้สิทธิ์การเข้าถึงทรัพยากรในเนมสเปซใดๆ แล้ว ยังให้สิทธิ์เข้าถึงทรัพยากรในเนมสเปซเดียวกันได้อีกด้วย เช่น โหนด ท่ามกลางคนอื่น ๆ.

ตอนนี้เรารู้ประเภทของบทบาทแล้ว สิ่งต่อไปคือต้องรู้ว่าใครที่เราสามารถมอบหมายบทบาทเหล่านี้ได้ ในกรณีนี้ เรามีบัญชีผู้ใช้ บัญชีบริการ และกลุ่ม บัญชีผู้ใช้คือบัญชีที่กำหนดให้กับผู้ใช้รายใดรายหนึ่ง ในขณะที่บัญชีบริการจะถูกใช้โดยกระบวนการ ตัวอย่างเช่น สมมติว่าแอปพลิเคชันของเราต้องเข้าถึงทรัพยากรจากคลัสเตอร์โดยทางโปรแกรม สำหรับสิ่งนี้ เราจะใช้บัญชีบริการ

สุดท้าย เราต้องการ "กาว" ที่ผูกบทบาทกับบัญชี (ผู้ใช้หรือบริการ) หรือกลุ่ม มีสองทรัพยากรใน Kubernetes สำหรับสิ่งนี้: RoleBinding และ ClusterRoleBinding RoleBinding สามารถอ้างอิงบทบาทที่อยู่ในเนมสเปซเดียวกัน ในขณะที่ ClusterRoleBinding สามารถอ้างอิงบทบาทใดๆ ในเนมสเปซใดๆ และกำหนดสิทธิ์ทั่วโลก

โปรดทราบว่าการอนุญาตอนุญาตการเข้าถึงทรัพยากรเท่านั้นเพราะ "โดยค่าเริ่มต้นทุกอย่างถูกปฏิเสธ" และเป็นไปได้ที่จะกำหนดหลายบทบาทให้กับผู้ใช้รายเดียวกัน

ข้อกำหนดเบื้องต้นเพียงอย่างเดียวสำหรับการใช้ RBAC คือเปิดใช้งานบนคลัสเตอร์ของเราโดยใช้ตัวเลือก “ –authorization-mode=RBAC ” เราตรวจสอบได้โดยใช้คำสั่ง:

 kubectl api-versions

การอนุญาต RBAC ที่มีความเสี่ยงคืออะไรและจะแก้ไขได้อย่างไร

การอนุญาตใดๆ ที่อนุญาตหรืออนุญาตให้เข้าถึงทรัพยากรของพ็อดโดยไม่ได้รับอนุญาตถือเป็นการอนุญาตที่มีความเสี่ยง ตัวอย่างเช่น หากผู้ใช้มีสิทธิ์แก้ไข พวกเขาสามารถแก้ไขบทบาทของตนเองและสามารถเข้าถึงทรัพยากรที่พวกเขาไม่ได้รับอนุญาตให้เข้าถึงได้ ซึ่งอาจส่งผลให้เกิดปัญหาการปฏิบัติตามข้อกำหนด ในทำนองเดียวกัน หากไม่ได้เลือกการอนุญาตแบบเก่า ผู้ใช้บางรายจะสามารถเข้าถึงทรัพยากรที่ไม่ต้องการอีกต่อไป

การค้นหาการอนุญาตที่มีความเสี่ยงด้วยตนเองเป็นเรื่องยากและใช้เวลานานเมื่อคุณมีบทบาทจำนวนมาก เพื่อให้กระบวนการนี้มีเครื่องมือตรวจสอบสิทธิ์ RBAC จำนวนหนึ่งที่ช่วยสแกนคลัสเตอร์ทั้งหมดของคุณเพื่อค้นหาการอนุญาตที่มีความเสี่ยง สิ่งสำคัญคือต้องเข้าใจด้วยว่าประสิทธิภาพของ RBAC ขึ้นอยู่กับนโยบายล่าสุดของ RBAC ซึ่งจะต้องมีการตรวจสอบสิทธิ์เป็นประจำ

ต่อไปนี้เป็นเครื่องมือ RBAC ที่ดีที่สุดในการตรวจสอบการอนุญาตตามภาษาและส่วนต่อประสานผู้ใช้ที่แตกต่างกัน

KubiScan

KubiScan เป็นเครื่องมือ RBAC ที่ใช้ Python สำหรับสแกนการอนุญาตที่มีความเสี่ยงในคลัสเตอร์ Kubernetes เครื่องมือจะต้องดำเนินการภายในโหนดหลัก จากนั้นจึงจะสามารถเรียกใช้โดยตรงจากเทอร์มินัลเพื่อแสดงรายการการอนุญาตที่มีความเสี่ยง Kubiscan สามารถใช้เพื่อค้นหาบทบาทที่มีความเสี่ยง, ClusterRoles, RoleBindings, ClusterBindings, Subjects, Pods และแม้แต่คอนเทนเนอร์

เครน

Krane by Appvia เป็นเครื่องมือวิเคราะห์และแสดงภาพสแตติก Kubernetes RBAC ที่ใช้ Ruby สามารถเรียกใช้ได้ทั้งในเครื่องเป็น CLI หรือในไปป์ไลน์ CI/CD นอกจากนี้ยังสามารถทำงานเป็นบริการแบบสแตนด์อโลนภายในคอนเทนเนอร์ Kubernetes ได้อีกด้วย Krane ให้คุณสมบัติในการวิเคราะห์การอนุญาต RBAC ผ่านมุมมองทรีเหลี่ยมและกราฟเครือข่าย นอกจากนี้ยังให้การแจ้งเตือนสำหรับการอนุญาตที่มีความเสี่ยงผ่านการผสานรวม Slack

เครื่องมือ RBAC

RBAC Tool โดย InsightCloudSec เป็นเครื่องมือตรวจสอบการอนุญาตแบบสแตนด์อโลนที่สร้างด้วย Go ไม่เพียงแค่อนุญาตให้คุณสแกนและเน้นการอนุญาต RBAC ที่มีความเสี่ยง แต่ยังช่วยให้คุณสร้างนโยบาย RBAC จากการตรวจสอบสิทธิ์ผ่านคุณสมบัติ Auditgen เครื่องมือ RBAC ยังมีคุณลักษณะของการแสดงภาพ RBAC

แฟร์วินด์ส

Fairwinds Insight เป็นเครื่องมือแบบสแตนด์อโลนที่มีคุณลักษณะด้านความปลอดภัยและการปฏิบัติตามข้อกำหนดของ Kubernetes จำนวนมาก คุณลักษณะการบังคับใช้นโยบายช่วยให้คุณสามารถตรวจสอบการอนุญาต RBAC และสแกนเทียบกับนโยบายมาตรฐานและที่กำหนดเองได้ Fairwinds นำเสนอการสาธิตแบบออนดีมานด์

ตัวจัดการการอนุญาต

Permission Manager โดย Sighup เป็นเครื่องมือจัดการสิทธิ์ Kubernetes ที่ใช้ Javascript เป็นวิธีที่ง่ายและริเริ่มในการจัดการการอนุญาตของผู้ใช้ภายในคลัสเตอร์ Kubernetes Permission Manager ยังมีเครื่องมือรุ่นสำหรับองค์กรที่ให้คุณตรวจสอบสิทธิ์ RBAC ขั้นพื้นฐานได้

บทสรุป

Kubernetes RBAC เป็นวิธีที่มีประสิทธิภาพในการจัดการการเข้าถึงทรัพยากรในคลัสเตอร์ Kubernetes อย่างไรก็ตาม หากใช้งานไม่ถูกต้อง อาจนำไปสู่ปัญหาด้านความปลอดภัยและการปฏิบัติตามข้อกำหนด อย่างไรก็ตาม สามารถหลีกเลี่ยงสิ่งนี้ได้ด้วยการตรวจสอบสิทธิ์อย่างต่อเนื่องผ่านเครื่องมือตรวจสอบ RBAC

คุณอาจสนใจแนวทางปฏิบัติที่ดีที่สุดของ Kubernetes