प्रतिनिधि इंटरव्यू विषय

बैकएंड इंटरव्यू: आप एक रियूज़ेबल GitHub Actions वर्कफ़्लो को कैसे सुरक्षित करेंगे?

बैकएंडकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

आप एक रियूज़ेबल GitHub Actions वर्कफ़्लो को कैसे सुरक्षित करेंगे?

प्रॉम्प्ट और उपयोग का मामला (Use case)

आपकी टीम बिल्ड, टेस्ट और रिलीज़ चरणों को रिपॉजिटरीज़ में शेयर किए जाने वाले रियूज़ेबल वर्कफ़्लो में निकालती है। कॉलर और कॉल्ड वर्कफ़्लो के बीच इनपुट, आउटपुट, सीक्रेट्स, GITHUB_TOKEN परमिशन और वर्ज़न संदर्भों के लिए अनुबंध (contract) डिज़ाइन करें। बताएं कि आप प्रिविलेज एस्केलेशन, सप्लाई-चेन ड्रिफ्ट और कॉन्टेक्स्ट कन्फ्यूज़न को कैसे रोकते हैं।

साक्षात्कारकर्ता क्या टेस्ट कर रहा है

  • क्या आप समझते हैं कि रियूज़ेबल वर्कफ़्लो को जॉब स्तर पर कॉल किया जाता है, न कि साधारण चरणों (steps) के रूप में।
  • क्या आप समझा सकते हैं कि कॉलर की GITHUB_TOKEN परमिशन को कॉल्ड वर्कफ़्लो द्वारा केवल डाउनग्रेड किया जा सकता है, एलिवेट (बढ़ाया) नहीं जा सकता।
  • क्या आप secrets, एन्वायरनमेंट वेरिएबल्स और github संदर्भ के जोखिम को न्यूनतम करते हैं।
  • क्या आप नेस्टिंग सीमाओं, कॉल सीमाओं, संदर्भ पिनिंग और संगठन की नीतियों को संभालते हैं।

उत्तर देने से पहले स्पष्ट करने योग्य प्रश्न

  • क्या पुन: उपयोग क्रॉस-रिपॉजिटरी, क्रॉस-ऑर्गनाइज़ेशन या एक ही रिपॉजिटरी के भीतर है, और कौन सी विजिबिलिटी नीतियां लागू होती हैं?
  • क्या कॉल्ड वर्कफ़्लो केवल आर्टिफ़ैक्ट्स बनाता है, या यह डिप्लॉय, रिलीज़ या रिपॉजिटरी में वापस लिख सकता है?
  • क्या सीक्रेट्स व्यक्तिगत रूप से पास किए जाते हैं, ऑर्गनाइज़ेशन स्कोप पर इनहेरिट किए जाते हैं, या किसी एन्वायरनमेंट नियम द्वारा सुरक्षित होते हैं?
  • क्या अपग्रेड किसी ब्रांच, रिलीज़ टैग, या इम्यूटेबल कमिट संदर्भ को ट्रैक करने चाहिए?

30-सेकंड का उत्तर ढांचा (Framework)

मैं एक संकीर्ण इंटरफ़ेस परिभाषित करूँगा: workflow_call टाइप्ड इनपुट्स, व्यक्तिगत सीक्रेट्स और आवश्यक आउटपुट्स घोषित करता है; कॉलर जॉब न्यूनतम permissions सेट करता है, और कॉल्ड वर्कफ़्लो उन्हें फिर से सख्त करता है। रिलीज़ और बिल्ड वर्कफ़्लो अलग रहते हैं, जबकि संरक्षित वातावरण (protected environments) संवेदनशील डिप्लॉयमेंट को नियंत्रित करते हैं। संदर्भ रिव्यूड कमिट्स या नियंत्रित टैग्स का उपयोग करते हैं, और संगठन की नीति अनुमत कार्यों और रियूज़ेबल वर्कफ़्लो को सीमित करती है। अंत में, ऑडिट लॉग्स, री-रन व्यवहार और परमिशन रिग्रेशन परीक्षण अनुबंध को सत्यापित करते हैं।

चरण-दर-चरण गहन विश्लेषण

1. रियूज़ेबल वर्कफ़्लो की सीमा

एक रियूज़ेबल वर्कफ़्लो workflow_call द्वारा ट्रिगर किया जाता है, और कॉलर एक जॉब पर uses का उपयोग करता है। कॉलिंग जॉब प्रलेखित कीज़ (keys) जैसे with, secrets, permissions, strategy और needs तक सीमित है; यह कोई सामान्य चरण नहीं है जहाँ मनमाने कमांड्स इंजेक्ट किए जा सकें।

2. इनपुट्स, आउटपुट्स और प्रकार की सीमाएं (Type constraints)

