جلدي يا بعد ۾، ڪنهن به سسٽم جي آپريشن ۾، سيڪيورٽي جو مسئلو پيدا ٿئي ٿو: تصديق ڪرڻ، حقن جي الڳ ٿيڻ، آڊيٽنگ ۽ ٻين ڪمن کي يقيني بڻائڻ. اڳ ۾ ئي Kubernetes لاء ٺهيل آهي ڪيترائي حل, جيڪي توهان کي معيار جي تعميل حاصل ڪرڻ جي اجازت ڏين ٿيون جيتوڻيڪ تمام گهڻي گهرج واري ماحول ۾ ... ساڳيو مواد K8s جي تعمير ٿيل ميڪانيزم ۾ لاڳو ڪيل سيڪيورٽي جي بنيادي حصن لاء وقف آهي. سڀ کان پهريان، اهو انهن لاءِ ڪارآمد هوندو جيڪي ڪبرنيٽس سان واقف ٿيڻ شروع ڪري رهيا آهن - سيڪيورٽي سان لاڳاپيل مسئلن جي مطالعي لاءِ شروعاتي نقطي جي طور تي.
تصديق
ڪبرنيٽس ۾ صارفين جا ٻه قسم آهن:
سروس اڪائونٽس - ڪبرنيٽس API پاران منظم ڪيل اڪائونٽس؛
رڪنن - "عام" استعمال ڪندڙ خارجي، آزاد خدمتن پاران منظم.
انهن قسمن جي وچ ۾ بنيادي فرق اهو آهي ته سروس اڪائونٽس لاءِ Kubernetes API ۾ خاص شيون آهن (انهن کي سڏيو ويندو آهي - ServiceAccounts)، جيڪي نالا اسپيس سان ڳنڍيل آهن ۽ رازداري قسم جي شين ۾ ڪلستر ۾ محفوظ ڪيل اختيار واري ڊيٽا جو هڪ سيٽ. اهڙا استعمال ڪندڙ (سروس اڪائونٽس) بنيادي طور تي Kubernetes ڪلستر ۾ هلندڙ عملن جي Kubernetes API تائين رسائي جي حقن کي منظم ڪرڻ لاءِ آهن.
عام استعمال ڪندڙن کي ڪبرنيٽس API ۾ داخلائون نه هونديون آهن: انهن کي لازمي طور تي خارجي ميکانيزم ذريعي منظم ڪيو وڃي. اهي مقصد آهن ماڻهن يا عملن لاءِ جيڪي ڪلستر کان ٻاهر رهن ٿا.
هر API درخواست يا ته هڪ خدمت کاتي سان لاڳاپيل آهي، هڪ صارف، يا گمنام سمجهيو ويندو آهي.
استعمال ڪندڙ جي تصديق واري ڊيٽا شامل آهن:
کاتي جو نالو - استعمال ڪندڙ جو نالو (ڪيس حساس!)؛
UID - هڪ مشين-پڙهڻ لائق استعمال ڪندڙ جي سڃاڻپ واري اسٽرنگ جيڪا ”وزرنيم کان وڌيڪ مسلسل ۽ منفرد“؛
Kubernetes استعمال ڪري سگھن ٿا وڏي تعداد ۾ تصديق واري ميڪانيزم: X509 سرٽيفڪيٽ، بيئر ٽوڪن، تصديق ڪندڙ پراکسي، HTTP بنيادي آٿ. انهن ميکانيزم کي استعمال ڪندي، توهان اختياري اسڪيمن جي وڏي تعداد تي عمل ڪري سگهو ٿا: هڪ مستحڪم فائل کان پاسورڊ سان OpenID OAuth2 تائين.
ان کان علاوه، اهو ممڪن آهي ته ڪيترن ئي اختياري اسڪيمن کي استعمال ڪرڻ لاء هڪ ئي وقت. ڊفالٽ طور، ڪلستر استعمال ڪري ٿو:
سروس اڪائونٽ ٽوڪن - سروس اڪائونٽس لاءِ؛
X509 - صارفين لاء.
سروس اڪائونٽس کي منظم ڪرڻ بابت سوال هن مضمون جي دائري کان ٻاهر آهي، پر انهن لاء جيڪي هن مسئلي سان پاڻ کي وڌيڪ تفصيل سان واقف ڪرڻ چاهيندا آهن، آئون توهان سان شروع ڪرڻ جي صلاح ڪريان ٿو. سرڪاري دستاويز صفحا. اسان انهي مسئلي تي ويجھي نظر وجهنداسين ته ڪيئن X509 سرٽيفڪيٽ ڪم ڪن ٿا.
Kubernetes ڪلستر CA چاٻين کي استعمال ڪندي سرٽيفڪيٽ جي درخواست تي عمل ڪندي، صارف سرٽيفڪيٽ حاصل ڪرڻ (هڪ سرٽيفڪيٽ حاصل ڪرڻ لاء، توهان کي هڪ اڪائونٽ استعمال ڪرڻ گهرجي جنهن کي ڪبرنيٽس ڪلستر CA ڪيچ تائين رسائي آهي، جيڪو ڊفالٽ طور تي واقع آهي. /etc/kubernetes/pki/ca.key):
اڪائونٽن ۽ سرورز جي وچ ۾ ترتيب کي منتقل ڪرڻ کي آسان بڻائڻ لاءِ، هيٺ ڏنل ڪنجين جي قدرن کي تبديل ڪرڻ لاءِ مفيد آهي:
certificate-authority
client-certificate
client-key
هن کي ڪرڻ لاء، توهان بنيادي 64 استعمال ڪندي انهن ۾ بيان ڪيل فائلن کي انڪوڊ ڪري سگهو ٿا ۽ انهن کي ترتيب ۾ رجسٽر ڪري سگهو ٿا، چابي جي نالي سان لافاني شامل ڪري سگهو ٿا. -data، i.e. حاصل ڪرڻ certificate-authority-data ۽ پسند ڪريو.
kubeadm سان سرٽيفڪيٽ
ڇڏڻ سان ڪبرنيٽز 1.15 سرٽيفڪيٽ سان ڪم ڪرڻ تمام آسان ٿي چڪو آهي ان جي الفا ورزن جي مدد جي مهرباني kubeadm افاديت. مثال طور، هي اهو آهي جيڪو صارف جي چابمن سان ٺاھ جوڙ واري فائيل ٺاهي سگھي ٿو ھاڻي جھڙو نظر اچي ٿو:
kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200
ڊفالٽ بااختيار اڪائونٽ کي ڪلستر تي هلائڻ جا حق نه آهن. اجازتون ڏيڻ لاءِ، Kubernetes هڪ اختيار ڏيڻ واري ميڪانيزم کي لاڳو ڪري ٿو.
نسخو 1.6 کان اڳ، ڪبرنيٽس استعمال ڪيو هڪ اختيار جو قسم سڏيو ويندو آهي ABAC (صفت جي بنياد تي رسائي ڪنٽرول). ان بابت تفصيل هن ۾ ملي سگهي ٿو سرڪاري دستاويز. اهو طريقو هن وقت ميراث سمجهيو ويندو آهي، پر توهان اڃا تائين ان کي استعمال ڪري سگهو ٿا ٻين تصديق جي قسمن سان گڏ.
ڪلستر تائين رسائي جي حقن کي ورهائڻ جو موجوده (۽ وڌيڪ لچڪدار) طريقو سڏيو ويندو آهي آر بي سي (ڪردار جي بنياد تي رسائي ڪنٽرول). اهو نسخو کان مستحڪم قرار ڏنو ويو آهي ڪبرنيٽز 1.8. RBAC هڪ حقن جي ماڊل کي لاڳو ڪري ٿو جنهن ۾ هر شيء جيڪا واضح طور تي اجازت نه آهي منع ٿيل آهي. RBAC کي فعال ڪرڻ لاء، توهان کي شروع ڪرڻ جي ضرورت آهي Kubernetes api-server parameter سان --authorization-mode=RBAC. پيرا ميٽرز منشور ۾ مقرر ڪيا ويا آهن api-server ترتيب سان، جيڪو ڊفالٽ طور تي رستي تي واقع آهي /etc/kubernetes/manifests/kube-apiserver.yaml، سيڪشن ۾ command. بهرحال، RBAC اڳ ۾ ئي ڊفالٽ طور تي چالو ڪيو ويو آهي، تنهنڪري گهڻو ڪري توهان کي ان بابت پريشان نه ٿيڻ گهرجي: توهان هن جي تصديق ڪري سگهو ٿا قدر authorization-mode (اڳ ۾ ئي ذڪر ڪيو ويو آهي kube-apiserver.yaml). رستي جي ذريعي، ان جي معنى جي وچ ۾ اختيار جا ٻيا قسم ٿي سگهن ٿا (node, webhook, always allow)، پر اسان انهن جي غور کي مواد جي دائري کان ٻاهر ڇڏينداسين.
رستي ۾، اسان اڳ ۾ ئي شايع ڪيو آهي مضمون RBAC سان ڪم ڪرڻ جي اصولن ۽ خاصيتن جي ڪافي تفصيلي وضاحت سان، تنهنڪري اڳتي هلي مان پاڻ کي بنيادي ڳالهين ۽ مثالن جي مختصر فهرست تائين محدود ڪندس.
ھيٺيون API ادارا استعمال ڪيا ويا آھن ڪبرنيٽس ۾ رسائي کي ڪنٽرول ڪرڻ لاءِ RBAC ذريعي:
Role и ClusterRole - ڪردار جيڪي رسائي جي حقن کي بيان ڪن ٿا:
Role توھان کي اجازت ڏئي ٿو بيان ڪرڻ جي حق جي نالي جي اندر اندر؛
ClusterRole - ڪلستر جي اندر، بشمول ڪلستر-مخصوص شين جهڙوڪ نوڊس، غير وسيلا urls (يعني ڪبرنيٽس وسيلن سان لاڳاپيل ناهي - مثال طور، /version, /logs, /api*);
RoleBinding и ClusterRoleBinding - پابند ڪرڻ لاء استعمال ڪيو Role и ClusterRole هڪ صارف، صارف گروپ يا سروس اڪائونٽ ڏانهن.
ڪردار ۽ رول بائنڊنگ ادارا محدود آهن نالا اسپيس، يعني. ساڳئي نالي جي جڳهه ۾ هجڻ گهرجي. بهرحال، هڪ رول بائنڊنگ هڪ ڪلستر رول جو حوالو ڏئي سگهي ٿو، جيڪو توهان کي اجازت ڏئي ٿو ته عام اجازتن جو هڪ سيٽ ٺاهي ۽ انهن کي استعمال ڪندي رسائي کي ڪنٽرول ڪري.
ڪردارن ۾ شامل ڪيل قاعدن جي سيٽ استعمال ڪندي حقن جي وضاحت ڪن ٿا:
وسيلن جا نالا (resourceNames) - ان صورت ۾ جڏهن توهان کي هڪ مخصوص وسيلن تائين رسائي فراهم ڪرڻ جي ضرورت آهي، ۽ هن قسم جي سڀني وسيلن تائين نه.
Kubernetes ۾ اختيار جو وڌيڪ تفصيلي تجزيو صفحي تي ملي سگهي ٿو سرڪاري دستاويز. ان جي بدران (يا بلڪه، ان کان علاوه)، مان مثال ڏيندس جيڪي هن جي ڪم کي بيان ڪن ٿا.
RBAC ادارن جا مثال
سادو Role، جيڪو توهان کي پوڊس جي لسٽ ۽ اسٽيٽس حاصل ڪرڻ جي اجازت ڏئي ٿو ۽ انهن جي نگراني ڪرڻ جي نالي جي جڳهه ۾ target-namespace:
مثال طور ClusterRole، جيڪو توهان کي پوڊ جي لسٽ ۽ اسٽيٽس حاصل ڪرڻ جي اجازت ڏئي ٿو ۽ انهن کي پوري ڪلستر ۾ مانيٽر ڪري ٿو:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# секции "namespace" нет, так как ClusterRole задействует весь кластер
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
مثال طور RoleBinding، جيڪو صارف کي اجازت ڏئي ٿو mynewuser "پڙھيو" پوڊس namespace ۾ my-namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: target-namespace
subjects:
- kind: User
name: mynewuser # имя пользователя зависимо от регистра!
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role # здесь должно быть “Role” или “ClusterRole”
name: pod-reader # имя Role, что находится в том же namespace,
# или имя ClusterRole, использование которой
# хотим разрешить пользователю
apiGroup: rbac.authorization.k8s.io
واقعي جي چڪاس
Schematically، Kubernetes فن تعمير هيٺ ڏنل نمائندگي ڪري سگهجي ٿو:
سسٽم آڊيٽنگ Kubernetes ۾ هڪ دلچسپ خصوصيت آهي، جيڪا ڊفالٽ طور تي بند ٿيل آهي. اهو توهان کي سڀني ڪالن کي لاگ ان ڪرڻ جي اجازت ڏئي ٿو Kubernetes API. جئين توهان اندازو لڳائي سگهو ٿا، ڪلستر جي حالت جي نگراني ۽ تبديل ڪرڻ سان لاڳاپيل سڀئي عمل هن API ذريعي ڪيا ويا آهن. ان جي صلاحيتن جي سٺي وضاحت (معمولي طور تي) ۾ ملي سگهي ٿي سرڪاري دستاويز K8s. اڳتي هلي ڪوشش ڪندس ته موضوع کي آسان ٻولي ۾ پيش ڪريان.
۽ ائين، آڊيٽنگ کي فعال ڪرڻ لاء، اسان کي ٽي گهربل پيٽرولر پاس ڪرڻ گهرجن api-server ۾ ڪنٽينر، جيڪي هيٺ ڏنل تفصيل سان بيان ڪيا ويا آهن:
انهن ٽن ضروري پيرا ميٽرن کان علاوه، آڊيٽنگ سان لاڳاپيل ڪيتريون ئي اضافي سيٽنگون آهن: لاگ گھمڻ کان وٺي ويب هِڪ وضاحتن تائين. لاگ گھمڻ جي ماپ جا مثال:
--audit-log-maxbackup=10
--audit-log-maxsize=100
--audit-log-maxage=7
پر اسان انهن تي وڌيڪ تفصيل سان نه رهنداسين - توهان سڀني تفصيلن ۾ ڳولي سگهو ٿا kube-apiserver دستاويز.
جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، سڀئي پيرا ميٽر مقرر ڪيا ويا آهن منشور ۾ api-server جي ترتيب سان (ڊفالٽ طرفان /etc/kubernetes/manifests/kube-apiserver.yaml)، سيڪشن ۾ command. اچو ته 3 گھربل پيرا ميٽرز ڏانھن موٽون ۽ انھن جو تجزيو ڪريون:
audit-policy-file YAML فائل ڏانهن رستو جيڪو آڊٽ پاليسي بيان ڪري ٿو. اسان بعد ۾ ان جي مواد ڏانهن موٽنداسين، پر هاڻي لاء آئون نوٽ ڪندس ته فائل کي پڙهڻ جي قابل هجڻ گهرجي api-server پروسيس. تنهن ڪري، ان کي ڪنٽينر اندر نصب ڪرڻ ضروري آهي، جنهن لاء توهان هيٺ ڏنل ڪوڊ شامل ڪري سگهو ٿا ترتيب جي مناسب حصن ۾:
audit-log-path - لاگ فائل ڏانهن رستو. رستو لازمي طور تي اي پي-سرور جي عمل تائين رسائي لائق هجڻ گهرجي، تنهنڪري اسان ان جي چڙهڻ کي ساڳئي طريقي سان بيان ڪريون ٿا:
ڪنهن به قدم کي ڇڏڻ لاءِ توهان استعمال ڪري سگهو ٿا omitStages.
پاليسي فائل ۾، اسان مختلف لاگنگ سطحن سان ڪيترن ئي حصن کي بيان ڪري سگھون ٿا. پاليسي جي وضاحت ۾ مليل پهريون ملندڙ قاعدو لاڳو ڪيو ويندو.
ڪوبيليٽ ڊيمون مينيفيسٽ ۾ تبديلين کي مانيٽر ڪري ٿو api-server configuration سان ۽، جيڪڏهن ڪو به معلوم ٿئي ٿو، ڪنٽينر کي api-server سان ٻيهر شروع ڪري ٿو. پر اتي هڪ اهم تفصيل آهي: پاليسي فائل ۾ تبديليون ان کي نظر انداز ڪيو ويندو. پاليسي فائل ۾ تبديليون ڪرڻ کان پوء، توهان کي دستي طور تي api-server کي ٻيهر شروع ڪرڻو پوندو. جيئن ته api-server طور شروع ڪيو ويو آهي جامد پوڊ، ٽيم kubectl delete ان کي ٻيهر شروع ڪرڻ جو سبب نه ٿيندو. توھان کي اھو دستي طور ڪرڻو پوندو docker stop kube-masters تي، جتي آڊٽ پاليسي تبديل ڪئي وئي آهي:
جڏهن آڊيٽنگ کي چالو ڪيو وڃي، اهو ياد رکڻ ضروري آهي kube-apiserver تي لوڊ وڌائي ٿو. خاص طور تي، ميموري واپرائڻ درخواست جي حوالي سان ذخيرو ڪرڻ لاء وڌائي ٿو. لاگنگ شروع ٿئي ٿي صرف جوابي هيڊر موڪلڻ کان پوءِ. لوڊ پڻ آڊٽ پاليسي جي ترتيب تي منحصر آهي.
پاليسين جا مثال
اچو ته مثالن کي استعمال ڪندي پاليسي فائلن جي جوڙجڪ کي ڏسو.
هتي هڪ سادي فائل آهي policyهر شي کي سطح تي لاگ ان ڪرڻ لاء Metadata:
پاليسي ۾ توهان استعمال ڪندڙن جي هڪ فهرست بيان ڪري سگهو ٿا (Users и ServiceAccounts) ۽ استعمال ڪندڙ گروپ. مثال طور، هي آهي ته اسان سسٽم استعمال ڪندڙن کي نظر انداز ڪنداسين، پر هر شي کي سطح تي لاگ ان ڪريو Request:
آڊٽ جي واقعن کي جلدي جواب ڏيڻ لاء، ممڪن آهي وضاحت ڪريو webhook. هن مسئلي ۾ شامل آهي سرڪاري دستاويز، مان ان کي ڇڏي ڏيندس هن مضمون جي دائري کان ٻاهر.
نتيجو
آرٽيڪل Kubernetes ڪلسٽرز ۾ بنيادي حفاظتي ميڪانيزم جو هڪ جائزو پيش ڪري ٿو، جيڪي توهان کي ذاتي صارف اڪائونٽ ٺاهڻ، انهن جي حقن کي الڳ ڪرڻ، ۽ انهن جي عملن کي رڪارڊ ڪرڻ جي اجازت ڏين ٿا. مون کي اميد آهي ته اهو انهن لاء مفيد ٿيندو جيڪي نظرياتي يا عملي طور تي اهڙن مسئلن سان منهن ڏيڻ وارا آهن. مان پڻ سفارش ڪريان ٿو ته توهان ڪبرنيٽس ۾ سيڪيورٽي جي موضوع تي ٻين مواد جي فهرست پڙهي، جيڪا "PS" ۾ ڏنل آهي - شايد انهن مان توهان کي انهن مسئلن تي ضروري تفصيل ملندا جيڪي توهان سان لاڳاپيل آهن.