AWS DevOps, devops, kubernetes, دوآپس, کلاسترینگ, کوبرنتیز, مقالات

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

کلاستر را ایمن کنید

در این مقاله به عنوان یک راهنمای جامع برای امنیت Kubernetes ، با هدف کمک به توسعه دهندگان از برنامه ها و داده های خود استفاده می شود.

 

امنیت Kubernetes در چشم انداز دیجیتال امروز ضروری است. با افزایش پذیرش کانتینرسازی و میکروسرویس ها، Kubernetes به راه حلی برای هماهنگی و مدیریت کانتینرها تبدیل شده است. با این حال، این همچنین به این معنی است که به هدف مهاجمان تبدیل شده است و امنیت Kubernetes را در اولویت قرار می دهد. ماهیت پویا و پیچیده Kubernetes نیاز به یک رویکرد فعال و جامع برای امنیت دارد. این شامل ایمن سازی خود خوشه Kubernetes، بارهای کاری در حال اجرا بر روی آن و کل خط لوله CI/CD است. مهم است که از تنظیمات ایمن اطمینان حاصل کنید، حداقل دسترسی را اعمال کنید، بارهای کاری را جدا کنید، آسیب‌پذیری‌ها را به طور منظم اسکن کنید، و داده‌های حساس را رمزگذاری کنید. این مقاله به عنوان یک راهنمای جامع برای امنیت Kubernetes، با هدف کمک به توسعه‌دهندگان برای محافظت از برنامه‌ها و داده‌های خود عمل می‌کند.

ملاحظات مهم امنیتی Kubernetes

 

قبل از پرداختن به ملاحظات کلیدی امنیتی، درک معماری بسیار مهم است. در Kubernetes، صفحه کنترل با گره ها از طریق Kubernetes API ارتباط برقرار می کند، که سرور API آن را در معرض دید قرار می دهد. گره ها از kubelet برای گزارش دادن به صفحه کنترل و ارتباط با etcd برای خواندن جزئیات پیکربندی یا نوشتن مقادیر جدید استفاده می کنند. Kubernetes از معماری سرویس گیرنده-سرور با دو نوع اصلی سرور پیروی می کند: صفحه کنترل و گره ها.

Control Plane

 

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

کنترل های امنیتی مهم برای هر یک به شرح زیر است:

 

API server (kube-apiserver)

از کنترل دسترسی مبتنی بر نقش (RBAC) برای محدود کردن افرادی که می توانند به سرور API دسترسی داشته باشند و اقداماتی که می توانند انجام دهند استفاده کنید. گزارش های حسابرسی را برای ردیابی و تجزیه و تحلیل هر درخواستی که به سرور API ارسال می شود، فعال کنید. از امنیت لایه انتقال (TLS) برای تمام ترافیک سرور API استفاده کنید.

Controller manager (kube-controller-manager)  and scheduler (kube-scheduler)

این مؤلفه ها فقط باید توسط مدیران قابل دسترسی باشد. از TLS برای اتصالات استفاده کنید و مطمئن شوید که فقط از طریق شبکه محلی قابل دسترسی هستند.

etcd

این یکی از حیاتی ترین مؤلفه ها از منظر امنیتی است، زیرا تمام داده های خوشه ای را ذخیره می کند. فقط باید توسط سرور API قابل دسترسی باشد. از آن با کنترل های دسترسی قوی و رمزگذاری، چه در حال عبور و چه در حالت استراحت، محافظت کنید.

Nodes

 

گره ها (که قبلا به عنوان گره های کارگر شناخته می شدند) بارهای کاری واقعی را اجرا می کنند. هر گره شامل خدمات لازم برای مدیریت شبکه بین کانتینرها، ارتباط با صفحه کنترل و تخصیص منابع به کانتینرها است. اجزای یک گره عبارتند از kubelet، kube-proxy و Container Runtime. در زیر کنترل های امنیتی وجود دارد که باید در نظر گرفته شوند:

kubelet

Kubelet می تواند یک سطح حمله بالقوه باشد. دسترسی API به kubelet را محدود کنید و از TLS برای اتصالات استفاده کنید.

kube-proxy

این جزء باید با اطمینان از اینکه فقط توسط اجزای صفحه کنترل قابل دسترسی است، ایمن شود.

Container runtime

مطمئن شوید که از تصاویر کانتینر امن و به‌روز استفاده می‌کنید. به طور منظم تصاویر را برای آسیب پذیری اسکن کنید. از Pod Security Admission برای محدود کردن دسترسی کانتینر به منابع استفاده کنید.

Pods

پادها کوچکترین واحدهای محاسباتی قابل استقرار هستند که می توانید در Kubernetes ایجاد و مدیریت کنید. یک Pod محفظه یک برنامه (یا چندین کانتینر)، منابع ذخیره سازی، یک IP شبکه منحصر به فرد، و گزینه هایی را در بر می گیرد که نحوه اجرای کانتینر(ها) را کنترل می کند.

