IT General
เอาน่าๆ น้องๆ หลายคนอาจจะงง ไอ้ Secrets Management Vault นี่มันคืออะไรวะ? สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่องความปลอดภัยนี่สำคัญสุดๆ นะ Password Admin, รหัส WiFi, Key API ต่างๆ นี่ถ้าหลุดไป ชีวิตเปลี่ยนเลย
Secrets Management Vault มันก็คือ ที่เก็บความลับแบบดิจิทัลของเรานั่นแหละ แต่พิเศษตรงที่ มันไม่ได้เก็บแบบธรรมดาๆ นะ มันมีการเข้ารหัส มีระบบจัดการสิทธิ์ มี Audit Log คือใครมาแอบดู แอบใช้ เราก็รู้หมด
ทำไมมันถึงสำคัญ? ลองคิดดูว่า ถ้ารหัส AWS ของเราหลุดไป คนร้ายเอาไปขุด Bitcoin เล่นบน Server เรา จะเกิดอะไรขึ้น? หรือถ้ารหัส Database หลุด Hacker เข้ามาลบข้อมูลลูกค้าเรา จะเป็นยังไง? นี่แหละคือเหตุผลที่ Secrets Management Vault มันสำคัญมากๆ
Secret ในโลก IT มันไม่ได้หมายถึงความลับชาติอะไรขนาดนั้นหรอกน้อง มันก็คือ ข้อมูลสำคัญที่เราต้องปกป้อง เช่น Password, API Key, Certificate, SSH Key, Encryption Key พวกนี้แหละ
สมัยก่อนตอนผมทำร้านเน็ต ผมจะเขียนรหัส WiFi ใส่กระดาษแปะไว้หลังเคาน์เตอร์ (อย่าบอกใครนะ) แต่นั่นมันผิดมหันต์! ใครเดินผ่านไปมาก็เห็นหมด เดี๋ยวนี้เค้าไม่ทำกันแล้วนะ
Vault ก็คือ ที่เก็บความลับของเรานั่นแหละ แต่เป็นที่เก็บที่ปลอดภัยมากๆ มีระบบล็อคหลายชั้น มีกล้องวงจรปิด (ในเชิงเปรียบเทียบนะ) ปกติแล้ว Vault จะเป็น Software หรือ Hardware ที่ออกแบบมาเพื่อเก็บ Secret โดยเฉพาะ
ลองนึกภาพ Vault เป็นตู้เซฟในธนาคาร เราต้องมีกุญแจ มีรหัสผ่าน ถึงจะเปิดได้ แถมยังมีระบบบันทึกว่าใครเข้าออกเมื่อไหร่ด้วย
Secrets Management Vault จะทำงานโดยการเข้ารหัส Secret แล้วเก็บไว้ใน Database ที่ปลอดภัย เมื่อเราต้องการใช้ Secret เราจะต้องทำการ Authenticate ตัวเองก่อน (เช่น ใส่ Password, ใช้ Token) ถ้า Authenticate สำเร็จ Vault ก็จะทำการ Decrypt Secret แล้วส่งกลับมาให้เราใช้
แต่! Vault จะไม่เก็บ Secret ไว้ใน Memory นานๆ นะ พอเราใช้เสร็จ Vault ก็จะลบ Secret ออกจาก Memory ทันที เพื่อป้องกันไม่ให้ใครมาแอบดึง Secret ไปได้
โอเค ทีนี้มาถึงวิธีใช้งาน Secrets Management Vault กันบ้าง ผมจะยกตัวอย่างการใช้งาน HashiCorp Vault ซึ่งเป็น Vault ที่ได้รับความนิยมมากๆ ในปัจจุบัน
แต่ก่อนที่จะเริ่ม ผมขอแนะนำให้เข้าไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ก่อนนะ จะได้มีความรู้พื้นฐานแน่นๆ
การติดตั้ง Vault ก็ไม่ยากเย็นอะไรน้อง เข้าไปที่เว็บไซต์ของ HashiCorp แล้ว Download Vault version ที่เหมาะกับ OS ของเรามาติดตั้งได้เลย
# ตัวอย่างการติดตั้งบน Linux
wget https://releases.hashicorp.com/vault/1.15.3/vault_1.15.3_linux_amd64.zip
unzip vault_1.15.3_linux_amd64.zip
sudo mv vault /usr/local/bin
หลังจากติดตั้งเสร็จแล้ว เราต้องทำการตั้งค่า Vault ก่อน เช่น กำหนด Storage Backend (ที่เก็บข้อมูล Secret), กำหนด Listener (Port ที่ Vault จะ Listen) และอื่นๆ
# ตัวอย่าง Config File (vault.hcl)
storage "file" {
path = "/vault/data"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = true
}
disable_mlock = true
จากนั้นก็ Start Vault Server ได้เลย
vault server -config=vault.hcl
หลังจาก Start Vault Server แล้ว เราต้องทำการ Initialize Vault ก่อน เพื่อสร้าง Encryption Key และ Root Token
vault operator init
คำสั่งนี้จะ Return ค่า Unseal Keys (หลาย Keys) และ Root Token ออกมา เราต้องเก็บค่าเหล่านี้ไว้ให้ดีๆ เพราะมันสำคัญมากๆ
จากนั้นเราต้องทำการ Unseal Vault โดยใช้ Unseal Keys ที่ได้มา
vault operator unseal
vault operator unseal
vault operator unseal
Unseal คือการบอก Vault ว่า "เฮ้! ฉันมีกุญแจนะ เปิดตู้เซฟให้หน่อย"
หลังจาก Unseal Vault แล้ว เราก็สามารถใช้งาน Vault ได้แล้ว โดยใช้ Root Token ที่ได้มาในการ Authenticate
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN=''
vault kv put secret/my-secret my-password=my-secret-password
Code นี้จะทำการสร้าง Secret ชื่อ secret/my-secret โดยมี Field ชื่อ my-password และ Value เป็น my-secret-password
ถ้าอยากอ่าน Secret ก็ทำได้ง่ายๆ
vault kv get secret/my-secret
เท่านี้เอง! ง่ายใช่มั้ยล่ะ ลองเอาไปเล่นดูนะ
แน่นอนว่า Secrets Management Vault ไม่ใช่ทางเลือกเดียวในการจัดการ Secret ยังมีทางเลือกอื่นๆ อีกมากมาย เช่น
ลองดูตารางเปรียบเทียบกันชัดๆ
| Feature | Environment Variables | Configuration Files | Secrets Management Vault |
|---|---|---|---|
| Security | Low | Medium | High |
| Ease of Use | High | Medium | Medium |
| Scalability | Low | Medium | High |
| Cost | Low | Low | Medium/High |
จะเห็นว่า Secrets Management Vault อาจจะไม่ได้ใช้งานง่ายที่สุด หรือราคาถูกที่สุด แต่เรื่องความปลอดภัยแล้ว มันคือ No.1 แน่นอน
ก่อนจากกัน ขอฝาก SiamCafe Blog อีกรอบนะ มีบทความดีๆ อีกเยอะเลย
สมัยผมทำร้านเน็ต SiamCafe เมื่อ 20 กว่าปีที่แล้ว เรื่องความปลอดภัยนี่สำคัญสุดๆ เพราะข้อมูลลูกค้า ข้อมูลเกม ข้อมูลร้าน มันเยอะแยะไปหมด ถ้าโดนแฮกทีนี่จบเห่เลย ดังนั้นเรื่อง Secrets Management เลยสำคัญมากๆ ผมเลยอยากจะมาแชร์เทคนิคที่ใช้ได้จริงที่เคยลองผิดลองถูกมาครับ
1. อย่าเก็บ Password ไว้ใน Code ตรงๆ เด็ดขาด! สมัยก่อนหลายคนชอบง่าย เขียน password ใส่ใน code ไปเลย อันนี้อันตรายสุดๆ ใครเข้ามาดู code ได้ก็จบเห่
// ตัวอย่างที่ไม่ควรทำ
$username = "admin";
$password = "password123"; // อันตราย!
ให้ใช้ environment variables แทนครับ ดึงค่ามาจากภายนอก code จะปลอดภัยกว่าเยอะ
// ตัวอย่างที่ดีกว่า
$username = getenv("DB_USERNAME");
$password = getenv("DB_PASSWORD");
2. หมั่นเปลี่ยน Password เป็นประจำ Password เก่าๆ ก็เหมือนของหมดอายุ ต้องเปลี่ยนเรื่อยๆ อย่าใช้ password เดิมนานเกินไป และอย่าใช้ password ที่คาดเดาง่าย
3. ใช้ Tools ช่วยจัดการ Secrets สมัยนี้มี tools ดีๆ เยอะแยะที่ช่วยจัดการ secrets ได้ อย่าง Vault, AWS Secrets Manager หรือ Azure Key Vault ลองศึกษาดูครับ เลือกใช้ให้เหมาะกับ infrastructure ของเรา
4. Two-Factor Authentication (2FA) ช่วยชีวิต! เปิด 2FA ทุกที่ที่ทำได้ ไม่ว่าจะเป็น email, database, server login เพิ่มความปลอดภัยไปอีกขั้น ถึง password หลุดไป คนร้ายก็ยังเข้าไม่ได้ถ้าไม่มีรหัสจาก 2FA
เพราะการเก็บ secrets (เช่น password, API keys) ไว้ในที่ที่ไม่ปลอดภัยจะทำให้ระบบเราเสี่ยงต่อการโดนแฮก ข้อมูลรั่วไหล หรือโดนโจมตีได้ การจัดการ secrets อย่างถูกต้องจะช่วยลดความเสี่ยงเหล่านี้ได้เยอะมาก
จำเป็นครับ ไม่ว่าบริษัทจะเล็กหรือใหญ่ ข้อมูลก็คือข้อมูล ยิ่งบริษัทเล็กๆ อาจจะไม่มี resources มากพอที่จะรับมือกับการโดนแฮก การป้องกันไว้ก่อนจึงสำคัญมากๆ
ถ้าใช้ AWS ก็แนะนำ AWS Secrets Manager ถ้าใช้ Azure ก็ Azure Key Vault หรือถ้าอยากได้ open-source solution ก็ลอง HashiCorp Vault ครับ เลือกที่เหมาะกับ infrastructure และความถนัดของทีม
ช่วงแรกๆ อาจจะต้องเรียนรู้บ้าง แต่รับรองว่าคุ้มค่ากับการลงทุนครับ เพราะมันช่วยลดความเสี่ยงด้านความปลอดภัยไปได้เยอะมาก แถมยังช่วยให้เราจัดการ secrets ได้ง่ายขึ้นด้วย
Secrets Management ไม่ใช่เรื่องยากอย่างที่คิด เริ่มจากง่ายๆ ก่อนก็ได้ครับ อย่างการใช้ environment variables แทนการใส่ password ใน code ตรงๆ แล้วค่อยๆ พัฒนาไปใช้ tools ที่ซับซ้อนขึ้น การลงทุนกับความปลอดภัยเป็นสิ่งที่คุ้มค่าเสมอ iCafeForex ก็ให้ความสำคัญกับเรื่องนี้มากๆ นะครับ
อย่าลืมติดตาม SiamCafe Blog นะครับ จะมีบทความดีๆ เกี่ยวกับ IT มาให้อ่านกันเรื่อยๆ