ความลับคืออะไร และวิธีการจัดการข้อมูลลับใน 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
ที่เก็บความลับเป็นโซลูชันที่ปลอดภัยที่สุดสําหรับการจัดการความลับ แต่พวกเขาจําเป็นต้องใช้เครื่องมือเฉพาะ