เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml
ความเสี่ยงของ Secrets แบบข้อความธรรมดาในแผนภูมิและ Git
เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
ค่าเป็นข้อความธรรมดา
values.yaml ของชาร์ตเป็นข้อความธรรมดาที่ไม่ได้เข้ารหัส ทุกสิ่งที่คุณเขียนไว้ที่นั่น รวมถึงรหัสผ่าน จะอ่านได้โดยทุกคนที่เปิดไฟล์
Git จดจำตลอดไป
โดยทั่วไปชาร์ตจะอยู่ใน Git ข้อมูลลับที่คอมมิตไว้เพียงครั้งเดียวยังคงอยู่ในประวัติแม้คุณลบออกแล้ว ดังนั้นข้อมูลที่รั่วไหลจึงไม่หายไป 🔒
ความผิดพลาดที่ชวนให้ทำ
การใส่รหัสผ่านจริงลงใน values.yaml โดยตรงเพื่อให้ระบบทำงานได้นั้นเป็นเรื่องที่ชวนให้ทำ แต่ควรห้ามใจไว้ เพราะค่านั้นจะแพร่กระจายไปทุกที่
database:
password: super-secret-123Helm จัดเก็บข้อมูลรีลีส
เมื่อติดตั้ง Helm จะบันทึกค่าที่ผสานแล้วลงในซีเคร็ต รีลีส ภายในคลัสเตอร์ ดังนั้นรหัสผ่านแบบข้อความธรรมดาของคุณจะอยู่ที่นั่นด้วย
helm get values เปิดเผยข้อมูล
ทุกคนที่เข้าถึงรีลีสได้สามารถเรียกใช้ helm get values เพื่ออ่านค่าที่คุณส่งเข้าไปกลับมาได้ตรง ๆ รวมถึงรหัสผ่านแบบข้อความธรรมดา
helm get values myappบันทึก CI ก็รั่วไหลเช่นกัน
การส่งข้อมูลลับผ่าน --set ในกระบวนการทำงานมักพิมพ์ข้อมูลเหล่านั้นลงในบันทึกการสร้าง ซึ่งจะแสดงให้ทั้งทีมเห็นอย่างชัดเจน
helm install myapp ./chart --set db.password=secretกฎสำคัญ
กฎนี้เรียบง่าย: ข้อมูลลับต้องไม่อยู่ในรูปข้อความธรรมดาภายในชาร์ต ใน Git หรือบนบรรทัดคำสั่ง ต้องเก็บข้อมูลเหล่านี้ไว้ภายนอก
อ้างอิง อย่าฝังค่า
รูปแบบที่ปลอดภัยคืออ้างอิงข้อมูลลับแทนการฝังค่าไว้ เทมเพลตจะชี้ไปยังทรัพยากร Secret ที่คลัสเตอร์มีอยู่แล้ว
valueFrom:
secretKeyRef:
name: db-credentials
key: passwordเข้ารหัสหากจำเป็นต้องจัดเก็บ
เมื่อค่าลับจำเป็นต้องอยู่ใน Git จริง ๆ ให้จัดเก็บแบบเข้ารหัส เพื่อให้ไฟล์ที่คอมมิตไว้ไม่มีประโยชน์หากไม่มีกุญแจถอดรหัส
สามแนวทางที่ใช้กันทั่วไป
มีสามแนวทางในการแก้ปัญหานี้ ได้แก่ การเข้ารหัสค่าด้วยเครื่องมือ การดึงข้อมูลลับจากที่จัดเก็บภายนอก หรือการสร้างออบเจ็กต์ Secret จากข้อมูลที่ส่งเข้าไป
การแปลงรหัสไม่ใช่การรักษาความปลอดภัย
Base64 ใน Kubernetes Secret เป็นเพียงการแปลงรหัส ไม่ใช่การเข้ารหัส จึงไม่ได้ซ่อนข้อมูลใด ๆ และไม่ควรถือว่าค่าที่แปลงแล้วได้รับการปกป้อง
ตรวจสอบอย่างรวดเร็ว
เหตุใดการใส่รหัสผ่านไว้ใน values.yaml จึงมีความเสี่ยงสูง
ทบทวน
คุณได้เห็นแล้วว่าเหตุใดข้อมูลลับแบบข้อความธรรมดาใน values.yaml จึงรั่วไหลผ่าน Git ข้อมูลรีลีส และบันทึก CI และเหตุใดจึงต้องอ้างอิงหรือเข้ารหัสข้อมูลเหล่านั้นแทน 🎉
คำถามที่พบบ่อย
บทเรียน “เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml”
ความเสี่ยงของ Secrets แบบข้อความธรรมดาในแผนภูมิและ Git คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงไม่ควรเก็บ Secrets ไว้ใน values.yaml
- การเข้ารหัสค่าด้วย helm-secrets และ SOPS
- การดึงข้อมูลจาก External Secrets Operators
- การสร้างแม่แบบทรัพยากร Kubernetes Secret