بهترین راهکارهای امنیتی Kubernetes که شما باید بدانید

دوشنبه 3 شهریور 1399

Kubernetes (k8s) شما را قادر می‌سازد تا بتوانید به طور موثر مدیریت کانتینر در cloud (فضای ابری) یا on-premises را هماهنگ کنید. به طور کلی k8s مزایای زیادی را ارائه می‌دهد. از جمله این ویژگی‌ها برای خودترمیمی، rollbackهای خودکار، توزیع بار و مقیاس‌پذیری است.

بهترین راهکارهای امنیتی Kubernetes که شما باید بدانید

با این حال، k8s یک پلت‌فرم پیچیده است و به پیکربندی گسترده‌ای نیاز دارد. برای اینکه مطمئن شوید عملیات k8s شما ایمن است، باید به چالش‌های کلیدی مربوط به آسیب‌پذیری‌های معماری و وابستگی‌های پلت‌فرم بپردازید، و بهترین اقدامات امنیتی مربوط به Kubernetes را پیاده‌سازی کنید.

Kubernetes چیست؟

Kubernetes (k8s)  یک پلت‌فرم هماهنگ‌سازی  open-source است که می‌توانید از آن برای خودکارسازی استقرار (deployment) و مدیریت کانتینرها استفاده کنید. این پلت‌فرم توسعه‌دهندگان و متخصصان فناوری اطلاعات را قادر می‌سازد تا استقرار کانتینرها را در cloud یا on-premises نگه داشته، نظارت کرده و مقیاس‌بندی کنند.

K8s بر اساس معماری سمت سرور است که از کلاسترهای گره‌ها یا همان nodes (سرور یا VMs) استفاده می‌کند، هر یک تعدادی از podها (کانتینرها) را میزبانی می‌کنند. هر سرور و کلاینت شامل اجزای زیر است:

سرور: شامل kube-apiserver (داده‌های API را تأیید و کانفیگ می‌کند)، etcd (ذخیره‌سازی key-value برای اطلاعات کانفیگ)، kube-scheduler (زمان‌بندی کانتینرها برای استقرار) و DNS server است.

کلاینت: شامل کانتینرهای داکر، kubelet (عاملی که کانفیگ‌های pod را تعریف می‌کند)، و kube-proxy (پروکسی برای ارتباطات) است.

Kubernetes از طریق REST API عمل می‌کند که مدیریت برنامه‌ای پلت‌فرم را امکان‌پذیر می‌سازد. این شامل ویژگی‌هایی برای خودترمیمی، خودکارسازی rollbackها، توزیع بار و قابلیت مقیاس‌پذیری است.

اگر از Kubernetes استفاده می‌کنید یا قصد استفاده از آن را دارید، مهم است که در جایی نظارت داشته باشید که می‌توانید مقیاس‌بندی با پروژه‌های خود را انجام دهید. Stackify Retrace از کانتینرهایی مثل Kubernetes پشتیبانی می‌کند و باعث بهبود برنامه می‌شود.

چالش‌های امنیتی Kubernetes

هنگام استفاده از Kubernetes برای مدیریت deploy کردن کانتینر چند چالش وجود دارد که ممکن است با آن‌ها رو به رو شوید.

آسیب‌پدیری معماری

معماری Kubernetes یک منطقه بزرگ و پویا برای حمله ایجاد می‌کند. هر node و pod می‌تواند یک نقطه ورود برای مهاجمان باشد و باید با دقت پیکربندی شود.

علاوه بر این، podها به منظور تقاضای نیازهای کاری و حفظ سلامت deploy به طور مداوم ایجاد شده و از بین می‌روند. این مسأله نظارت و تشخیص تهدیدها را به یک چالش مهم تبدیل می‌کند. سیستم‌ها باید دارای سرویس یابنده باشند تا اطمینان حاصل شود که همه دارایی‌ها (asset) شناخته شده‌اند، در غیر این صورت اجزا از دست رفته‌اند.

ماهیت پویای استقرار k8s چالشی برای حفظ سازش تنظیمی نیز ایجاد می‌کند. سازش نیاز به ورود به سیستم و قابلیت بررسی دارد که برای دستیابی به کانتینرهای زودگذر دشوار است. به عنوان مثال، برای حفظ تاریخچه‌ای از رویدادها، باید لاگ‌ها را از podهای خود به مخزن داده‌های ماندگار اکسپورت کنید. با این حال، ممکن است آدرس‌های IP برای podها استفاده مجدد شوند، بنابراین لاگ‌های شما ممکن است دو کانتینر متفاوت را به دلیل یک IP مشترک به صورت یکسان شناسایی کنند.

