วิธีจัดการผู้ใช้ linux ด้วย Kubernetes
SecurityContext.RunAsUserฉันต้องการที่จะรักษาความปลอดภัยกลุ่มของฉันด้วย คำถามง่าย ๆ : ฉันควรใช้ผู้ใช้คนใด?
ฉันรู้ว่าผู้ใช้ที่มี UID 1001 (ตัวอย่าง) ภายในคอนเทนเนอร์คือผู้ใช้ที่มี UID 1001 บนโฮสต์ ดังนั้นฉันควรสร้างผู้ใช้ด้วย UID 1001 ที่เรียกpod_userโฮสต์ทั้งหมดของฉันและบังคับให้พ็อดทั้งหมดใช้ผู้ใช้นี้หรือไม่ หรือฉันควรตรวจสอบว่าไม่มีผู้ใช้กับ UID นี้ในโฮสต์ทั้งหมดของฉัน? ฉันไม่พบคู่มือแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับเรื่องนี้
ฉันมีคำถามประเภทเดียวกันเกี่ยวกับ Dockerfile: ฉันควรประกาศผู้ใช้ใน Dockerfile ด้วย UID เฉพาะและนำมาใช้ใหม่SecurityContext.RunAsUserหรือไม่ ภาพอย่างเป็นทางการบางภาพกำลังทำงานร่วมกับผู้ใช้ฮาร์ดโค้ดเฉพาะใน Dockerfile และภาพอื่น ๆ กำลังทำงานโดยไม่มีใคร ผมพบว่าการโพสต์ที่น่าสนใจนี้ แต่ไม่มีคำตอบที่ชัดเจน: การจัดการผู้ใช้ลินุกซ์: Kubernetes
คำตอบ
คำแนะนำที่ดีที่สุดของฉันที่นี่คือ:
- Dockerfile ของคุณ
RUN adduserเพื่อสร้างผู้ใช้ที่ไม่ใช่รูทและเปลี่ยนเป็นUSERผู้ใช้รายนั้นหลังจากทำการติดตั้งซอฟต์แวร์ทั้งหมด - คุณไม่จำเป็นต้องระบุ ID ผู้ใช้อย่างชัดเจนในการกำหนดค่า Kubernetes
- ไม่สำคัญว่าชื่อผู้ใช้หรือ ID ตัวเลขนั้นคืออะไรหรือเป็น ID ผู้ใช้เดียวกันกับที่มีอยู่ในคอนเทนเนอร์อื่นหรือบนโฮสต์ตราบใดที่ uid ตัวเลขไม่ใช่ 0
ที่เดียวที่มีปัญหาในทางปฏิบัติคือหากคอนเทนเนอร์พยายามจัดเก็บข้อมูลในปริมาณ อีกครั้งกรณีที่ดีที่สุดคือการหลีกเลี่ยงปัญหานี้ทั้งหมด ชอบใช้ฐานข้อมูลหรือที่เก็บข้อมูลบนคลาวด์หากเป็นไปได้
หากคุณไม่จำเป็นต้องใช้ปริมาณท้องถิ่นคุณโดยเฉพาะสามารถกำหนดค่านโยบายการรักษาความปลอดภัยfsGroup:ที่มีการเสริม นั่นคือID กลุ่มตัวเลขที่กำหนดเอง(ไม่ใช่ ID ผู้ใช้) ซึ่งจะเป็นเจ้าของไฟล์ในโวลุ่มและจะถูกเพิ่มลงในรายการกลุ่มสำหรับกระบวนการคอนเทนเนอร์หลัก
apiVersion: v1
kind: Pod
spec:
securityContext:
fsGroup: 12345 # or any numeric gid
อย่าใช้hostPathไดรฟ์ข้อมูลเลย: คุณไม่สามารถรับประกันได้ว่าเนื้อหาเดียวกันจะอยู่ในทุกโหนดหากพ็อดได้รับการจัดตารางเวลาใหม่และหากโหนดล้มเหลวเนื้อหาที่อยู่ในโหนดนั้นจะสูญหาย