Bottlerocket - verified boot वाला न्यूनतम immutable Linux OS
(bottlerocket.dev)- Bottlerocket एक Linux-आधारित OS है जिसे container hosting के लिए बनाया गया है, और यह Kubernetes जैसे orchestrator द्वारा managed cluster worker nodes के default operating system के रूप में इस्तेमाल होता है
- General-purpose distributions में मिलने वाले packages, tools और interpreters हटाकर बनाई गई minimal configuration operational burden और attack surface को कम करती है, और environment-specific variant के जरिए केवल जरूरी combinations देती है
- इसमें shell और package manager नहीं होते; system को privileged host containers और API के जरिए manage किया जाता है, और updates image व partition switching के माध्यम से atomically apply होते हैं
- Configuration API-based तरीके से manage होती है, जिससे versions के बीच migration और rollback संभव होता है; update management manual तरीके से या orchestrator-specific tools से किया जा सकता है
- Immutable root filesystem, dm-verity, restrictive SELinux, Rust और कुछ Golang implementation के जरिए system tampering और unverified code execution paths कम किए जाते हैं
Container clusters के लिए default OS
- Bottlerocket container hosting के लिए optimized Linux-based operating system है
- यह free open source software है और GitHub पर openly developed है
- इसे उन machines या instances के default operating system के रूप में install किया जाता है जिन पर containers चलते हैं
- इसे Kubernetes जैसे container orchestrators के साथ काम करने के लिए design किया गया है, जिससे cluster के अंदर container lifecycle automation को support मिलता है
- यह cloud और datacenter में चल सकता है
- इसके design goals तीन बातों में summarized हैं: Minimal, Safe Updates, Security Focused
Minimal configuration और environment-specific variant
- चूंकि इसका लक्ष्य केवल container hosting है, इसलिए general-purpose Linux distributions में by default शामिल कई packages, tools, interpreters और dependencies हटा दिए गए हैं
- गैर-जरूरी software कम होने से operational overhead और security overhead भी कम होते हैं
- अलग-अलग orchestrators, platforms और architecture requirements को compatible combinations के हिसाब से build किए गए variant के रूप में manage किया जाता है
- variant वह रूप है जिसमें किसी खास environment में चलाने के लिए जरूरी components assemble किए जाते हैं
- सही variant चुनने पर cluster में join करने के लिए अतिरिक्त components की जरूरत नहीं होती
- Bottlerocket में खुद shell नहीं है
- System access shell वाले privileged host container के जरिए संभव है
- Host container में base OS को explore किया जा सकता है और API के जरिए running system की settings बदली जा सकती हैं
Image-based safe updates
- Bottlerocket को updateable बनाया गया है, लेकिन इसमें package manager शामिल नहीं है
- Updates उन images के रूप में deliver होते हैं जो किसी specific partition में download होते हैं
- Update के समय orchestrator node को drain करता है और फिर Bottlerocket को update apply करने व reboot करने का निर्देश देता है
- Bottlerocket partition switch करता है और नए version में atomically boot करता है
- System settings API से manage होती हैं, इसलिए Bottlerocket versions के बीच settings migration handle कर सकता है
- Update के दौरान समस्या आने पर settings को बनाए रखते हुए पहले काम कर रहे version पर वापस जाया जा सकता है
- Update management manual तरीके से किया जा सकता है या orchestrator-specific tools इस्तेमाल किए जा सकते हैं
Security-focused design
- Minimal configuration और update method Bottlerocket के security-focused design को support करते हैं
- चूंकि variant images के रूप में deliver होते हैं, इसलिए system में बदलाव करके security issues पैदा कर सकने वाली package registry या manager की जरूरत नहीं होती
- Bottlerocket की unique functionality Rust और कुछ Golang में लिखी गई है
- दोनों languages compiled हैं और memory safety issues के खिलाफ built-in protections देती हैं
- सारा code pre-compiled images के रूप में deliver होता है, इसलिए shell और interpreters की जरूरत नहीं होती और unverified code execution paths कम होते हैं
- Root filesystem immutable है
- dm-verity root filesystem की transparent integrity checking देता है
- अगर underlying block device में बदलाव detect होता है, तो kernel restart कर देता है
- Mutable filesystems पर हमेशा enabled और enforced restrictive SELinux policy लागू होती है
- यह policy containers के root के रूप में चलने पर भी dangerous operations execute करने से रोकने में मदद करती है
1 टिप्पणियां
Hacker News की राय
अभी भी इसका AWS/Amazon प्रोजेक्ट वाला चरित्र काफ़ी मजबूत है, और स्वतंत्र प्रोजेक्ट बनने का रास्ता साफ़ नहीं दिखता
उदाहरण के लिए, अगर OS vulnerability scan चाहिए तो Amazon का product इस्तेमाल करें, वरना तरीका अस्पष्ट है https://bottlerocket.dev/en/faq/#4_2
अगर Bottlerocket को सिर्फ़ AWS पर चलाने का इरादा है तो ठीक है, लेकिन वेबसाइट जिस तरह इसे “cloud या datacenter में चलने” वाला product बताती है, वैसा बनने के लिए इन हिस्सों को हल करना होगा
अगर जानना है कि patches लगे हैं या नहीं, तो बस देखें कि आप latest version चला रहे हैं या नहीं; अगर latest है तो उपलब्ध सभी patches लागू हो चुके हैं
हालांकि regulated industries में compliance checklist में “vulnerability management” item भरना होता है, इसलिए यह समस्या बन सकता है
पारंपरिक OS में vulnerability management की ज़रूरत का बड़ा कारण यह है कि configuration space बहुत बड़ा होता है, software composition कई sources और vendors से मनमाने ढंग से मिलती है और हर version स्वतंत्र रूप से चलता है
लेकिन container OS ऐसी चीज़ नहीं है जिसे उस तरह इस्तेमाल किया जाए
“latest” में अतिरिक्त vulnerabilities ढूंढना system owner का समय पर upstream patches लागू करने का काम नहीं, बल्कि security researcher के काम के अधिक करीब है
यह Bottlerocket से पुराना project है
यह एक सीधा सवाल है: अगर SSM से अंदर जाकर या admin container का इस्तेमाल करके scan चलाने का तरीका है, तो क्या उसी तरह नहीं किया जा सकता?
image को host machine पर deploy करने से पहले यह किया जा सकता है
Bottlerocket ज़्यादातर enterprise *nix distributions के उलट FIPS mode प्रदान नहीं करता
अगर आप ऐसा compliance program इस्तेमाल करते हैं जिसमें work host OS के लिए FIPS-approved cryptography चाहिए, तो अपना समय बचाएं
इसी वजह से हमारे लिए Bottlerocket कोई विकल्प नहीं है, और संबंधित issue 2 साल से ज़्यादा समय से सक्रिय रूप से खुला है, लेकिन development team को लगता नहीं कि यह महत्वपूर्ण है
AWS dedicated representative के ज़रिए development team से भी बात की, लेकिन जोड़ने की इच्छा नहीं दिखी
2 साल से ज़्यादा समय से खुला thread यहां है: https://github.com/bottlerocket-os/bottlerocket/issues/1667
FIPS support अब भी customer requests में भारी अंतर से नंबर 1 है
लेकिन जिस नए distribution का पहले FIPS देने का इतिहास नहीं है, उसके लिए timing अच्छी नहीं है
नए FIPS 140-2 certifications अब नहीं मिल सकते, और नए FIPS 140-3 certifications में पूरी industry transition में है, इसलिए लंबी queue से गुजरना पड़ता है
अगर development team के जोर लगाने से यह हल हो सकता, तो अब तक हो चुका होता
अगर यह impression गया कि यह महत्वपूर्ण नहीं है तो माफ़ी चाहता/चाहती हूं; असल में यह महत्वपूर्ण है, लेकिन इस मामले में इससे schedule में मदद नहीं मिलती
जरूरत हो तो मजबूरी है, लेकिन certification होना निजी तौर पर मुझे थोड़ा खराब संकेत लगता है
यह सोच सिर्फ़ मेरी नहीं है; Microsoft Windows team भी शायद इसी तरह देखती है: https://techcommunity.microsoft.com/t5/microsoft-security-ba...
FIPS खुद बुरा न भी हो, तो भी यह याद रखना चाहिए कि यह बुरे लोगों और बुरे माहौल में काम करता है https://threadreaderapp.com/thread/1433451378391883782.html
बहुत रोचक लगता है, लेकिन बाकी comments की तरह खुद चलाने का रास्ता धुंधला दिखता है
GitHub page भी सिर्फ़ main page पर ही मौजूद है
VMware guide यहां मिली: https://github.com/bottlerocket-os/bottlerocket/blob/develop...
यह CoreOS की दिशा से बहुत मिलता-जुलता है https://fedoraproject.org/coreos/
“Get Started” या FAQ में कहीं भी चलाने का तरीका नहीं दिया गया
अच्छा प्रोजेक्ट है, लेकिन यह 2020 से मौजूद है: https://aws.amazon.com/about-aws/whats-new/2020/08/announcin...
जिज्ञासा है कि क्या AWS के बाहर कोई इसे सफलतापूर्वक इस्तेमाल कर रहा है
AMD SEV-SNP जैसे उपयोगों के लिए यह काफ़ी उपयोगी लगता है
क्योंकि किसी मशीन के विशेष व्यवहार की गारंटी देने के लिए kernel + initrd + arguments के measurements चाहिए होते हैं
आदर्श रूप से इसे container hypervisor की तरह इस्तेमाल करना और चल रहे container के hash से बंधा हुआ attestation generate कर पाना अच्छा होगा
हालांकि container escape नहीं होना चाहिए, और इस क्षेत्र की मौजूदा स्थिति क्या है, यह मुझे ठीक से नहीं पता
मैं तो बल्कि CoreOS इस्तेमाल करना चाहूंगा
क्या इन्होंने AWS के बाहर व्यापक रूप से इस्तेमाल होने वाला कोई open source निकाला है?
वेबसाइट पर लिखा है कि OS में shell नहीं है
कम से कम एक भी shell script न रखने वाला उपयोगी Docker container कल्पना करना मुश्किल है
तो क्या shell न होना यह नहीं बताता कि Bottlerocket कुछ niche scenarios को छोड़कर आम तौर पर इस्तेमाल लायक नहीं है?
shell host machine में नहीं है, और अगर आप shell वाला Docker container लाकर privileged mode में चलाएं तो host पर shell इस्तेमाल कर सकते हैं
host machine के shell binary को host पर चल रहे container को उपलब्ध कराना आम तरीका नहीं है
इसके बजाय यह जिम्मेदारी admin container को सौंपता है, और वास्तविक connection SSM/SSH के ज़रिए उसी में किया जाता है
यहां root shell चाहिए हो तो
sheltieutility इस्तेमाल कर सकते हैंउदाहरण के लिए distroless है
shells | containers | Bottlerocket | OS kernel