کنترل‌های امنیتی زیر باید در نظر گرفته شوند:

  • از فضاهای نام برای جداسازی Pods خود از یکدیگر استفاده کنید.
  • برای کنترل اینکه کدام پادها می توانند با یکدیگر ارتباط برقرار کنند، سیاست های شبکه را اجرا کنید.
  • امتیازات یک Pod را فقط به چیزی که برای عملکرد نیاز دارد محدود کنید.
  • از Kubernetes Secrets برای مدیریت اطلاعات حساسی که Pods باید به آنها دسترسی داشته باشد، استفاده کنید.
  • مطمئن شوید کد برنامه شما ایمن است. حتی امن ترین پیکربندی Kubernetes نمی تواند در برابر آسیب پذیری های سطح برنامه محافظت کند.

 

دستورالعمل های عمومی برای امنیت Kubernetes

 

بیایید چند دستورالعمل کلی برای امنیت Kubernetes را مرور کنیم.

Kubernetes Hardening

 

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

RBAC

RBAC را برای تنظیم دسترسی به Kubernetes API خود پیاده کنید. کمترین امتیاز لازم را به کاربران، گروه ها و حساب های سرویس اختصاص دهید. خود Kubernetes RBAC را به عنوان مکانیزم داخلی برای کنترل دسترسی ارائه می دهد.

Network policies

خط‌مشی‌های شبکه را برای تعیین اینکه کدام پادها می‌توانند با یکدیگر ارتباط برقرار کنند، تعریف کنید. این به عنوان یک فایروال اساسی برای Pods شما عمل می کند. می توانید از Project Calico یا Cilium برای اجرای سیاست های شبکه استفاده کنید.

etcd security

ارتباطات همتا به همتا و ارتباط مشتری به سرور etcd را با TLS متقابل پیکربندی کنید. احراز هویت داخلی etcd و پشتیبانی RBAC را فعال کنید.

Audit logging

ورود حسابرسی را در سرور API با استفاده از پرچم –audit-log-path فعال کنید. خط مشی حسابرسی خود را برای ثبت جزئیات لازم تعریف کنید. Fluentd یا Fluent Bit اغلب برای پردازش لاگ های حسابرسی Kubernetes استفاده می شود.

Update and patch

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

Admission controllers

کنترل‌کننده‌های پذیرش، افزونه‌های داخلی هستند که به کنترل نحوه استفاده از خوشه کمک می‌کنند. کنترلرهای پذیرش خاص مانند AlwaysPullImages را فعال کنید تا مطمئن شوید که تصاویر همیشه از رجیستری خارج می شوند و DenyEscalatingExec برای جلوگیری از اعطای امتیازات بیشتر به یک Pod نسبت به والد آن.

DevSecOps and Kubernetes Security

 

هدف DevSecOps ادغام اقدامات امنیتی در فرآیند DevOps است. این شامل معرفی امنیت زودتر در چرخه عمر توسعه برنامه، به جای تکیه بر اقدامات امنیتی مرحله پایانی است. در یک محیط Kubernetes، DevSecOps می تواند شامل موارد زیر باشد:

Secure CI/CD pipelines

خطوط لوله CI/CD معمولاً در استقرار Kubernetes استفاده می شود. رویکرد DevSecOps با یکپارچه‌سازی بررسی‌ها و آزمایش‌های امنیتی در هر مرحله از خط لوله، تضمین می‌کند که این خطوط لوله ایمن و عاری از آسیب‌پذیری هستند. از روش هایی مانند تجزیه و تحلیل کد استاتیک، تجزیه و تحلیل پویا و بررسی وابستگی در مراحل کدگذاری و ساخت استفاده کنید.

Configuration management

یکربندی‌های Kubernetes می‌توانند پیچیده باشند و پیکربندی‌های نادرست می‌تواند منجر به آسیب‌پذیری‌های امنیتی شود. اقدامات DevSecOps شامل مدیریت و بررسی مداوم این تنظیمات برای اطمینان از امنیت است. از ابزارهای مدیریت پیکربندی خودکار، مانند Ansible یا Terraform برای اطمینان از تنظیمات سازگار و ایمن استفاده کنید. مرتباً تنظیمات را در صورت لزوم بررسی و به روز کنید.

Image scanning

تصاویر کانتینر مورد استفاده در Kubernetes باید برای آسیب‌پذیری‌ها به عنوان بخشی از خط لوله CI/CD اسکن شوند. این یک تمرین کلیدی DevSecOps است. از ابزارهای منبع باز مانند Clair یا Grype برای اسکن منظم تصاویر کانتینر خود برای آسیب پذیری های شناخته شده استفاده کنید.

Runtime security

DevSecOps همچنین شامل نظارت و ایمن سازی برنامه زمانی است که در محیط Kubernetes در حال اجرا است. پیاده سازی امنیت زمان اجرا از طریق ابزارهایی که می توانند رفتار غیرعادی را تشخیص دهند.

امنیت زنجیره تامین و امنیت Kubernetes

 

