एक नए सीक्रेट को एक कुंजी पहचानकर्ता के तहत प्रकाशित करके, एक मापी गई ग्रेस विंडो के दौरान पुराने और नए सामग्री को दोहरी रूप से स्वीकार करते हुए, और केवल देखे गए कवरेज के बाद पुराने सीक्रेट को रद्द करके ज़ीरो-डाउनटाइम सीक्रेट रोटेशन को परिभाषित करता है।
पैकेज स्थिति: संदर्भ संदर्भ मानव समीक्षा के लिए तैयार। अनुबंध और परीक्षण परिदृश्य पूर्ण हैं, लेकिन यह दावा नहीं किया गया है कि किसी अपनाने वाली कार्यान्वयन ने उन्हें पारित किया है।
निर्णय
उत्पादन सीक्रेट्स को बिना हार्ड कट के घुमाएं। अगले सीक्रेट को एक अलग कुंजी पहचानकर्ता के साथ प्रकाशित करें। एक ग्रेस विंडो के दौरान, सत्यापनकर्ता वर्तमान और अगले सामग्री दोनों को दोहरी रूप से स्वीकार करते हैं। साइनर केवल तब स्विच करते हैं जब एक निर्दिष्ट अंश उदाहरणों ने पुनः लोड किया हो। पिछले पहचानकर्ता को केवल तभी रद्द करें जब मेट्रिक्स ने देखे गए कवरेज को दिखाया हो, न कि जब कैलेंडर टाइमर फायर हो। यदि अगली सामग्री गलत व्यवहार करती है तो एबॉर्ट सत्यापनकर्ताओं को वर्तमान पहचानकर्ता पर वापस पिन करता है।
दायरा
- HMAC कुंजी, API टोकन, और समान सममित या अस्पष्ट सीक्रेट्स जो लाइव सेवाओं द्वारा उपयोग किए जाते हैं।
- प्रकाशक, सत्यापनकर्ता, और साइनर भूमिकाएँ; पुनः लोड संकेत; कवरेज मेट्रिक्स; एबॉर्ट।
dual-read-window.yamlमें प्रलेखित दोहरी-पढ़ने की विंडो।
इस ब्लॉक के बाहर
- प्रमाणपत्र जारी करना और सार्वजनिक-कुंजी अवसंरचना जीवनचक्र।
- CI कैसे तैनाती-समय सीक्रेट्स प्राप्त करता है; संबंधित CI न्यूनतम-विशेषाधिकार ब्लॉक देखें।
- मानव पासवर्ड रीसेट या सत्र कुकीज़।
अनुबंध
- हर सीक्रेट संस्करण के पास एक कुंजी पहचानकर्ता होता है जो सिफरटेक्स्ट या MAC के साथ चलता है, न कि एक एकल बिना लेबल वाले स्लॉट।
- जब
dual_acceptसत्य है, तो सत्यापनकर्ता दोनोंcurrent_key_idऔरnext_key_idस्वीकार करते हैं और किसी अन्य पहचानकर्ता को अस्वीकार करते हैं। - साइनर कटओवर स्थिति तक
current_key_idजारी करते हैं, फिर केवलnext_key_idजारी करते हैं। current_key_idका रद्द करना तब तक अस्वीकार किया जाता है जब तक किnext_key_idपरmin_observed_requestsऔरcoverage_ratioपूरी न हो।- उदाहरण हार्टबीट्स को
max_unreloaded_secondsके भीतर पुनः लोड दिखाना चाहिए अन्यथा कटओवर अवरुद्ध हो जाता है। - एबॉर्ट वर्तमान कुंजी पर एकल-कुंजी स्वीकृति पुनर्स्थापित करता है और अगले संस्करण को उत्पादन के लिए नहीं चिह्नित करता है।
कार्यान्वयन मार्गदर्शन
- कुंजी पहचानकर्ता को एक लिफाफा फ़ील्ड में ले जाएँ जिसे पार्सर छोड़ नहीं सकते।
- दोहरी-स्वीकृति दो स्थिर-समय सत्यापन हैं, विलयित कुंजी नहीं।
- कवरेज kid-लेबल वाले सफलता मेट्रिक्स से आता है, तैनाती चेकबॉक्स से नहीं।
विफलता प्रबंधन और सुरक्षा उपाय
- अज्ञात kid बंद हो जाता है। कवरेज गायब होने पर इसे शून्य माना जाता है, इसलिए रद्द करना अस्वीकार किया जाता है।
- यदि
next_key_idप्रकाशित नहीं किया जा सकता, तो रोटेशन शुरू नहीं होता। - जब ग्रेस समाप्त हो जाता है और कवरेज नहीं होता, तो स्वचालित रद्द न करें; संचालन को पेज करें।
सत्यापन और संचालन
min_observed_requestsसे ऊपर दोहरी-स्वीकृति, साइनर कटओवर, और रद्द की पुनरावृत्ति करें।- पुनः लोड न किए गए उदाहरणों पर अलर्ट करें और टिकट में kid हिस्टोग्राम संलग्न करें।
इस पैकेज में निष्पादन-समान उदाहरण फिक्स्चर और स्वीकृति अनुबंध हैं। पैकेज संरचना और मेटाडेटा जांचने के लिए संग्रह रूट से python tools/validate.py चलाएँ; फिर लक्षित रिपॉजिटरी में परिदृश्यों को लागू और निष्पादित करें।
अपनाने की धारणाएँ
example.yamlमें नाम और संख्यात्मक मान एक अपनाने की प्रोफ़ाइल हैं, सार्वभौमिक डिफ़ॉल्ट नहीं।- अपनाने वाली टीम को अपने सिस्टम के लिए अभिनेताओं, डेटा वर्गों, त्रुटि शब्दावली, और स्वामित्व को मैप करना होगा।