در منظر مدرن برنامههای بومی ابری، محیط امنیتی تغییر کرده است. مدلهای سنتی امنیت شبکه که بر اعتماد به همه چیز در داخل دیوار آتش استوار بودند، دیگر امکانپذیر نیستند. با گسترش میکروسرویسها و بارهای کاری کانتینری، معماری «اعتماد صفر» به استاندارد طلایی تبدیل شده است. این رویکرد بر اصل «هرگز اعتماد نکن، همیشه تأیید کن» عمل میکند. برای محیطهای کوبرنِتِس، مش سرویس ایستو (Istio) به عنوان ابزاری قدرتمند برای پیادهسازی این اصول اعتماد صفر در سطح زیرساخت ظهور کرده است.
گذار به اعتماد صفر در کوبرنِتِس
امنیت مبتنی بر اعتماد صفر مستلزم آن است که هر درخواست، صرفنظر از مبدأ آن، پیش از اعطای دسترسی احراز هویت و مجوزدهی شود. در یک خوشه استاندارد کوبرنِتِس، NetworkPolicies میتوانند ترافیک را بر اساس آدرسهای IP و پورتها محدود کنند، اما اغلب فاقد دقت لازم برای کنترل دسترسی ظریف بین سرویسها هستند. برای مثال، اطمینان از اینکه سرویس A فقط میتواند یک نقطه پایانی خاص را در سرویس B در ساعات کاری فراخوانی کند، به منطق فراتر از فیلتر کردن ساده بستهها نیاز دارد.
ایستو این شکاف را پر میکند و یک صفحه کنترل یکپارچه ارائه میدهد که جریان ترافیک را مدیریت کرده و سیاستها را در تمام سرویسها اعمال میکند. با بهرهگیری از سیاستهای مجوزدهی ایستو، توسعهدهندگان و اپراتورها میتوانند قوانین کنترل دسترسی مبتنی بر نقش (RBAC) را مستقیماً در داخل مش تعریف کنند و اطمینان حاصل کنند که تنها هویتهای مجاز میتوانند با یکدیگر ارتباط برقرار کنند.
درک سیاستهای مجوزدهی ایستو
ایستو از تعریف منبع سفارشی (CRD) کوبرنِتِس برای مجوزدهی استفاده میکند که به شما امکان میدهد قوانینی را تعریف کنید که مشخص میکنند چه کسی به چه منابعی دسترسی دارد. این سیاستها در پراکسی Envoy sidecar ارزیابی میشوند، که تضمین میکند اعمال آنها پیش از اینکه ترافیک حتی به کد برنامه شما برسد، انجام شود.
اجزای اصلی یک سیاست مجوزدهی ایستو عبارتند از:
- قوانین: شرایطی را که تحت آنها دسترسی مجاز یا رد میشود، تعریف میکنند.
- اقدامات: مشخص میکنند که اقدام ALLOW (اجازه) یا DENY (رد) باشد.
- موضوعات (Subjects): هویت مبدأ (منبع) که درخواست را ارسال میکند را شناسایی میکنند، که اغلب از گواهینامههای mutual TLS (mTLS) استخراج میشود.
مثال عملی: محدود کردن دسترسی
بیایید سناریویی را در نظر بگیریم که در آن یک سرویس front-end عمومی (frontend-v1) و یک API حساس back-end (backend-v1) دارید. میخواهید اطمینان حاصل کنید که فقط درخواستهای ارسالی از front-end اجازه دارند به back-end برسند و حتی در آن صورت، فقط روشهای خاص HTTP مجاز باشند.
ابتدا، اطمینان حاصل کنید که mTLS در فضای نام شما فعال است. بدون mTLS، ایستو نمیتواند سرویس مبدأ را به طور قابل اعتماد شناسایی کند و این امر سیاستهای مجوزدهی را بیاثر میسازد.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: prod-ns
spec:
mtls:
mode: STRICT
سپس، سیاست مجوزدهی را به سرویس back-end اعمال کنید. این سیاست به طور پیشفرض تمام درخواستها را رد میکند، مگر اینکه با قوانین خاصی مطابقت داشته باشند. در این مورد، ما فقط درخواستهای POST ارسالی از سرویس front-end را مجاز میکنیم.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: backend-policy
namespace: prod-ns
spec:
selector:
matchLabels:
app: backend-v1
rules:
- from:
- source:
principals: ["cluster.local/ns/prod-ns/sa/frontend-v1"]
to:
- operation:
methods: ["POST"]
paths: ["/api/v1/data"]
درک ترتیب ارزیابی بسیار حیاتی است. اگر چندین سیاست داشته باشید، ایستو آنها را در یک ترتیب خاص پردازش میکند. یک سیاست DENY (رد) بلافاصله ترافیک را مسدود میکند، حتی اگر یک سیاست ALLOW (اجازه) وجود داشته باشد. برعکس، اگر هیچ سیاست DENY با درخواست مطابقت نداشته باشد، یک سیاست ALLOW باید مطابقت یابد تا درخواست ادامه یابد.
بهترین شیوهها برای پیادهسازی
هنگام پیادهسازی امنیت مبتنی بر اعتماد صفر با ایستو، با حسابرسی ارتباطات سرویس به سرویس شروع کنید. از ابزارهای پایش ایستو برای درک اینکه کدام سرویسها با یکدیگر صحبت میکنند و شناسایی هرگونه الگوی ترافیک غیرمجاز یا مشکوک استفاده کنید. پس از کسب این بینش، میتوانید سیاستهای لیست مجاز (allow-list) ایجاد کنید که فقط ترافیک مشروع را مجاز میدارند.
علاوه بر این، از قرار دادن سیاستهای مجوزدهی بسیار کلی خودداری کنید. به جای اجازه دادن به ترافیک از یک فضای نام، حسابهای سرویس فردی را مشخص کنید. این کار شعاع انفجار را در صورت نفوذ به یک سرویس به حداقل میرساند. سیاستهای خود را به طور منظم بازبینی و بهروزرسانی کنید، زیرا معماری برنامه شما تکامل مییابد.
نتیجهگیری
پیادهسازی سیاستهای مجوزدهی ایستو یک گام حیاتی برای دستیابی به وضعیت امنیتی اعتماد صفر قوی در محیطهای کوبرنِتِس است. با انتقال تصمیمات امنیتی از لایه شبکه به مش سرویس، شما کنترل ظریفی بر ارتباطات بین سرویسها کسب میکنید. اگرچه پیکربندی اولیه نیازمند برنامهریزی دقیق و درک عمیق از جریانهای ترافیک برنامه شماست، اما منافع بلندمدت امنیت بهبودیافته، انطباق و شفافیت عملیاتی، آن را به سرمایهگذاریی بینظیر برای هر تیم DevOps تبدیل میکند. همانطور که به پذیرش فناوریهای بومی ابری ادامه میدهید، به خاطر داشته باشید که امنیت یک پیکربندی یکباره نیست، بلکه فرآیندی مستمر از تأیید و اصلاح است.