Secrets in Swarm (সোয়ার্ম সিক্রেটস)
পাসওয়ার্ড, API কি (Key), বা TLS সার্টিফিকেটের মতো সেনসিটিভ ডেটা সরাসরি Dockerfile বা এনভায়রনমেন্ট ভেরিয়েবলে রাখা নিরাপদ নয়। ডকার সোয়ার্মে এই ডেটাগুলো নিরাপদে ম্যানেজ করার জন্য 'Secrets' ফিচার ব্যবহার করা হয়।
১. সিক্রেট কি?
সিক্রেট হলো এক ধরণের অবজেক্ট যা সোয়ার্ম ক্লাস্টারে এনক্রিপ্টেড অবস্থায় মজুদ থাকে। এটি শুধুমাত্র সেইসব সার্ভিসের কাছে পৌঁছায় যাদেরকে আপনি অনুমতি দেন।
- Encrypted Storage: সোয়ার্ম ম্যানেজারের Raft লগে সিক্রেটগুলো সব সময় এনক্রিপ্টেড থাকে।
- In-memory: যখন কোনো কন্টেইনারে সিক্রেট দেওয়া হয়, তা ডিস্কে সেভ না হয়ে মেমোরিতে (tmpfs) মাউন্ট হয়।
২. সিক্রেট তৈরি এবং ব্যবহার (Create & Use)
সিক্রেট তৈরি করা:
আপনি কমান্ড লাইন থেকে বা ফাইল থেকে সিক্রেট তৈরি করতে পারেন।
echo "p@ssword123" | docker secret create db_password -সার্ভিসে সিক্রেট যুক্ত করা:
সার্ভিস তৈরি করার সময় --secret ফ্ল্যাগ ব্যবহার করুন:
docker service create --name my-app --secret db_password my-imageকন্টেইনারের ভেতরে সিক্রেট ফাইলটি /run/secrets/db_password পাথে পাওয়া যাবে। অ্যাপ্লিকেশন এখান থেকে পাসওয়ার্ডটি রিড করতে পারবে।
৩. অ্যাক্সেস কন্ট্রোল (Access Control)
সোয়ার্মে সিক্রেটগুলো 'Principle of Least Privilege' মেনে কাজ করে। শুধুমাত্র নির্দিষ্ট সার্ভিসই সিক্রেটটি দেখতে পায়। ম্যানেজারের কাছে সিক্রেটটি এনক্রিপ্টেড থাকে এবং শুধুমাত্র হার্ডওয়্যার ট্রাস্টেড নোডগুলোতেই এটি ডিক্রিপ্ট হয়।
৪. সিক্রেট রোটেশন (Secret Rotation)
যদি আপনি কোনো সিক্রেট পরিবর্তন করতে চান: ১. নতুন একটি সিক্রেট তৈরি করুন (যেমন: db_password_v2)। ২. সার্ভিস আপডেট করে আগেরটি রিমুভ করে নতুনটি দিন:
docker service update --secret-rm db_password --secret-add db_password_v2 my-app৫. কম্পোজ/স্ট্যাক ফাইলে সিক্রেট
প্রোডাকশনে সচরাচর docker-stack.yml ফাইলে সিক্রেট ব্যবহার করা হয়:
version: "3.8"
services:
db:
image: mysql:latest
secrets:
- db_password
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
secrets:
db_password:
external: trueএখানে external: true মানে হলো সিক্রেটটি আগেই সোয়ার্মে তৈরি করা আছে।
৬. সিক্রেট ব্যবহারের সুবিধা
- Security: কোড বা ইমেজ থেকে সেনসিটিভ ডেটা আলাদা থাকে।
- Compliance: সিকিউরিটি অডিট এবং কমপ্লায়েন্স মেনে চলা সহজ হয়।
- Ephemeral: ডেটা কখনো নোডের হার্ড ড্রাইভ বা ডিস্কে পারমানেন্টলি সেভ হয় না।