آموزش نصب و پیکربندی Cilium در Kubernetes – بخش ۶

cilium

در بخش ششم از سلسه مطلب «آموزش نصب و پیکربندی Cilium در Kubernetes» ، قصد داریم تا در مورد L7 Policy صحبت کنیم.

آزمایش و انجام HTTP-aware L7 Policy

در سناریوی ساده بالا، کافی بود که به tiefighter / xwing دسترسی کامل به API deathstar داده شود یا اصلاً دسترسی نداشته باشد. اما برای ارائه بالاترین امنیت (به عنوان مثال، enforce least-privilege isolation) بین میکروسرویس‌ها، هر سرویسی که API deathstar را فراخوانی می‌کند باید محدود به ایجاد مجموعه‌ای از درخواست‌های HTTP باشد که برای عملکرد درست لازم است. به عنوان مثال، در نظر بگیرید که سرویس deathstar برخی از maintenance API ها را expose می کند که نباید توسط فضاپیماهای امپراتوری به صورت تصادفی فراخوانی شوند. برای دیدن آن می توانید دستور زیر را اجرا کنید:

kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port

یک نمونه خروجی از اجرای دستور گفته شده را در تصویر پایین مشاهده می کنید:

ciliumدر حالی که این یک مثال گویا است، دسترسی غیرمجاز مانند بالا می‌تواند پیامدهای امنیتی نامطلوبی داشته باشد.

L7 Policy با Cilium و Kubernetes

cilium_http_l3_l4_l7_gsg

Cilium می‌تواند policy های لایه HTTP (یعنی L7) را برای محدود کردن URL‌هایی که tiefighter مجاز است به آن دسترسی پیدا کند، اعمال کند. در اینجا یک فایل policy به عنوان نمونه است که policy اصلی ما را با محدود کردن tiefighter به برقراری POST API call به /v1/request-landing و اجازه ندان به سایر call ها (از جمله PUT /v1/exhaust-port) گسترش می دهد.

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "rule1"
spec:
  description: "L7 policy to restrict access to specific HTTP call"
  endpointSelector:
    matchLabels:
      org: empire
      class: deathstar
  ingress:
  - fromEndpoints:
    - matchLabels:
        org: empire
    toPorts:
    - ports:
      - port: "80"
        protocol: TCP
      rules:
        http:
        - method: "POST"
          path: "/v1/request-landing"

 

بروزرسانی rule موجود جهت اعمال L7-aware policy برای محافظت از deathstar با استفاده از دستور زیر:

kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/v1.12/examples/minikube/sw_l3_l4_l7_policy.yaml

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

kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing

cilium-policyو این یکی آزمایش:

kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port

cilium-policyهمانطور که می بینید، با Cilium L7 security policies، ما می توانیم به tiefighter اجازه دهیم فقط به منابع API مورد نیاز در deathstar دسترسی داشته باشد و بدین ترتیب یک رویکرد امنیتی «least privilege» را برای ارتباط بین میکروسرویس ها پیاده سازی کنیم. توجه داشته باشید که مسیر دقیقاً با URL مطابقت دارد، برای مثال اگر می‌خواهید هر چیزی در /v1/ را allow کنید، باید از یک regular expression استفاده کنید:

path: "/v1/.*"

می توانید L7 policy را با استفاده از kubectl مشاهده کنید:

kubectl describe ciliumnetworkpolicies

و از طریق cilium CLI :

kubectl -n kube-system exec cilium-rwmwr -- cilium policy get

همچنین می توان درخواست های HTTP را به صورت live با استفاده از «cilium monitor» نظارت کرد:

kubectl exec -it -n kube-system cilium-rwmwr -- cilium monitor -v --type l7

cilium-policyخروجی بالا یک پاسخ موفقیت آمیز به یک درخواست POST و به دنبال آن یک درخواست PUT را نشان می دهد که توسط L7 policy رد شده است.

تمیزکاری:

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

kubectl delete -f https://raw.githubusercontent.com/cilium/cilium/1.11.5/examples/minikube/http-sw-app.yaml
kubectl delete cnp rule1

ادامه دهید …

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

https://cilium.io

https://docs.cilium.io/en/stable

https://github.com/cilium/cilium

 

همچنین جهت آزمایش سناریوهای مختلف با استفاده از Cilium می توانید از Lab های  آن به آدرس زیر استفاده کنید:

https://isovalent.com/resource-library/labs/

امید است تا این سلسه مطالب برای شما مفید بوده باشد.

 

1 نظر
  1. Maha raja می گوید

    Bitte schauen

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.