गाइड
कॉन्फ़िगरेशन और सीक्रेट कहाँ रखें
सामान्य सेटिंग को क्रेडेंशियल से अलग रखें और स्थानीय विकास, CI तथा प्रोडक्शन में आवश्यक पहुँच के अनुसार उनका संग्रह स्थान चुनें।
कौन-सा फ़ॉर्मैट चुनें?
अपने कार्यप्रवाह में हर फ़ाइल की भूमिका के अनुसार चुनें।
- साझा डिफ़ॉल्ट मान → बिना सीक्रेट वाले उदाहरण ही रिपॉज़िटरी में कमिट करें
- हर डेवलपर की स्थानीय सेटिंग → टूल समर्थन करे तो स्थानीय .env इस्तेमाल करें और उसे Git से बाहर रखें
- CI क्रेडेंशियल → CI प्रदाता का सीक्रेट स्टोर इस्तेमाल करें और पहुँच सीमित रखें
- प्रोडक्शन और कंटेनर → रनटाइम प्लेटफ़ॉर्म की सीक्रेट सुविधा इस्तेमाल करें और केवल ज़रूरी सेवाओं को अनुमति दें
- लीक की आशंका → क्रेडेंशियल रद्द या बदलें; फ़ाइल हटाना पर्याप्त नहीं
सेटिंग और सीक्रेट को अलग रखें
सेवा URL और फ़ीचर फ़्लैग जैसी गैर-संवेदनशील सेटिंग को पासवर्ड, API key और निजी key जैसे क्रेडेंशियल से अलग तरीके से संभालें। असली क्रेडेंशियल कोड में न लिखें और उनमें वास्तविक मान वाली फ़ाइलें साझा रिपॉज़िटरी में कमिट न करें। पहले जाँचें कि ऐप कौन-से कॉन्फ़िगरेशन तरीके स्वीकार करता है।
स्थानीय .env फ़ाइलों को Git से बाहर रखें
टूल समर्थन करे तो हर डेवलपर के स्थानीय मान .env फ़ाइल में रखें और केवल वेरिएबल नामों व नमूना मानों वाला .env.example साझा करें। असली .env को .gitignore में जोड़ें और जाँचें कि Git उसे पहले से ट्रैक तो नहीं कर रहा। Git की अनदेखी नियमावली सुरक्षित भंडार नहीं है और पुराने इतिहास से मान नहीं हटाती।
CI में न्यूनतम अधिकार वाला सीक्रेट स्टोर इस्तेमाल करें
GitHub Actions जैसे CI सिस्टम में क्रेडेंशियल को workflow फ़ाइलों में लिखने के बजाय प्रदाता की सीक्रेट सुविधा से जोड़ें। पहुँच केवल ज़रूरी रिपॉज़िटरी, वातावरण और जॉब तक सीमित करें; टोकन को केवल आवश्यक अधिकार दें; और मानों को लॉग में छापने से बचें। लॉग में अपने-आप छिपाना हर बदले हुए मान या कमांड आउटपुट को छिपाने की गारंटी नहीं देता।
प्रोडक्शन रनटाइम से सीक्रेट उपलब्ध कराएँ
प्रोडक्शन में होस्टिंग या क्लाउड प्रदाता के सीक्रेट स्टोर को प्राथमिकता दें और सीमित करें कि कौन-सी तैनाती तथा सेवा हर मान पढ़ सकती है। Docker Compose स्पष्ट अनुमति वाली सेवाओं में सीक्रेट को फ़ाइल के रूप में माउंट कर सकता है; क्षमताएँ और सीमाएँ प्लेटफ़ॉर्म के अनुसार बदलती हैं, इसलिए वास्तविक रनटाइम का दस्तावेज़ देखें। समर्थन उपलब्ध हो तो लंबे समय तक चलने वाली key की जगह OIDC जैसे अल्पकालिक क्रेडेंशियल पर विचार करें।
उजागर क्रेडेंशियल रद्द या बदलें
यदि सीक्रेट किसी commit, CI लॉग या बातचीत में आ गया हो सकता है, तो दिखाई देने वाली प्रति हटाना पर्याप्त नहीं है। पहले संबंधित key या token रद्द करें या बदलें, फिर पहुँच लॉग और संभावित उपयोग की जाँच करें। इसके बाद ज़रूरत के अनुसार रिपॉज़िटरी इतिहास और लॉग संभालें तथा दोबारा ऐसा होने से रोकने के लिए पहुँच नियंत्रण कड़े करें।
उपयुक्त फ़ॉर्मैट
.env
इसके लिए उपयुक्त: .env फ़ाइलों का समर्थन करने वाले टूल में स्थानीय मान लोड करना
इसके लिए कम उपयुक्त: सीक्रेट को बिना सुरक्षा साझा करना या रखना
.gitignore
इसके लिए उपयुक्त: अभी तक ट्रैक न हुई स्थानीय .env फ़ाइलों को गलती से जुड़ने से रोकना
इसके लिए कम उपयुक्त: सीक्रेट रद्द करना या Git इतिहास से पहले से ट्रैक किए मान हटाना
निर्यात से पहले जाँचें
- केवल .env और .gitignore से सीक्रेट सुरक्षित नहीं होते; Git ट्रैकिंग स्थिति, CI लॉग, बैकअप और रनटाइम सीक्रेट स्टोर भी जाँचें।
- मास्किंग बदले हुए मान या हर कमांड आउटपुट को छिपा नहीं सकती।
- लीक की आशंका हो तो केवल फ़ाइल न हटाएँ; क्रेडेंशियल रद्द करें या बदलें।
गाइड
संदर्भ और विनिर्देश
- The Twelve-Factor App — The Twelve-Factor App: Config
- Git Project — gitignore — Specifies intentionally untracked files to ignore
- Docker — Manage sensitive data securely with secrets
- Docker — Best practices for working with environment variables in Docker Compose
- GitHub — Using secrets in GitHub Actions
- GitHub — Secure use reference