کانتینر ها روزی مجازیسازی سختافزار را منسوخ میکنند، بنابراین این سوال مطرح خواهد شد که زمانی که میتوان کانتینر ها را بر روی سختافزار فیزیکی اجرا نمود، چه نیازی به ماشین مجازی ها (Virtual Machines) یا VMها است؟
اجرای یک برنامهی کاربردی در محیط عملیاتی مجموعهای از الزامات معین از قبیل امنیت، تطبیقپذیری، عملکرد، مدیریت منابع، مقیاسپذیری، دسترسپذیری، ماندگاری دادهها، شبکه و مانیتورینگ به همراهِ خود دارد. برنامههای کاربردی Containerizeشده نیز همینگونه هستند، با این تفاوت که این نوع برنامههای کاربردی یک الزام دیگر به نام تنظیم (Orchestration) نیز به همراه دارند.
میتوان با هزینه و ریسک بالا، یک Stack سفارشی بر روی سختافزار فیزیکی ایجاد نمود تا بتوان الزامات برنامههای کاربردی Containerizeشده را رفع کرد، یا اینکه میتوان از راهکارهای مجازیسازی اثباتشده، کمهزینه و کمخطر بهعنوان زیرساخت پایه برای Containerها و سیستم تنظیم آنها، استفاده نمود.
اما ماجرا به اینجا ختم نمیشود: ترکیب Containerها و VMها مزایای هریک را گردهم میآورد و کلیّت سازماندهی شدهای پدید میآورد که از اجزای تشکیلدهندهاش بسیار بهتر میباشد؛ به همین دلیل است که ارائهدهندگان بزرگ خدمات ابری همچون گوگل و آمازون از VMها برای اجرای Containerها استفاده میکنند. VMها به کاربر اجازه میدهند که بهصورتی امن و مؤثر برنامههای کاربردی Containerizeشده را در محیط عملیاتی بر روی زیرساخت Software-Defined اجرا کنند تا بتوان به آسانی مدیریت، مانیتور، Scale و بهینهسازی نمود. در عین حال، Containerها به کاربر این توانایی را میدهند که توسعهدهندگان را چالاکتر، برنامههای کاربردی پورتابلتر و پیادهسازیها را بیشتر قابل خودکارسازی کنند. ترکیب این دو ساخت، پیادهسازی و مدیریت برنامههای کاربردی سازمانی را ساده و روان میسازد.
این مقاله به اعتراضات بر اجرای Containerها برروی VMها با توضیحات فنی و پاسخهای مبتنی بر شواهد و مدارک، مقابله میکند و استدلال میآورد که ترکیب Containerها و VMها، روشی بینقص برای پیادهسازی و ادارهی اتکاپذیر و مقاوم برنامههای کاربردی Containerizeشده در مقیاسهای مختلف میباشد. VMware Pivotal Container Service که از Kubernetes برای تنظیم Containerها بر روی VMها در یک دیتاسنتر Software-Defined متعلق به VMware استفاده میکند، در بطن این ترکیب قرار دارد.
جهت مشاوره رایگان و یا راه اندازی زیرساخت مجازی سازی دیتاسنتر با کارشناسان شرکت APK تماس بگیرید. |
بررسی امنیت کانتینرها
در ماه سپتامبر سال 2017، مؤسسه ملی فناوری و استانداردها (National Institute of Standards and Technology) یا به اختصار NIST، یک راهنمای امنیتی Application Container را منتشر کرد که نگرانیهای امنیتی Containerها را توضیح داده و روشهایی برای رفع آنها پیشنهاد میدهد. این راهنما چند نقطهی اساسی نگرانی درخصوص کانتینرها را بهصورت ذیل نام میبرد:
- میزان ایزولهسازی
- مدیریت و پیکربندی سیستم عامل
- تنظیم سیستمها بدون امنیت کافی
لازم به ذکر است که Containerها بهتنهایی محدودههای امنیتی ناکارآمدی هستند. Containerها VMهای مینیاتوری نیستند و برخلاف VMها محدودههای امنیتی برقرار نمیکنند. یکی از اشارات راهنمای امنیتی Application Container Security به اجرای برنامههای کاربردی Containerizeشده برروی VMها میباشد: به گفتهی راهنما، Containerها برخلاف VMها محدودهی امنیتی معین و مقاومی ارائه نمیدهند. به این دلیل که Containerها یک Kernel مشابه دارند و میتوانند قابلیتها و Privilegeهای متنوعی را بر روی یک هاست اجرا کنند، میزان تقسیمبندی میان آنها بسیار کمتر از میزان ارائهشده به VMها توسط یک Hypervisor میباشد.
پیادهسازی Containerها با VMها، یک برنامهی کاربردی را با دو لایهی ایزولهسازی میپوشاند. این رویکرد برای محیطهای ابری با چندین بارِ کاری و چند Tenantای بسیار مناسب است. براساس یک گزارش امنیتی داکِر، کانتینرهای Docker با محافظت از خودِ VM و ارائهی محافظت عمیق برای هاست، به خوبی با تکنولوژیهای مجازیسازی ترکیب میگردند.
برای اجرای Containerهایی که بهدرستی Tenantها را برروی هاستهای فیزیکی لینوکس ایزولهسازی کنند، باید Tenantهای متفاوت را برروی ماشینهای فیزیکی متفاوت اجرا نمود. نتیجهی احتمالی این امر یا بهرهوری پایین از منابع میباشد که از Fragmentation منشأ میگیرد یا به بهرهوری بسیار بالا منتهی میشود که مسبب ایجاد مدتزمان طولانی بارگذاری برای سختافزارهای جدید میگردد. ارائهدهندگان بزرگ خدمات ابری همچون Google و Amazon Web Services یا به اختصار AWS، با استفاده از VMهای جداگانه، بارِکاری Containerهای Tenantها را ایزولهسازی مینمایند. از آنجاییکه Containerها محدودههای امنیتی ناکارآمدی هستند، تنها کدهای بسیار معتبر باید برروی Containerهایی که بر روی یک VM یا هاست فیزیکی مشابه قرار دارند، اجرا گردد.
این موضوع برای Podها در Kubernetes نیز صدق میکند. به گفتهی جیانینگ گوو از Google Could Platform Blog، درخصوص برنامههای کاربردی که هم برروی VMها اجرا میشوند و هم Containerها، VM حفاظ نهایی امنیتی را ارائه میدهد. همانطور که نباید برنامههایی را که سطوح امنیتی متناقض دارند بر روی یک VM مشابه اجرا نمود، بهدلیل کمبود محدودههای امنیتی مطمئن بین Podها، نباید Podهایی را که سطوح امنیتی متناقض دارند بر روی یک Node مشابه اجرا نمود.
خطرات پیکربندی اشتباه بر روی یک هاست فیزیکی
کانتینرها یا سیستم عامل یک هاست فیزیکی میتوانند به راحتی دچار پیکربندی اشتباه شده و سطح آسیبپذیری (Attack Surface) و ریسک آنها افزایش یابد. محیطهایی که با دقت پیکربندی نشده باشند، میتوانند منجر به این امر شوند که Containerها بتوانند بسیار راحتتر از چندین VM بر روی یک هاست مشابه، با یکدیگر و هاست تعامل داشته باشند.
از طرف دیگر، جداسازی، خودکارسازی و ایزولهسازی یک سیستم عامل که بر روی یک VM در Hypervisor درحال اجراست، سطح آسیبپذیری را کاهش داده و خطر نقض امنیتی را میکاهد.
امنسازی سیستم تنظیم
یکی دیگر از نگرانیهای Application Container Security Guide، ارائهی توصیههایی برای امنسازی سیستمهای تنظیمی (Orchestration Systems) است که Containerها را مدیریت میکنند.
اقدامات لازم برای این امر طبق توصیهی NIST، به شرح ذیل میباشند:
- استفاده از خدمات احراز هویت سطح سازمانی بهرهمند از Credentialها و خدمات دایرکتوری قوی
- کنترل دسترسی Granular برای اقدامات مدیریتی براساس هاستها، Containerها و Imageها
- ایزولهسازی کانتینرها به هاستهای جداگانه براساس سطح حساسیت برنامههای کاربردی که روی آنها درحال اجرا هستند.
یکی دیگر از اسناد NIST با نام Security Assurance Requirements for Linux Application Container Deployments، الزامات امنیتی و اقداماتی ارائه میدهد تا هنگامیکه برنامههای کاربردی در محیطهای عملیاتی پیادهسازی شدهاند، به انجام توصیههای Application Container Security Guide یاریرسانی شود. سیستم تنظیم (Orchestration) و اجزاء و ابزارهای آن باید از قابلیتهای ذیل بهرهمند باشند:
Logging و Monitoring مصرف منابع Containerها برای اطمینان حاصلنمودن از دسترسپذیری منابع حیاتی
سیستم تنظیم باید نه با یک، بلکه با چند Container Host کار کند تا بتواند شرحی کامل از مصرف دادههای تمام Containerهای درحال اجرا، ارائه دهد.
اجرای Containerها برروی سختافزار فیزیکی و مدیریت Containerها با یک سیستم تنظیم نیازمند این است که هر ماشین فیزیکی به یک سیستم احراز هویت و کنترل دسترسی متصل شود.
برای ایزولهسازی Containerها برپایهی سطح حساسیت، باید از تعداد کمی از ماشینهای فیزیکی استفاده کرد. در نتیجهی این امر، بهرهوری از منابع کاهش یافته درحالیکه مدیریت سربار (Overhead) افزایش مییابد؛ شرایط بدی که با الزام NIST به استفاده از انواع متفاونی از Container Hostها، تشدید میگردد.
استفادهی بهینه از Trendهای پیشرفته
اجرای Containerها بر روی VMها به کاربر اجازه میدهد که از نوآوریهای امنیتی در عرصهی تکونولوژِی مجازیسازی، نهایت استفاده را ببرد، بهعنوان مثال میتوان از AMD SEV-ES نام برد. تکنولوژی Secure Encrypted Virtualization یا به اختصار SEV، رمزنگاری حافظه را با مجازیسازی AMD-V ترکیب مینماید تا از VMهای رمزگذاریشده که برای محیطهای Multitenant ایدهآل هستند، پشتیبانی بهعمل آید.
SEV with Encrypted State یا به اختصار SEV-ES از SEV نشأت گرفته است تا سطح آسیبپذیری را بیشتر از قبل کاهش داده و محافظت اضافهبرسازمان برای یک Guest VM از Hypervisor ارائه دهد، حتی اگر Hypervisor دچار نقض امنیتی شده باشد. هنگامیکه یک VM از اجرا باز میایستد تا از درز اطلاعات موجود در CPU Registerها به Hypervisor جلوگیری بهعمل آورد، SEV-ES با رمزگذاری و محافظت از تمام محتوای CPU Registerها، از حملات جلوگیری میکند. SEV-ES میتواند دستکاریهای مخرب در وضعیت CPU Register را شناسایی و از آنها جلوگیری نماید.
محافظت از Micro-Serviceها با استفاده از VMها
Micro-Serviceها بُعد دیگری به امنیت Containerها اضافه میکنند. براساس یک گزارش امنیتی Docker، پیادهسازی Docker Containerها بههمراه VMها به گروه کاملی از سرویسها اجازه میدهد که از یکدیگر ایزولهسازی شده و سپس درون یک VM Host، جمع گردند.
ـــــــــــــــــــــــ
مقایسه پیادهسازی کانتینر ها برروی VMها و Bare Metal – قسمت اول
مقایسه پیادهسازی کانتینر ها برروی VMها و Bare Metal – قسمت دوم
مقایسه پیادهسازی کانتینر ها برروی VMها و Bare Metal – قسمت سوم
مقایسه پیادهسازی کانتینر ها برروی VMها و Bare Metal – قسمت چهارم (پایانی)