कॉल्ड वर्कफ़्लो में आवश्यक इनपुट्स, डिफॉल्ट्स और प्रकार घोषित करें ताकि एक अमान्य कॉलर अनुबंध पार्सिंग के दौरान ही विफल हो जाए। रिलीज़ ऑटोमेशन के लिए आवश्यक केवल आर्टिफ़ैक्ट डाइजेस्ट, वर्ज़न या परिणाम स्थितियों को ही एक्सपोज़ करें; कभी भी टोकन, पूर्ण लॉग या आंतरिक पथ वापस न करें।

3. सीक्रेट्स को व्यक्तिगत रूप से पास करें

एक स्पष्ट secrets मैप को प्राथमिकता दें जो केवल एक डिप्लॉयमेंट एक्शन के लिए आवश्यक क्रेडेंशियल पास करता है। secrets: inherit कॉलर के लिए उपलब्ध सभी सीक्रेट्स को पास करता है और एक ही संगठन के कसकर बंधे मामले में उपयुक्त हो सकता है, लेकिन यह ऑडिट और लीकेज सतह का विस्तार करता है और इसे ट्रस्ट सीमाओं के पार टाला जाना चाहिए।

4. GITHUB_TOKEN परमिशन डाउनग्रेड करें

कॉलर जॉब को permissions स्पष्ट रूप से घोषित करना चाहिए, जैसे केवल-पढ़ने योग्य स्रोत एक्सेस और आर्टिफ़ैक्ट राइट एक्सेस। GitHub प्रलेखित करता है कि कॉल्ड वर्कफ़्लो द्वारा इनहेरिट की गई परमिशन समान रह सकती हैं या अधिक प्रतिबंधात्मक हो सकती हैं, कभी भी अधिक शक्तिशाली नहीं हो सकतीं। इसलिए उच्च-विशेषाधिकार क्रियाओं के लिए कॉलर में स्पष्ट अनुमति और एक दर्ज समीक्षा तर्क की आवश्यकता होती है।

5. github संदर्भ का स्वामित्व

कॉल्ड वर्कफ़्लो के अंदर github संदर्भ कॉलर वर्कफ़्लो से जुड़ा होता है। यह न मानें कि कॉल्ड रिपॉजिटरी की ब्रांच, इवेंट या परमिशन कॉलर की जानकारी को बदल देती हैं। यदि स्रोत रिपॉजिटरी, कमिट या एक्टर की पहचान आवश्यक है, तो इसे स्पष्ट रूप से पास करें और जहां उपयुक्त हो लॉग में इसे छिपाएं (redact करें)।

6. संदर्भ और सप्लाई-चेन ड्रिफ्ट

वर्कफ़्लो ब्रांचेस, टैग्स या कमिट्स का संदर्भ ले सकते हैं। ब्रांचेस बदलती हैं और टैग्स को फिर से लक्षित किया जा सकता है; प्रोडक्शन पाथ को रिव्यूड इम्यूटेबल कमिट्स या स्वीकार्य संदर्भों को प्रतिबंधित करने वाली संगठन नीति का उपयोग करना चाहिए। GitHub Actions नीति क्रियाओं के लिए पूर्ण लंबाई वाले कमिट SHA की मांग कर सकती है और अनुमत स्रोतों को सीमित कर सकती है।

7. नेस्टिंग, मेट्रिसेस और समवर्तीता (Concurrency)

नेस्टेड रियूज़ेबल वर्कफ़्लो दस स्तरों तक पहुँच सकते हैं, और एक वर्कफ़्लो फ़ाइल अधिकतम पचास अनूठे रियूज़ेबल वर्कफ़्लो को जोड़ सकती है। एक मैट्रिक्स एक रियूज़ेबल वर्कफ़्लो को कॉल कर सकता है, लेकिन डुप्लिकेट रिलीज़ या आपसी रद्दीकरण से बचने के लिए प्रत्येक संयोजन को संसाधन सीमाओं, एक कॉनक्रेन्सी समूह और रद्दीकरण नीति की आवश्यकता होती है।

8. ऑडिटिंग, री-रन और रोलबैक

कॉलर रिपॉजिटरी, कमिट, इनपुट डाइजेस्ट, परमिशन घोषणा और आर्टिफ़ैक्ट डाइजेस्ट को रिकॉर्ड करें। सभी जॉब्स को फिर से चलाने पर संदर्भ फिर से रीसॉल्व हो सकता है, जबकि विफल जॉब्स को फिर से चलाने पर पहले प्रयास के कमिट का उपयोग हो सकता है, इसलिए ऑडिट रिकॉर्ड में वास्तव में रीसॉल्व किया गया वर्ज़न होना चाहिए। रोलबैक एक सत्यापित संदर्भ पर स्विच करता है और संरक्षित-वातावरण प्राधिकरण को रद्द करता है।

