آشنایی با شبکه none در Docker

در این مقاله کوتاه قصد دارم درباره شبکه none در داکر صحبت کنم. شبکه none یکی از انواع شبکه‌هایی است که داکر برای ایزوله‌سازی کانتینرها ارائه می‌دهد. این شبکه به‌طور خاص طراحی شده است تا کانتینر را از هرگونه دسترسی به اینترنت یا دیگر شبکه‌ها کاملاً ایزوله کند.

زمانی که یک کانتینر با استفاده از شبکه none اجرا می‌شود:

  • تنها یک رابط loopback داخلی (localhost) در کانتینر فعال است.
  • کانتینر نمی‌تواند به هیچ منبع خارجی (مانند وب‌سرویس‌ها، دیتابیس‌ها، یا حتی دیگر کانتینرها) متصل شود.

بنابراین این ویژگی باعث می‌شود شبکه none گزینه‌ای ایده‌آل برای سناریوهایی باشد که امنیت و ایزوله‌سازی کامل داده‌ها اهمیت بالایی دارند.

بیایید با هم سناریو زیر را در نظر بگیرم:

به عنوان مدیر تیم مهندسی داده، تصمیم گرفتم از محمد، که یک عضو تازه‌کار و مشتاق است، برای انجام بخش کوچکی از یک پروژه از جنس ETL استفاده کنم. هدف من این است که مهارت‌های محمد را در یک محیط کنترل‌شده محک بزنم و در عین حال نشان دهم که او می‌تواند در شرکت تأثیرگذار باشد. با این حال، به دلیل تازه‌کار بودن محمد و مسائل مربوط به امنیت داده‌ها، او اجازه دسترسی به داده‌های محرمانه را ندارد.

شرح تسکی که برای محمد تعریف کردم به این صورت بود:

محمد باید کدی بنویسد که مادامی که هر فایل ورودی CSV را از یک دایرکتوری قرار داده شد، پردازش خود را شروع کند. لذا من چند فایل CSV به‌عنوان نمونه طراحی کردم که شامل داده‌هایی مشابه داده‌های واقعی است اما هیچ‌گونه اطلاعات حساس ندارد. این فایل در اختیار محمد قرار دادم. محمد باید در این فایل، تغییراتی ایجاد کند که شامل تغییر نام و نوع ستون‌ها است و همچنین از ستون متنی، تمامی کد ملی ها به همراه نام و نام خانوادگی افراد استخراج شوند و در دو ستون جدید، با جداکننده کاما (,) ذخیره شوند. پس از اعمال این تغییرات، فایل پردازش‌شده باید در یک دایرکتوری مشخص به نام output ذخیره شود. حالا من می توانم خروجی‌های پردازش‌شده را به‌راحتی به یک دیتابیس منتقل کنم تا برای تحلیل‌های بیشتر، گزارش‌گیری، یا ذخیره بلندمدت مورد استفاده قرار گیرند یا آن ها را می‌توانم به‌عنوان ورودی در یک سیستم یا Pipeline دیگر قرار دهم. به‌این‌ترتیب، می‌توانم این داده‌ها را به مراحل بعدی پردازش یا تحلیل‌های پیچیده‌تر انتقال دهم.

اما مشکل چیست؟

مشکل اینجاست که من فرصت بررسی کد محمد را ندارم و فقط خروجی کار او برایم مهم است. بنابراین ممکن است او در کد خود عملیاتی خرابکارانه انجام دهد، مثلاً ارسال داده‌ها به یک وب‌سرویس خارجی یا ذخیره آن‌ها در محلی دیگر.

برای جلوگیری از این موضوع:

  • من از محمد خواستم که پس از تکمیل توسعه، کد خود را در گیت (Git) پوش کند تا بتوانم بعدا سر فرصت به تاریخچه تغییرات کد و جزئیات آن دسترسی داشته باشم.
  • به محمد دسترسی به داده‌های اصلی و محرمانه داده نشده است، و تنها می‌تواند با فایل نمونه کار کند.

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

با این روش، با خیال راحت هر تعداد دسته از داده‌های اصلی را که به‌صورت فایل‌های CSV هستند، به عنوان ورودی در مسیر پردازش ETL محمد قرار دهم. هر فایل ورودی توسط کد محمد پردازش می‌شود و خروجی آن، پس از طی مراحل ETL، در مسیر مشخص‌شده (دایرکتوری output) ذخیره می‌شود.

از آنجا که شبکه none داکر جلوی هرگونه دسترسی غیرمجاز به شبکه را می‌گیرد، مطمئن هستم که داده‌های اصلی در این فرآیند کاملاً ایمن هستند.