1 पॉइंट द्वारा GN⁺ 2023-09-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2023-09-24
Hacker News की राय
  • अभी भी इसका AWS/Amazon प्रोजेक्ट वाला चरित्र काफ़ी मजबूत है, और स्वतंत्र प्रोजेक्ट बनने का रास्ता साफ़ नहीं दिखता
    उदाहरण के लिए, अगर OS vulnerability scan चाहिए तो Amazon का product इस्तेमाल करें, वरना तरीका अस्पष्ट है https://bottlerocket.dev/en/faq/#4_2
    अगर Bottlerocket को सिर्फ़ AWS पर चलाने का इरादा है तो ठीक है, लेकिन वेबसाइट जिस तरह इसे “cloud या datacenter में चलने” वाला product बताती है, वैसा बनने के लिए इन हिस्सों को हल करना होगा

    • न्यायसंगत रूप से देखें तो Flatcar / BottleRocket / CoreOS जैसे OS में vulnerability management की ज़रूरत RHEL जैसे पारंपरिक OS की तरह नहीं होती
      अगर जानना है कि 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 के काम के अधिक करीब है
    • अगर AWS के अलावा कुछ खोज रहे हैं तो Talos भी देखने लायक है https://www.talos.dev/
      यह Bottlerocket से पुराना project है
    • मुझे नहीं लगता कि vulnerability scan को खुद रोका गया है
      यह एक सीधा सवाल है: अगर SSM से अंदर जाकर या admin container का इस्तेमाल करके scan चलाने का तरीका है, तो क्या उसी तरह नहीं किया जा सकता?
    • immutable OS image पर host में vulnerability 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

    • खुलासा: मैं Amazon में काम करता/करती हूं और Bottlerocket का principal engineer हूं
      FIPS support अब भी customer requests में भारी अंतर से नंबर 1 है
      लेकिन जिस नए distribution का पहले FIPS देने का इतिहास नहीं है, उसके लिए timing अच्छी नहीं है
      नए FIPS 140-2 certifications अब नहीं मिल सकते, और नए FIPS 140-3 certifications में पूरी industry transition में है, इसलिए लंबी queue से गुजरना पड़ता है
      अगर development team के जोर लगाने से यह हल हो सकता, तो अब तक हो चुका होता
      अगर यह impression गया कि यह महत्वपूर्ण नहीं है तो माफ़ी चाहता/चाहती हूं; असल में यह महत्वपूर्ण है, लेकिन इस मामले में इससे schedule में मदद नहीं मिलती
    • FIPS certification अक्सर security को कमजोर करने वाले बदलावों की मांग करता रहा है
      जरूरत हो तो मजबूरी है, लेकिन certification होना निजी तौर पर मुझे थोड़ा खराब संकेत लगता है
      यह सोच सिर्फ़ मेरी नहीं है; Microsoft Windows team भी शायद इसी तरह देखती है: https://techcommunity.microsoft.com/t5/microsoft-security-ba...
    • “FIPS इस सवाल का जवाब है: ‘सभी encryption software को government committee approval के अधीन कैसे मजबूर किया जाए?’” https://twitter.com/matthew_d_green/status/41279364233232384...
      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/

    • और CoreOS से निकला Flatcar Linux भी है https://www.flatcar.org/
    • शायद बेवकूफ़ी भरा सवाल हो, लेकिन Alpine जैसे alternatives की तुलना में CoreOS के फायदे क्या हैं, यह जानना चाहता/चाहती हूं
    • जानना चाहता/चाहती हूं कि Bottlerocket updates के लिए जिस A/B partition method का इस्तेमाल करता है, उसकी तुलना ostree से कैसे होती है
  • “Get Started” या FAQ में कहीं भी चलाने का तरीका नहीं दिया गया

  • अच्छा प्रोजेक्ट है, लेकिन यह 2020 से मौजूद है: https://aws.amazon.com/about-aws/whats-new/2020/08/announcin...

  • जिज्ञासा है कि क्या AWS के बाहर कोई इसे सफलतापूर्वक इस्तेमाल कर रहा है

    • सिर्फ एक उदाहरण है, लेकिन Hetzner Cloud पर इसे चला नहीं पाया
  • 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 को छोड़कर आम तौर पर इस्तेमाल लायक नहीं है?

    • Docker container के अंदर shell scripts हो सकती हैं
      shell host machine में नहीं है, और अगर आप shell वाला Docker container लाकर privileged mode में चलाएं तो host पर shell इस्तेमाल कर सकते हैं
    • shell scripts शामिल करने वाला container shell खुद भी साथ में शामिल करता है
      host machine के shell binary को host पर चल रहे container को उपलब्ध कराना आम तरीका नहीं है
    • Bottlerocket का idea यह है कि host में सीधे shell भी नहीं होता और SSH या किसी और तरीके से access करने का रास्ता भी नहीं होता
      इसके बजाय यह जिम्मेदारी admin container को सौंपता है, और वास्तविक connection SSM/SSH के ज़रिए उसी में किया जाता है
      यहां root shell चाहिए हो तो sheltie utility इस्तेमाल कर सकते हैं
    • सुरक्षा कारणों से shell-less Docker containers इस्तेमाल करना कोई असामान्य बात नहीं है
      उदाहरण के लिए distroless है
    • subsystem structure बनाएं तो यह कुछ ऐसा है, और Bottlerocket में एक API है जिसे container के अंदर के shell से call किया जा सकता है
      shells | containers | Bottlerocket | OS kernel