วิธีจัดการผู้ใช้ linux ด้วย Kubernetes

Sep 25 2020

SecurityContext.RunAsUserฉันต้องการที่จะรักษาความปลอดภัยกลุ่มของฉันด้วย คำถามง่าย ๆ : ฉันควรใช้ผู้ใช้คนใด?

ฉันรู้ว่าผู้ใช้ที่มี UID 1001 (ตัวอย่าง) ภายในคอนเทนเนอร์คือผู้ใช้ที่มี UID 1001 บนโฮสต์ ดังนั้นฉันควรสร้างผู้ใช้ด้วย UID 1001 ที่เรียกpod_userโฮสต์ทั้งหมดของฉันและบังคับให้พ็อดทั้งหมดใช้ผู้ใช้นี้หรือไม่ หรือฉันควรตรวจสอบว่าไม่มีผู้ใช้กับ UID นี้ในโฮสต์ทั้งหมดของฉัน? ฉันไม่พบคู่มือแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับเรื่องนี้

ฉันมีคำถามประเภทเดียวกันเกี่ยวกับ Dockerfile: ฉันควรประกาศผู้ใช้ใน Dockerfile ด้วย UID เฉพาะและนำมาใช้ใหม่SecurityContext.RunAsUserหรือไม่ ภาพอย่างเป็นทางการบางภาพกำลังทำงานร่วมกับผู้ใช้ฮาร์ดโค้ดเฉพาะใน Dockerfile และภาพอื่น ๆ กำลังทำงานโดยไม่มีใคร ผมพบว่าการโพสต์ที่น่าสนใจนี้ แต่ไม่มีคำตอบที่ชัดเจน: การจัดการผู้ใช้ลินุกซ์: Kubernetes

คำตอบ

2 DavidMaze Sep 25 2020 at 22:54

คำแนะนำที่ดีที่สุดของฉันที่นี่คือ:

  • 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ไดรฟ์ข้อมูลเลย: คุณไม่สามารถรับประกันได้ว่าเนื้อหาเดียวกันจะอยู่ในทุกโหนดหากพ็อดได้รับการจัดตารางเวลาใหม่และหากโหนดล้มเหลวเนื้อหาที่อยู่ในโหนดนั้นจะสูญหาย