امنیت زنجیره تامین شامل ایمن سازی زنجیره تامین نرم افزار است – از اجزای مورد استفاده برای ساخت نرم افزار تا زیرساخت ها و فرآیندهای مورد استفاده برای ساخت و استقرار آن.

در یک محیط Kubernetes، امنیت زنجیره تامین می تواند شامل موارد زیر باشد:

Image assurance

اطمینان از اینکه تصاویر کانتینری که در استقرارهای Kubernetes خود استفاده می کنید از منابع قابل اعتماد هستند، دستکاری نشده و فاقد آسیب پذیری های شناخته شده هستند بسیار مهم است. از Docker Content Trust یا Notary برای امضای تصاویر خود و تأیید امضاها قبل از استقرار استفاده کنید. از رجیستری های خصوصی مانند Harbor یا Quay استفاده کنید و آنها را با استفاده از TLS و کنترل های دسترسی ایمن کنید.

Dependency management

برنامه های Kubernetes احتمالاً به کتابخانه ها و مؤلفه های خارجی بستگی دارند. مهم است که مطمئن شوید این وابستگی ها امن و به روز هستند. با استفاده از ابزارهایی مانند OWASP DependencyCheck به طور مرتب وابستگی های خود را از نظر آسیب پذیری بررسی کنید.

Secure build processes

 

ابزارها و فرآیندهای مورد استفاده برای ساخت برنامه شما و ایجاد تصاویر کانتینر شما باید ایمن باشند. این می تواند شامل ایمن سازی خطوط لوله CI/CD و استفاده از تصاویر امضا شده باشد. از ابزارهای DevOps مانند Jenkins یا CircleCI استفاده کنید تا مطمئن شوید که به درستی ایمن و به روز شده اند.

Secrets management

اطلاعات حساس مانند کلیدهای API، گذرواژه‌ها و گواهی‌ها را با خیال راحت مدیریت کنید. از Kubernetes Secrets یا ابزارهای مدیریت Secret خارجی برای ذخیره و توزیع امن Secrets استفاده کنید.

Governance

 

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

Policy review

به طور منظم خط‌مشی‌های امنیتی خود را بررسی و به‌روزرسانی کنید تا آنها را با آخرین بهترین شیوه‌های امنیتی و الزامات انطباق هماهنگ نگه دارید. ابزارهایی مانند kube-score یا kube-bench (برنامه Go که بررسی می کند که آیا Kubernetes به طور ایمن مستقر شده است) می توان برای ارزیابی میزان رعایت سیاست های امنیتی استفاده کرد.

Documentation

تمام مراحل امنیتی را مستند کنید و مطمئن شوید که تیم شما از آنها آگاه است. از یک مخزن متمرکز و تحت کنترل نسخه مانند GitHub برای اسناد خود استفاده کنید.

Compliance audit

مرتباً خوشه خود را از نظر انطباق با خط مشی های امنیتی خود بازرسی کنید. از ابزارهایی مانند kube-bench یا kube-score برای چک های خودکار استفاده کنید.

Namespaces

از فضاهای نام داخلی Kubernetes برای جداسازی پروژه ها یا تیم های مختلف استفاده کنید. برای اعمال محدودیت‌های دسترسی و ارتباطات، سیاست‌های RBAC و شبکه را در سطح فضای نام اعمال کنید.

Collaborative vendor security

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

ملاحظات دیگر

 

علاوه بر اقدامات امنیتی اساسی، چندین ملاحظات پیشرفته برای یک استراتژی امنیتی قوی Kubernetes حیاتی هستند:

Monitoring

از یک راه حل نظارتی جامع مانند Prometheus یا Grafana برای نظارت بر خوشه خود استفاده کنید. هشدارهایی را برای هرگونه نشانه ای از فعالیت مشکوک تنظیم کنید.

Incident response

 

یک طرح واکنش به حادثه داشته باشید. این باید شامل مراحل شناسایی، جداسازی و کاهش حوادث امنیتی باشد. پشته های ELK (Elasticsearch، Logstash، Kibana) یا EFK (Elasticsearch، Fluentd، Kibana) می توانند برای مدیریت گزارش و تجزیه و تحلیل در هنگام پاسخ به حادثه استفاده شوند.

Backup

 

به طور منظم از داده های etcd خود با استفاده از ویژگی Snapshot داخلی etcd نسخه پشتیبان تهیه کنید.

Resource quotas

 

از سهمیه های منابع و محدوده های محدود استفاده کنید تا از مصرف بیش از حد منابع خوشه ای توسط هر برنامه ای جلوگیری شود.

Service mesh

 

استفاده از مش سرویس را برای ویژگی‌های امنیتی و قابلیت مشاهده بیشتر در نظر بگیرید. این می تواند TLS متقابل، کنترل ترافیک دقیق و داده های دقیق تله متری را ارائه دهد. Istio و Linkerd پیاده سازی های مش سرویس منبع باز محبوب هستند.

نتیجه

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

منبع: https://dzone.com/articles/secure-the-cluster

دیدگاهتان را بنویسید