وابستگی‌های پلت‌فرم

Kubernetes یک پلت‌فرم ساده نیست. این پلت‌فرم به وابستگی‌های فراوانی نیاز دارد و غالبا تیم‌ها طیف وسیعی از ابزارهای دیگر را برای کمک به مدیریت آسان‌تر در کنار آن قرار می‌دهند.

برخی از این ابزارها به طور خاص برای افزایش امنیت Kubernetes با متمرکز کردن نظارت و تشخیص طراحی شده‌اند. با این حال موارد دیگر ممکن است آسیب‌پذیری‌ها را ایجاد کنند. این بدان معناست که شما باید با دقت تشخیص دهید که کدام اجزای k8s به آن‌ها متکی هستند و مطمئن شوید که این اجزا از نظر داخلی ایمن هستند و از نظر خارجی کنترل و محافظت می‌شوند.

آسیب‌پذیری‌های کانتینر

گرچه کانتینرها به دلیل نمونه‌های ایزوله شده از حملات محافظت می‌کنند، اما assetsها شکست‌ناپذیر نیستند. بزرگ‌ترین تهدیدها برای امنیت کانتینر تصاویر آلوده، کنترل دسترسی نامناسب، و امتیاز روت است. این تهدیدها تا زمانی که کانتینرها در حال اجرا هستند باقی می‌مانند.

تصاویر آلوده ممکن است حاوی بدافزارهایی باشند که برای override شدن بر روی تنظیمات کانتینر یا برای انتشار ویروس در سیستم‌های مداوم استفاده می‌شوند. کنترل‌های دسترسی نامناسب می‌توانند سرویس‌ها یا کاربرانی را قادر سازند تا به یک سری داده‌ها در کانتینر دسترسی داشته یا از کانتینرها برای دسترسی به داده‌های سیستم استفاده کنند.

در ضمن، امتیازات مربوط به روت مهاجمان موفق را قادر می‌سازد تا تقریبا هر عملی را که می‌خواهند با کانتینر انجام دهند را اجرا کنند. این امر شامل تغییر تنظیمات سیستم یا deploy کردن کانتینرهای جدید است.

نمونه‌ای از تهدیدات امنیتی Kubernetes

در زیر چند نمونه از نحوه استفاده از آسیب‌پذیری‌های فوق در حمله آورده شده است:

سازش با کانتینر: آسیپ‌پذیری یا تنظیمات نادرست برنامه می‌تواند توسط مهاجمان به کار گرفته شود تا به کانتینرها دسترسی پیدا کنند. از آنجا، مهاجمان می‌توانند ضعف در فایل سیستم، کنترل فرآیند، یا شبکه را بیابند.

کانتینرهای غیرمجاز بین podها: مهاجمان می‌توانند از یک کانتینر سازگار برای ارتباط با podهای دیگر استفاده کنند، کدهای مخرب را ارسال کرده یا داده‌های حساس را درخواست دهند.

استخراج داده‌ها از pod: ممکن است مهاجمان بتوانند podها را با شل‌های معکوس آلوده کنند، کنترل بر روی دستورات سرور را فعال کنند و به مهاجمان اجازه دهند تا به شبکه شما تونل بزنند.

بهترین راهکارهای امنیتی برای Kubernetes

هنگام استقرار یا همان deploy کردن Kubernetes، چندین روش خوب وجود دارد که می‌تواند به شما کمک کند که مطمئن شوید استقرار شما تا حد ممکن ایمن است. در زیر چند مورد برای شروع کار را برای‌تان لیست کرده‌ایم.

فعال کردن کنترل‌های دسترسی بر اساس نقش (RBACs)

RBACs به شما امکان می‌دهد مجوزها را با استفاده از نقش تعریف کنید، مدیریت را ساده‌تر بسازید، و احتمال پیکربندی اشتباه را کاهش دهید. این کنترل‌ها به طور پیش‌فرض در k8s v1.6 و ورژن بالاتر فعال هستند. با این حال، اگر از ورژن قدیمی Kubernetes استفاده می‌کنید، یا اخیرا آپدیت کرده‌اید، باید دوباره تنظیمات را چک کنید.

