Kubernetes Pivoting to Clouds
GCP
यदि आप GCP में एक k8s क्लस्टर चला रहे हैं, तो आपको संभावतः चाहिए होगा कि क्लस्टर के अंदर चल रहे कुछ एप्लिकेशन को GCP का कुछ एक्सेस हो। इसे करने के दो सामान्य तरीके हैं:
GCP-SA कुंजी को सीक्रेट के रूप में माउंट करना
GCP के एक कुबरनेट्स एप्लिकेशन को एक्सेस देने का एक सामान्य तरीका है:
एक GCP सर्विस अकाउंट बनाएं
उसमें चाहिए अनुमतियों को बाइंड करें
बनाए गए SA की एक json कुंजी डाउनलोड करें
पॉड के अंदर एक सीक्रेट के रूप में माउंट करें
उस पथ को पॉड के अंदर GOOGLE_APPLICATION_CREDENTIALS पर्याय के रूप में सेट करें जहां json है।
इसलिए, एक हमलावर के रूप में, यदि आप किसी पॉड के अंदर एक कंटेनर को कंप्रोमाइज़ करते हैं, तो आपको उस env variable और GCP क्रेडेंशियल्स के साथ json फ़ाइलें की जांच करनी चाहिए।
GSA json को KSA सीक्रेट से संबंधित करना
एक GSA को GKE क्लस्टर को एक्सेस देने का एक तरीका है उन्हें इस तरीके से बाइंड करके:
एक Kubernetes सीक्रेट बनाएं जिसमें आप GKE क्लस्टर के लिए पहुंच देना चाहते हैं GCP सर्विस अकाउंट के क्रेडेंशियल्स हों। आप इसे
gcloud
कमांड-लाइन टूल का उपयोग करके कर सकते हैं, जैसा कि निम्न उदाहरण में दिखाया गया है:
निम्नलिखित कमांड का उपयोग करके Kubernetes सीक्रेट को Kubernetes सेवा खाते से बाइंड करें:
दूसरे स्टेप में, GSA के क्रेडेंशियल्स को KSA के सीक्रेट के रूप में सेट किया गया था। फिर, अगर आप GKE क्लस्टर के अंदर से उस सीक्रेट को पढ़ सकते हैं, तो आप उस GCP सर्विस अकाउंट में उन्नति कर सकते हैं।
GKE Workload Identity
वर्कलोड आइडेंटिटी के साथ, हम एक Kubernetes सर्विस अकाउंट को कॉन्फ़िगर कर सकते हैं ताकि वह एक Google सर्विस अकाउंट की तरह कार्य करे। Kubernetes सर्विस अकाउंट के साथ चल रहे पॉड्स को Google Cloud APIs तक पहुंचते समय अपने आप Google सर्विस अकाउंट के रूप में प्रमाणित किया जाएगा।
इस व्यवहार को सक्षम करने के लिए पहली श्रृंखला के स्टेप यह है कि GCP में वर्कलोड आइडेंटिटी को सक्षम करें (स्टेप्स) और उस GCP सर्विस अकाउंट को बनाएं जिसे आप k8s को अनुकरण करना चाहते हैं।
एक नए क्लस्टर पर वर्कलोड आइडेंटिटी को सक्षम करें
नया नोडपूल बनाएं / अपडेट करें (ऑटोपायलट क्लस्टर्स को इसकी आवश्यकता नहीं होती है)
K8s में GCP सेवा खाता बनाएं जिसे अनुकरण करने के लिए GCP अनुमतियाँ हों:
क्लस्टर से कनेक्ट करें और सेवा अकाउंट बनाएं जिसे उपयोग करना है।
GSA को KSA के साथ बाइंड करें
KSA के साथ एक पॉड चलाएं और GSA की पहुंच की जांच करें:
निम्नलिखित कमांड की प्रमाणितीकरण के लिए जांच करें, यदि आवश्यक हो:
एक हमलावर के रूप में K8s के अंदर आपको iam.gke.io/gcp-service-account
एनोटेशन के साथ SAs की खोज करनी चाहिए क्योंकि यह संकेत देता है कि SA किसी चीज़ तक पहुंच सकता है GCP में। एक और विकल्प हो सकता है कि क्लस्टर में हर KSA का दुरुपयोग करने का प्रयास करें और देखें कि क्या पहुंच है।
GCP से हमेशा संबंधित होता है कि बाइंडिंग को गणना करें और जानें कि क्या पहुंच आप Kubernetes के अंदर SAs को दे रहे हैं।
यह एक स्क्रिप्ट है जिसका उपयोग करके आप आसानी से सभी पॉड परिभाषाओं पर इटरेट कर सकते हैं जो उस एनोटेशन की खोज कर रहे हैं:
AWS
Kiam और Kube2IAM (Pods के लिए IAM रोल)
IAM रोल्स को Pods को देने का (पुराना) एक तरीका है Kiam या Kube2IAM सर्वर का उपयोग करना। मूल रूप से, आपको अपने क्लस्टर में एक डेमनसेट चलाने की आवश्यकता होगी जिसमें एक इंजीनियरी आईएएम रोल होगा। यह डेमनसेट ही वह होगा जो पॉड्स को आईएएम रोल्स तक पहुंच देगा जो इसे आवश्यक होंगे।
सबसे पहले, आपको नेमस्पेस के अंदर पहुंच सकने वाले रोल्स को कॉन्फ़िगर करना होगा, और आप इसे नेमस्पेस ऑब्जेक्ट के अंदर एक एनोटेशन के साथ करते हैं:
एक बार नेमस्पेस IAM रोल्स के साथ कॉन्फ़िगर हो जाता है, पॉड्स को आपके पास हो सकते हैं, आप प्रत्येक पॉड पर चाहते हैं उस रोल को निर्दिष्ट करने के लिए कुछ इस तरह से इंडिकेट कर सकते हैं:
एक हमलावर के रूप में, यदि आप पॉड या नेमस्पेस में या कुबे-सिस्टम में चल रहे कियाम/क्यूबे2आईएएम सर्वर में ये एनोटेशन्स मिलते हैं, तो आप पहले से ही पॉड्स द्वारा उपयोग की जाने वाली हर भूमिका की अनुकरण कर सकते हैं और अधिक (यदि आपके पास AWS खाते तक पहुंच है तो भूमिकाओं की जांच करें)।
IAM भूमिका के साथ पॉड बनाएँ
इंडिकेट करने के लिए IAM भूमिका को कियाम/क्यूबे2आईएएम भूमिका के साथ एक ही AWS खाते में होनी चाहिए और उस भूमिका को इसका उपयोग करने की अनुमति होनी चाहिए।
IAM रोल के लिए K8s सेवा खातों के माध्यम से OIDC
यह AWS द्वारा अनुशंसित तरीका है।
सबसे पहले, आपको क्लस्टर के लिए OIDC प्रदाता बनाना होगा।
फिर आपको एक IAM रोल बनाना होगा जिसमें सेवा खाता को आवश्यकता होगी।
IAM रोल और सेवा खाता के बीच विश्वास संबंध बनाएं (या नामस्थान जो रोल को नामस्थान के सभी सेवा खातों के लिए पहुंच देता है)। विश्वास संबंध मुख्य रूप से OIDC प्रदाता नाम, नामस्थान नाम और सेवा खाता नाम की जांच करेगा।
अंत में, एक एसए को बनाएं जिसमें एक एआरएन की संकेतित करने वाली टिप्पणी हो, और उस एसए के साथ चल रहे पॉड्स को रोल के टोकन का उपयोग करने की अनुमति होगी। टोकन एक फ़ाइल में लिखा होता है और पथ
AWS_WEB_IDENTITY_TOKEN_FILE
में निर्दिष्ट किया जाता है (डिफ़ॉल्ट:/var/run/secrets/eks.amazonaws.com/serviceaccount/token
)।
आवश्यकता होने पर /var/run/secrets/eks.amazonaws.com/serviceaccount/token
से टोकन का उपयोग करके aws प्राप्त करने के लिए निम्नलिखित को चलाएं:
एक हमलावर के रूप में, यदि आप एक K8s क्लस्टर की गणना कर सकते हैं, तो उस एनोटेशन के साथ सेवा खातों की जांच करें ताकि आप AWS में उन्नत कर सकें। इसके लिए, बस एक IAM विशेषाधिकृत सेवा खाता का उपयोग करके एक पॉड को एक्जीक्यूट/बनाएं और टोकन चुरा लें।
इसके अलावा, यदि आप एक पॉड के अंदर हैं, तो AWS_ROLE_ARN और AWS_WEB_IDENTITY_TOKEN जैसे env variables की जांच करें।
कभी-कभी एक भूमिका की विश्वासनीयता नीति गलत रूप से कॉन्फ़िगर की जा सकती है और इसके बजाय उम्मीद की जाने वाली सेवा खाते को AssumeRole उपयोग करने की अनुमति देती है, यह सभी सेवा खातों को देती है। इसलिए, यदि आप एक नियंत्रित सेवा खाते पर एक एनोटेशन लिखने के क्षमता हैं, तो आप भूमिका तक पहुंच सकते हैं।
अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जांच करें:
क्लस्टर में IAM भूमिकाओं के साथ पॉड और SAs ढूंढें
यह एक स्क्रिप्ट है जो आसानी से सभी पॉड और SAs की परिभाषाओं पर ढूंढ़ता है उस एनोटेशन के लिए:
नोड IAM रोल
पिछले खंड में IAM रोल को कैसे पॉड के साथ चुरा सकते हैं के बारे में था, लेकिन ध्यान दें कि K8s क्लस्टर का एक नोड एक क्लाउड के अंदर एक इंस्टेंस होगा। इसका मतलब है कि नोड के पास एक नया IAM रोल होने की बहुत अधिक संभावना है जिसे आप चुरा सकते हैं (ध्यान दें कि आमतौर पर K8s क्लस्टर के सभी नोडों के पास एक ही IAM रोल होता है, इसलिए हर नोड की जांच करने का प्रयास करना वापस नहीं हो सकता है।)
हालांकि, नोड से मेटाडेटा एंडपॉइंट तक पहुंचने के लिए एक महत्वपूर्ण आवश्यकता है, आपको नोड में होना चाहिए (ssh सत्र?) या कम से कम एक ही नेटवर्क होना चाहिए:
IAM रोल टोकन चुराएं
पहले हमने बात की थी कि कैसे पॉड्स को IAM रोल जोड़ें या फिर कैसे नोड पर भागने के लिए IAM रोल चुराएं जो इंस्टेंस इसके साथ जुड़ा होता है।
आप निम्नलिखित स्क्रिप्ट का उपयोग करके अपने नए मेहनती IAM रोल क्रेडेंशियल्स चुरा सकते हैं:
संदर्भ
Last updated