
AWS IAM क्रेडेंशियल्स का उपयोग करके Kubernetes क्लस्टर में प्रमाणीकरण करने के लिए एक टूल
A tool to use AWS IAM credentials to authenticate to a Kubernetes cluster. The initial work on this tool was driven by Heptio. The project receives contributions from multiple community engineers and is currently maintained by Heptio and Amazon EKS OSS Engineers.
यदि आप AWS पर Kubernetes क्लस्टर चलाने वाले प्रशासक हैं, तो आपको पहले से ही क्लस्टर प्रावधान और अपडेट करने के लिए AWS IAM क्रेडेंशियल्स प्रबंधित करने की आवश्यकता होती है। AWS IAM Authenticator for Kubernetes का उपयोग करके, आप Kubernetes एक्सेस के लिए एक अलग क्रेडेंशियल प्रबंधित करने से बच जाते हैं। AWS IAM कई अच्छे गुण भी प्रदान करता है, जैसे ऑडिट ट्रेल (CloudTrail के माध्यम से) और 2FA/MFA अनिवार्य करना।
यदि आप AWS पर Kubernetes इंस्टॉलर बना रहे हैं, तो AWS IAM Authenticator for Kubernetes आपकी बूटस्ट्रैप प्रक्रिया को सरल बना सकता है।
आपको अपने नए इंस्टॉल किए गए क्लस्टर से प्रारंभिक एडमिन क्रेडेंशियल को किसी तरह सुरक्षित रूप से बाहर निकालने की आवश्यकता नहीं होगी।
इसके बजाय, आप क्लस्टर प्रावधान के समय एक समर्पित KubernetesAdmin भूमिका बना सकते हैं और Authenticator को क्लस्टर व्यवस्थापक लॉगिन की अनुमति देने के लिए सेट कर सकते हैं।
मान लें कि आपके पास AWS में चल रहा एक क्लस्टर है और आप AWS IAM Authenticator for Kubernetes समर्थन जोड़ना चाहते हैं, तो आपको निम्न कार्य करने होंगे:
सबसे पहले, आपको एक या अधिक IAM भूमिकाएँ बनानी होंगी जो आपके Kubernetes क्लस्टर के अंदर उपयोगकर्ताओं/समूहों से मैप की जाएँगी। ऐसा करने का सबसे आसान तरीका AWS Console में लॉग इन करना है:
यह आपके खाते में अधिकृत उपयोगकर्ताओं/भूमिकाओं द्वारा ग्रहण की जा सकने वाली बिना किसी अनुमति वाली IAM भूमिका बनाएगा। अपनी भूमिका के Amazon Resource Name (ARN) पर ध्यान दें, जिसकी आपको नीचे आवश्यकता होगी।
आप AWS Console के बजाय AWS CLI का उपयोग करके भी यह एक ही चरण में कर सकते हैं:```sh
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
POLICY=$(echo -n '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::'; echo -n "$ACCOUNT_ID"; echo -n ':root"},"Action":"sts:AssumeRole","Condition":{}}]}')
aws iam create-role
--role-name KubernetesAdmin
--description "Kubernetes administrator role (for AWS IAM Authenticator for Kubernetes)."
--assume-role-policy-document "$POLICY"
--output text
--query 'Role.Arn'
आप इस चरण को भी छोड़ सकते हैं और निम्नलिखित का उपयोग कर सकते हैं:
- एक मौजूदा role (जैसे cross-account access role)।
- एक IAM user (नीचे `mapUsers` देखें)।
- एक EC2 instance या एक federated role (नीचे `mapRoles` देखें)।
### 2. सर्वर चलाएं
सर्वर को आपके प्रत्येक मास्टर नोड पर DaemonSet के रूप में host networking के साथ चलाया जाना है, ताकि यह एक localhost पोर्ट को उजागर कर सके।
नमूना ConfigMap और DaemonSet कॉन्फ़िगरेशन के लिए, [`deploy/example.yaml`](https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/deploy/example.yaml) देखें।
इसे लागू करने से पहले, अपने क्लस्टर के लिए इन मानों को अपडेट करें:
- `config.yaml` में प्लेसहोल्डर IAM ARNs (`arn:aws:iam::000000000000:...`) बदलें।
- `clusterID` को अपने क्लस्टर के लिए एक अद्वितीय मान पर सेट करें।
- सत्यापित करें कि DaemonSet शेड्यूलिंग नियम आपके control-plane node labels/taints से मेल खाते हैं।
फिर इसे डिप्लॉय करें:```sh
kubectl apply -f deploy/example.yaml
kubectl -n kube-system rollout status daemonset/aws-iam-authenticator
kubectl -n kube-system get pods -l k8s-app=aws-iam-authenticator
जब पॉड कंट्रोल-प्लेन नोड पर चल रहा होता है, तो aws-iam-authenticator server होस्ट पर /etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml (या --generate-kubeconfig के माध्यम से कॉन्फ़िगर किया गया पथ) पर वेबहुक kubeconfig बनाएगा।
यदि आप एक स्वचालित इंस्टॉलर बना रहे हैं, तो आप aws-iam-authenticator init का उपयोग करके प्रमाणपत्र, कुंजी और वेबहुक kubeconfig फ़ाइलें आसानी से पहले से जनरेट कर सकते हैं।
यह कमांड फ़ाइलें जनरेट करेगा और उन्हें कॉन्फ़िगर किए गए आउटपुट निर्देशिकाओं में रखेगा।
आप API सर्वर शुरू करने से पहले प्रत्येक मास्टर नोड पर इसे चला सकते हैं। आप मास्टर नोड्स प्रोविज़न करने से पहले भी उन्हें जनरेट कर सकते हैं और उन्हें उपयुक्त होस्ट पथों में इंस्टॉल कर सकते हैं।
यदि आप फ़ाइलें पहले से जनरेट नहीं करते हैं, तो aws-iam-authenticator server उन्हें मांग पर जनरेट करेगा।
यह काम करता है, लेकिन इसके लिए आवश्यक है कि आप इंस्टॉलेशन के बाद अपने Kubernetes API सर्वर को पुनः आरंभ करें।
Kubernetes API, टोकन प्रमाणीकरण वेबहुक का उपयोग करके AWS IAM Authenticator for Kubernetes के साथ एकीकृत होता है।
जब आप aws-iam-authenticator server चलाते हैं, तो यह एक वेबहुक कॉन्फ़िगरेशन फ़ाइल जनरेट करेगा और उसे होस्ट फाइलसिस्टम पर सहेजेगा।
आपको अपने API सर्वर कॉन्फ़िगरेशन में एक अतिरिक्त फ़्लैग जोड़ने की आवश्यकता होगी:```
--authentication-token-webhook-config-file=/etc/kubernetes/aws-iam-authenticator/kubeconfig.yaml
कई क्लस्टरों पर, API server एक static pod के रूप में चलता है।
आप फ़्लैग को `/etc/kubernetes/manifests/kube-apiserver.yaml` में जोड़ सकते हैं।
सुनिश्चित करें कि होस्ट डायरेक्टरी `/etc/kubernetes/aws-iam-authenticator/` आपके API server pod में माउंट की गई है।
अपडेटेड static pod परिभाषा को लागू करने के लिए आपको अपने master node पर kubelet daemon को पुनः आरंभ करने की आवश्यकता हो सकती है:```
systemctl restart kubelet.service
सर्वर का डिफ़ॉल्ट व्यवहार मैपिंग को केवल अपनी कॉन्फ़िगरेशन फ़ाइल के
mapUsers और mapRoles फ़ील्ड से प्राप्त करना है। विवरण के लिए नीचे Full
Configuration Format देखें।
--backend-mode फ़्लैग का उपयोग करके, आप सर्वर को दो अतिरिक्त बैकएंड से
मैपिंग प्राप्त करने के लिए कॉन्फ़िगर कर सकते हैं: एक EKS-शैली ConfigMap
(--backend-mode=EKSConfigMap) या IAMIdentityMapping कस्टम संसाधन
(--backend-mode=CRD)। डिफ़ॉल्ट बैकएंड, सर्वर कॉन्फ़िगरेशन फ़ाइल
जो सर्वर पॉड द्वारा माउंट की जाती है, --backend-mode=MountedFile से मेल खाती है।