VPN Compose ফাইল শেয়ার করছেন? রেন্ডার করা কপি থেকে গোপন তথ্য মুছুন
একটি প্রাইভেট কী YAML-এ, কোনো env মানে, বা কেউ না দেখা রিজলভ করা আউটপুটে থাকতে পারে। আপনি সত্যিই যে কপিটি সংযুক্ত করছেন সেটিই পরীক্ষা করুন।
Compose ফাইল শেয়ার করলে দুটি আর্টিফ্যাক্ট থাকে: আপনি যেটি লিখেছেন, আর টুলটি ভেরিয়েবল প্রতিস্থাপনের পর যেটি রেন্ডার করে। দ্বিতীয়টি প্রায়ই প্রথমটির চেয়ে বেশি সংবেদনশীল, এবং মানুষ না পড়েই যেটি কোনো ইস্যুতে পেস্ট করে সেটি এই দ্বিতীয়টি। কেবল সোর্স ফাইল পর্যালোচনা করা মানে ভুল নথি পর্যালোচনা করা।
কী মুছবেন তা ঠিক করার আগে প্রতিটি কপিতে কী থাকতে পারে তা তুলনা করুন।
রেন্ডার করা মডেলটি আলাদা একটি নথি
Compose পরিবেশ ভেরিয়েবল রিজলভ করে, ওভাররাইড ফাইল একত্র করে এবং একটি কার্যকর কনফিগারেশন তৈরি করে যা পাঠক আর হাতে লেখা মান থেকে আলাদা করতে পারেন না। সোর্সে ভেরিয়েবলের নামের মতো একটি রেফারেন্স আউটপুটে অ্যাকাউন্ট টোকেনেই পরিণত হয়। ফাইলটিকে ডায়াগনোসিসের জন্য উপযোগী করে তোলা কাঠামো ওই রূপান্তর থেকে টিকে থাকে; যা কখনোই এতে থাকা উচিত ছিল না তাও টিকে থাকে।
সংযুক্ত করার আগে ফাইলটি নিজে রেন্ডার করুন এবং সেই আউটপুটকেই পর্যালোচনার আর্টিফ্যাক্ট হিসেবে ধরুন। আপনি যদি এটি রেন্ডার করতে না পারেন, তবে আপনি জানতে পারবেন না কী প্রকাশ করতে যাচ্ছেন।
গোপন তথ্য শুধু কী ফিল্ডে নয়, আরও অনেক জায়গায় থাকে
স্পষ্টটি দিয়ে শুরু করুন: প্রাইভেট কী, প্রি-শেয়ার্ড কী, টোকেন, পাসওয়ার্ড এবং ক্রেডেনশিয়াল ধারণ করা সংযোগ URL। তারপর ফাইলটি যেসব জিনিসের দিকে ইশারা করে সব দেখুন, কারণ রেফারেন্স কোনো রিড্যাকশন নয়। সার্ভিসে মাউন্ট করা env ফাইল, হোস্ট থেকে বাইন্ড-মাউন্ট করা কনফিগারেশন ফাইল, টোকেন বহনকারী লেবেল এবং পাসওয়ার্ডসহ কমান্ড আর্গুমেন্ট সবই YAML পরিষ্কার দেখালেও ডিপ্লয়মেন্টের সঙ্গে যায়। আশ্বস্তকারী নামের ভেরিয়েবলে পেস্ট করা কী-ও কী-ই থাকে।
হোস্ট পাথ ও সার্ভিসের নাম দ্বিতীয় ধরনের তথ্য ফাঁস করে। হোম ডিরেক্টরির নাম, অভ্যন্তরীণ হোস্টনেম বা নেটওয়ার্ক রেঞ্জ একটিও ক্রেডেনশিয়াল ছাড়াই একজন ব্যক্তি বা প্রতিষ্ঠানকে চিহ্নিত করতে পারে, এবং সেই প্রসঙ্গ একই কারণে সরানোর যোগ্য।
সিক্রেটের ঘোষণা সিক্রেট নয়
Compose-এর সিক্রেট অবজেক্ট ঘোষণাকে উপাদান থেকে আলাদা করে: সার্ভিস একটি পাথ বা টার্গেট পায়, আর কনটেন্ট থাকে অন্য জায়গায়। উপাদান প্রতিস্থাপন করে ঘোষণা রাখা সাধারণত সঠিক বিনিময়, কারণ পর্যালোচককে দেখতে হবে একটি সিক্রেট আছে এবং কীভাবে মাউন্ট করা হয়েছে। যা টিকতে হবে না তা হলো কনটেন্ট নিজেই।
লেবেল ও মন্তব্যও একই আচরণের যোগ্য। কোন ভল্ট পাথে প্রোডাকশন কী আছে তা বলা একটি মন্তব্য আক্রমণকারীকে কোথায় দেখতে হবে বলে দেয়, যদিও এতে কোনো কী নেই।
কাঠামো রাখুন যাতে ফাইলটি এখনও ডায়াগনোসিস করতে পারে
যে রিড্যাকশন নেটওয়ার্ক মোড, ইমেজ সংস্করণ বা ক্যাপাবিলিটি সেটিংস সরিয়ে দেয় তা এমন ফাইল তৈরি করে যা দিয়ে কেউ ডিবাগ করতে পারে না। সংবেদনশীল মান প্রতিস্থাপন করুন এবং সম্পর্কগুলো রাখুন: কোন সার্ভিস কী মাউন্ট করে, কোন নেটওয়ার্কে যোগ দেয়, কোন ডিভাইস দরকার। এই অংশটিই পাঠক ব্যবহার করেন একটি অনুপস্থিত রুট বা অনুপলব্ধ ডিভাইস ব্যাখ্যা করতে। এটিই সেই সংস্করণ যা একজন সহকর্মী তার নিজের কাজ করা ডিপ্লয়মেন্টের সঙ্গে তুলনা করতে পারেন।
docker compose -f compose.yaml config > rendered.yaml
grep -nE 'PRIVATE_KEY|PASSWORD|TOKEN|PSK|PrivateKey|passphrase' rendered.yaml
wc -l rendered.yaml
রিড্যাক্ট করা কপিটিকে কাজ করা মূল হিসেবে ডিপ্লয় করবেন না। এটি একটি বর্ণনা, আর নিরাপদ দেখাতে সম্পাদিত বর্ণনা কনফিগারেশন বাগের মতো দেখতে ব্যর্থ হবে।
উপাদান প্রকাশ পেলে তা প্রতিস্থাপন করুন
সংযুক্তিটি সরানো অন্যরা ইতিমধ্যে তৈরি করা কপিগুলো সরায় না, এবং মিরর ও ক্যাশ নিজেদের কপি রাখে। যা ফাঁস হয়েছে তার জন্য ইস্যুকারীর রিভোক ও প্রতিস্থাপন প্রক্রিয়া ব্যবহার করুন, তারপর ডিপ্লয়মেন্ট হালনাগাদ করুন। ক্রমটি গুরুত্বপূর্ণ, কারণ আগে প্রতিস্থাপন ও পরে রিভোক করলে দুটি বৈধ ক্রেডেনশিয়ালের একটি জানালা থাকে।
সাপোর্ট থ্রেডে সঠিক ত্রুটি, ইমেজ সংস্করণ, নেটওয়ার্ক মোড এবং গুরুত্বপূর্ণ একটি অসিক্রেট সেটিং দিয়ে শুরু করুন। এই সমন্বয়টি অনুপস্থিত ডিভাইস বা ভাঙা রুট ব্যাখ্যা করে কী-এর চেয়ে অনেক বেশি বার।