มาจัดการ Credential ต่างๆ ด้วย Docker Secret กัน

การเก็บรักษา Credential ต่างๆ ให้เป็นความลับเป็นสิ่งที่สำคัญมากๆ ใน Application ของเราเพราะถ้าเกิดว่ามันหลุดออกไปเท่ากับข้อมูลต่างๆ ของเราก็หลุดออกไปด้วยเช่นกัน วันนี้เราจะมาแนะนำวิธีการเก็บ Credential ต่างๆ ด้วย Docker Secret กัน

เริ่มใช้ Docker Secret กันเลย

ก่อนอื่นเราต้องสร้าง Secret กันก่อนด้วยคำสั่งนี้

echo "THIS_IS_SECRET_DATA" | docker secret create secret_data -

พอสร้างเสร็จเราก็มาดูกันว่า Secret ของเราสร้างเสร็จจริงๆ ไหมด้วยคำสั่ง

docker secret ls

ถ้าสำเร็จก็จะเห็นดังรูปนี้

โดยเราจะสามารถนำ Docker Secret ของเราไปใช้ได้แค่เฉพาะ Swarm Mode เท่านั้น เรามาดูกันดีกว่าว่าตัว container จะเอา secret ของเราไปใช้ได้ยังไง โดยผมจะสร้าง service ที่ใช้ nginx ขึ้นมาด้วยคำสั่งนี้

docker service create --name nginx --secret secret_data nginx:latest

ก่อนรันคำสั่งนี้อย่าลืม pul image nginx กันก่อนนะครับ พอสร้าง service เสร็จเราก็ลอง exec เข้าไปดูข้างใน container กันเลยโดย secret ของเราจะถูกเก็บไว้ที่ /run/secrets/secret_data

โดยจะเห็นว่าถ้าเราสั่งสร้าง secret ชื่อว่าอะไร ไฟล์ที่ได้ก็จะเป็นชื่อเดียวกันกับที่เราสั่ง

ทีนี้เวลาเราจะเอาไปใช้ก็สามารถเขียนโปรแกรมมาอ่านไฟล์เพื่อเอาค่าในนี้ไปใช้ได้เลย

เพียงเท่านี้ Credential ต่างๆ ของเราก็จะถูกเข้ารหัสเก็บไว้และสามารถนำมาใช้ได้อย่างปลอดภัยครับ

สร้าง Secret ที่ Manager ตัว Node สามารถใช้งานได้ด้วย!

ด้วยการที่เราสามารถใช้ Docker Secret ได้ใน Swarm Mode ดังนั้นเราสามารถที่จะสร้าง secret ไว้ที่ตัว Manager ของ Swarm Cluster ไว้เพียงที่เดียวแล้วตัว Node ต่างๆ ที่ join เข้ามาก็จะสามารถเข้าใช้งาน Secret ได้เหมือนกัน

ใช้งาน Docker Secret กับ Docker Compose

ถ้าเกิดว่าใครมี stack ที่ใช้ Docker Compose อยู่แล้วเนี่ยเราก็สามารถนำ secret ไปใช้ได้ด้วยการแก้ไฟล์ docker-compose.yml เป็นประมาณนี้

เสร็จแล้วเราก็นำไปใช้งานกับคำสั่ง docker stack deploy ได้เลย

ปลอดภัยแต่ก็ยังไม่ปลอดภัย?

จะเห็นได้ว่าการที่เราสร้าง secret ด้วย Docker Secret แล้วเนี่ยมันจะถูกเข้ารหัสเอาไว้ก็จริง แต่ถ้ามีคนสามารถเข้าถึงตัว container ที่ใช้งาน secret นี้ได้ตัว credential ต่างๆ ที่เราเข้ารหัสเอาไว้ก็สามารถหลุดได้เหมือนกันครับ

สุดท้ายนี้เราจึงควรหมั่น Update และ Review Security ต่างๆ ของ Software เราให้เสมอๆ เพื่อป้องกันการเข้าถึงข้อมูลจากบุคคลอันไม่พึงประสงค์ครับ 🙂

Note: Docker Secret พึ่งเพิ่มเข้ามาใน Docker Version 1.13