برای عملکرد صحیح RBAC، باید آن را فعال کرده و کنترل‌های دسترسی مبتنی بر اتربیوت (ABACs) میرای را غیرفعال کنید. بعد از اینکه مطمئن شدید کنترل‌های خود را به درستی فعال کرده‌اید، باید تعریف مجوزها با فضای نام خاص را بر روی مجوزهای کلاستر الویت‌بندی کنید. این کار شانس اینکه مهاجمان بتوانند به صورت جانبی از طریق کلاسترهای شما پیش روند را کاهش می‌دهد.

محکم کردن گره‌های Kubernetes

محکم کردن گره‌های k8s دسترسی مهاجم به assetها را محدود کرده و احتمال سازش را کاهش می‌دهد. به طور کلی، این امر شامل محکم شدن تنظیمات و محدود کردن ترافیک مجاز به آن یا بین podها می‌شود.

برای محکم کردن nodeها، می‌توانید با مقایسه پیکربندی‌های خود با معیارهای مرکز امنیت اینترنت (CIS) شروع کنید. این معیارها چک‌لیست‌های مرحله به مرحله از بهترین شیوه‌های امنیتی Kubernetes را ارائه می‌دهد.

سپس مطمئن شوید که ترافیک شبکه به پورت‌های حساس را کنترل می‌کنید. مثلا آن‌هایی که برای kubelet استفاده می‌شوند. همچنین باید محدودیت دسترسی k8s API به شبکه‌های قابل اعتماد یا آن‌هایی که نیاز به احراز هویت و مجوز قبل از دسترسی دارند را بررسی کنید.

فعال کردن بررسی لاگ

نظارت صحیح بر وقایع در deploy کردن حیاتی است. شما باید مطمئن شوید که بررسی لاگ (Audit Logging) را فعال کرده‌اید و به طور مداوم این گزارشات را تحلیل می‌کنید. به طور ویژه، شما باید به دنبال فراخوانی‌های مشکوک API و عدم موفیت‌های مربوط به مجوز باشید.

اگر استقرار شما بر روی فضای ابری عمومی میزبانی می‌شود، provider شما باید این داده‌ها را از طریق کنسول یا API در دسترس قرار دهد. آن‌ها همچنین باید توانایی هشدار در مورد وقایع خاص را داشته باشند. اگر self-hosting (خود میزبانی) هستید، برای تحلیل و هشدار باید داده‌ها را توسط یک ابزار دیگر به دست آورید.

محافظت از etcd Cluster

etcd ی کلاستر شما یکی از حساس‌ترین موارد در استقرار k8s تان است. این شامل تمام اطلاعات در مورد وضعیت خوشه‌های شماست، از جمله تنظیمات و اسرار. این اطلاعات آن را به یک هدف جذاب برای مهاجمان تبدیل می‌کند.

هنگام محافظت از etcd، باید به مجوزهای دسترسی خواندن و نوشتن توجه داشته باشید. دسترسی به نوشتن می‌تواند کنترل کامل بر روی کلاسترها را برای مهاجمان فراهم کند و دسترسی خواندن می‌تواند برای شناسایی یا افزایش امتیاز مورد استفاده قرار گیرد.

برای حفاظت از کلاستر خود، باید TLS را هم برای ارتباطات کلاینت به سرور و هم سرور به سرور فعال کنید. همچنین باید یک فایروال بین etcd cluster و API server تنظیم کنید.

جمع‌بندی

Kubernetes می‌تواند برای مدیریت کانتینرها فوق‌العاده مفید باشد، اما شما باید چالش‌های امنیتی Kubernetes را قبل از اتخاذ آن به درستی درک کنید. برای اطمینان از سلامت مداوم عملکردهای خود، باید معماری، وابستگی‌های پلت‌فرم، و کانتینرها را ایمن کنید.

تکینک‌های بسیاری وجود دارد که شما می‌توانید برای امنیت کار Kuberenetes استفاده کنید. می‌توانید با فعال کردن کنترل‌های دسترسی بر اساس نقش شروع کیند، تا از سوءاستفاده از امتیازات جلوگیری کنید. همچین باید گره‌های Kubernetes را محکم بسازید، تا دسترسی مهاجمان به دارایی‌ها را محدود کنید. برای محافظت از etcd cluster، می‌توانید TLS را فعال کرده و یک فایروال را کانفیگ کنید. در نهایت، باید بررسی لاگ‌ها را فعال کنید تا از مشاهده مستمر برخوردار شوید.

برنامه نویسان

نویسنده 3201 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید