ความลับคืออะไร และวิธีการจัดการข้อมูลลับใน Java

เสร็จสมบูรณ์เมื่อ

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

ศูนย์ความน่าเชื่อถือและศูนย์ความลับคืออะไร

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

แนวคิดนี้นําไปใช้กับแอปพลิเคชันเว็บด้วย: พวกเขาไม่ควรมีความลับที่จัดเก็บไว้ในโค้ดหรือในไบนารีขั้นสุดท้าย นี่คือสิ่งที่เราเรียกว่าความลับเป็นศูนย์

ความลับควรจัดการโดยระบบภายนอกโดยมีกฎการเข้าถึงและการตรวจสอบความถูกต้องอย่างเข้มงวดเพื่อลดความเสี่ยงการโจมตี

อย่าใส่ความลับลงในที่เก็บ Git

แม้ว่าที่เก็บ Git ของคุณจะเป็นแบบส่วนตัว แต่การใส่ความลับใด ๆ ในโค้ดต้นฉบับของคุณจะเป็นแนวทางปฏิบัติที่ไม่ดี:

  • ทุกคนที่มีสิทธิ์เข้าถึงที่เก็บของคุณจะทราบข้อมูลที่ละเอียดอ่อนของคุณ
  • ทุกคนที่สามารถเข้าถึงไบนารีแอปพลิเคชันของคุณสามารถแยกข้อมูลลับออกจากไฟล์ได้

นอกจากนี้เมื่อมีการจัดเก็บความลับไว้ในที่เก็บข้อมูล Git ผู้โจมตีสามารถค้นหาได้เสมอโดยการดูในประวัติของที่เก็บซึ่งสามารถลืมได้หลังจากผ่านไปนานแล้ว

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

การใช้ตัวแปรสภาพแวดล้อม

โซลูชันที่ง่ายที่สุดสําหรับการจัดการข้อมูลลับคือการใช้ตัวแปรสภาพแวดล้อม พวกเขามีประโยชน์หลายอย่าง:

  • ใช้งานได้ง่าย
  • พวกเขาทํางานบนระบบทั้งหมด (แม้ในระบบภายในองค์กร)
  • ทุกคนรู้จักและเข้าใจวิธีการทํางาน

อย่างไรก็ตาม การดําเนินการนี้ไม่ปลอดภัยพอ: กระบวนการทั้งหมดในระบบของคุณสามารถอ่านได้ และจะแสดงได้อย่างง่ายดายโดยใช้ส่วนขยายการจัดการ Java (JMX) บนระบบ Java

ดังนั้นตัวแปรสภาพแวดล้อมมักจะถูกมองว่าเป็นขั้นตอนแรกที่จะไปสู่ Zero Trust: พวกมันปลอดภัยมากกว่าการจัดเก็บความลับไว้ในรหัสแหล่งที่มาโดยตรง แต่ขาดความสามารถในการจัดการและเข้าถึงผู้โจมตีได้ง่าย

การใช้ความลับของ Kubernetes

Kubernetes มีแนวคิดเกี่ยวกับ secretsซึ่งเป็นอีกหนึ่งโซลูชันที่ดี ความลับเหล่านั้นสามารถโหลดเป็นไฟล์ในระบบไฟล์ของแอปพลิเคชัน: โปรแกรม Java สามารถอ่านไฟล์นั้นได้ในเวลาเริ่มต้นเพื่อเข้าถึงความลับเหล่านั้น เครื่องมือเช่นเฟรมเวิร์กสปริงยังมีการสนับสนุนมาตรฐานสําหรับกลไกนี้ทําให้พวกเขาสามารถใช้ความลับเหล่านั้นในวิธีที่ง่ายและมีประสิทธิภาพ

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

ในขณะที่ความลับของ Kubernetes เป็นโซลูชันที่ดีสําหรับ Kubernetes แต่ก็จํากัดเฉพาะ Kubernetes และขาดความสามารถในการจัดการขั้นสูงทั้งนี้ขึ้นอยู่กับเครื่องมือที่ใช้ในการจัดการโครงสร้างพื้นฐานของ Kubernetes

การใช้ที่เก็บข้อมูลลับ

ที่เก็บความลับ เช่น Hashicorp Vault หรือ Azure Key Vault คือซอฟต์แวร์พิเศษสําหรับการจัดการความลับ ซึ่งมีระบบการจัดการที่หลากหลายเพื่ออนุญาตให้ผู้ใช้ หมุนคีย์ความปลอดภัย และตรวจสอบว่าแอปพลิเคชันใดสามารถเข้าถึงข้อมูลลับใดได้

นอกจากนี้ยังให้ API ภายนอกเพื่อให้สามารถใช้กับระบบใด ๆ ได้ ตัวอย่างเช่น คุณสามารถใช้ Azure Key Vault บนบริการ Azure ทั้งหมด รวมถึงเครื่องเสมือน, บริการแอป Azure, บริการ Azure Kubernetes หรือ Azure Spring Apps

ที่เก็บความลับเป็นโซลูชันที่ปลอดภัยที่สุดสําหรับการจัดการความลับ แต่พวกเขาจําเป็นต้องใช้เครื่องมือเฉพาะ