समझौते और सीमाएं (Trade-offs and boundaries)

  • inherit कॉन्फ़िगरेशन को कम करता है लेकिन सीक्रेट सीमा को अंतर्निहित बना देता है; क्रॉस-ऑर्गनाइज़ेशन या मल्टी-टेनेंट प्लेटफ़ॉर्म को सीक्रेट्स को स्पष्ट रूप से मैप करना चाहिए।
  • कमिट्स को पिन करने से पुनरुत्पादकता (reproducibility) में सुधार होता है, लेकिन अपग्रेड के लिए स्वचालित अपडेट, समीक्षा और रोलबैक विंडो की आवश्यकता होती है।
  • डिप्लॉयमेंट को एक सामान्य वर्कफ़्लो में पैकेज करने से दोहराव समाप्त होता है लेकिन पर्यावरण सुरक्षा छिप सकती है; प्रोडक्शन डिप्लॉयमेंट में अनुमोदन सीमाओं को दृश्यमान रखना चाहिए।
  • टोकन परमिशन केवल API को अधिकृत करती हैं; वे रनर फ़ाइलों, नेटवर्क या तृतीय-पक्ष क्रियाओं को भरोसेमंद नहीं बनाती हैं। अविश्वसनीय कोड को अभी भी अलगाव (isolation) की आवश्यकता होती है।

कार्यान्वयन योजना और साक्ष्य

  1. अघोषित फ़ील्ड्स को अस्वीकार करते हुए, workflow_call इनपुट, आउटपुट और व्यक्तिगत-सीक्रेट अनुबंध लिखें।
  2. प्रत्येक कॉलर जॉब के लिए एक परमिशन मैट्रिक्स जनरेट करें और सत्यापित करें कि कॉल्ड वर्कफ़्लो GITHUB_TOKEN को एलिवेट नहीं कर सकता है।
  3. प्रोडक्शन संदर्भों को रिव्यूड कमिट्स पर पिन करें, एक संगठन अनुमति-सूची कॉन्फ़िगर करें और SHA नीति की जाँच करें।
  4. नकली सीक्रेट्स और एक प्रतिबंधित रिपॉजिटरी के साथ पुल-रिक्वेस्ट, क्रॉस-रिपॉजिटरी, नेस्टेड और री-रन अभ्यास चलाएं।
  5. GitHub के रियूज़-वर्कफ़्लो, वर्कफ़्लो-सिंटैक्स और Actions-सेटिंग्स दस्तावेज़ीकरण के विरुद्ध कार्यान्वयन की समीक्षा करें।

सामान्य गलतियाँ और अनुवर्ती प्रश्न

गलती 1: रियूज़ेबल वर्कफ़्लो को एक एक्शन स्टेप के रूप में मानना

इसे फ़ील्ड्स और संदर्भों के एक अलग सेट के साथ जॉब स्तर पर कॉल किया जाता है। स्टेप सिंटैक्स को सीधे कॉपी करने से पार्सिंग विफल हो सकती है या गलत परमिशन धारणाएं बन सकती हैं।

गलती 2: डिफॉल्ट रूप से secrets.inherit का उपयोग करना

इनहेरिटेंस कॉल्ड वर्कफ़्लो को वे सभी सीक्रेट्स देता है जिन्हें कॉलर एक्सेस कर सकता है। जब तक ट्रस्ट सीमा और संगठन का दायरा स्पष्ट न हो, सीक्रेट्स को व्यक्तिगत रूप से पास करें।

गलती 3: केवल कॉल्ड वर्कफ़्लो में उच्च परमिशन सेट करना

कॉल्ड वर्कफ़्लो कॉलर के टोकन को एलिवेट नहीं कर सकता है। उच्च विशेषाधिकारों को कॉलर जॉब में घोषित किया जाना चाहिए और समीक्षा और ऑडिट के माध्यम से उचित ठहराया जाना चाहिए।

अनुवर्ती प्रश्न: टैग संदर्भ अभी भी जोखिम भरे क्यों हैं?

टैग बदल सकते हैं, इसलिए री-रन या बाद के निष्पादन में एक अलग कमिट रीसॉल्व हो सकता है। प्रोडक्शन को एक रिव्यूड कमिट पिन करना चाहिए या संगठन नीति के साथ अनुमत संदर्भों को प्रतिबंधित करना चाहिए।

अनुवर्ती प्रश्न: आप कैसे साबित करेंगे कि सीक्रेट्स लीक नहीं हुए हैं?

नकली सीक्रेट्स और न्यूनतम विशेषाधिकार के साथ पूरा पाथ चलाएं, लॉग्स, आउटपुट्स, आर्टिफ़ैक्ट्स और एरर पाथ का निरीक्षण करें, और inherit, एन्वायरनमेंट वेरिएबल्स और तीसरे पक्ष की एक्शन रीड एक्सेस का ऑडिट करें।

सार्वजनिक स्रोत

संबंधित प्रश्न