DevOps優(yōu)秀實(shí)踐之操作系統(tǒng)和服務(wù)
作者 | 馮煒
本系列內(nèi)容是我們?cè)诓煌?xiàng)目的維護(hù)過(guò)程中總結(jié)的關(guān)于DevOps/SRE方面的最佳實(shí)踐,我們將致力于在項(xiàng)目上盡最大的努力來(lái)推行這些最佳實(shí)踐。我們希望這些最佳實(shí)踐能對(duì)項(xiàng)目的穩(wěn)定運(yùn)營(yíng)提供幫助,也希望剛接觸DevOps/SRE的新人能通過(guò)學(xué)習(xí)這些最佳實(shí)踐來(lái)提升自己在這方面的水平。
當(dāng)涉及到 DevOps/SRE 的最佳實(shí)踐時(shí),操作系統(tǒng)和服務(wù)的管理是一個(gè)關(guān)鍵領(lǐng)域。在這個(gè)領(lǐng)域,有許多最佳實(shí)踐可以幫助團(tuán)隊(duì)更好地管理他們的系統(tǒng),提高效率和安全性。
在本章中,我們將探討一些關(guān)鍵的最佳實(shí)踐,包括隱藏服務(wù)商資源地址、只安裝必要的依賴和工具、只運(yùn)行必要的服務(wù)和端口以及使用堡壘機(jī)保護(hù)內(nèi)部資源。這些最佳實(shí)踐有助于使您的系統(tǒng)和服務(wù)更加安全、可靠和高效。
隱藏服務(wù)商資源地址
用戶可以通過(guò)網(wǎng)絡(luò)訪問(wèn)服務(wù)商提供的某些服務(wù),然而服務(wù)商提供的資源地址對(duì)應(yīng)著承載該服務(wù)的具體資源,并通過(guò)帶有隨機(jī)字符串的域名或IP地址來(lái)標(biāo)識(shí)。因此,直接將資源地址直接暴露給用戶可能會(huì)導(dǎo)致攻擊者更容易地訪問(wèn)和操縱敏感數(shù)據(jù)或系統(tǒng)。此外,當(dāng)需要切換資源時(shí),還需要通知用戶及時(shí)更新他們的配置信息。
為了提高系統(tǒng)的安全性和靈活性,建議使用負(fù)載均衡或代理服務(wù)來(lái)作為用戶和實(shí)際服務(wù)之間的中介。中間設(shè)備應(yīng)該提供可被管理的域名,并使用CNAME或Alias的方式將服務(wù)域名解析到負(fù)載均衡或代理服務(wù)上。
負(fù)載均衡或代理服務(wù)再去訪問(wèn)實(shí)際服務(wù),從而保護(hù)實(shí)際服務(wù)資源。如果服務(wù)商需要更改資源,例如將資源遷移到新的服務(wù)器或IP地址,可以通過(guò)更新域名解析或者代理服務(wù)器配置來(lái)更新資源映射,無(wú)需讓用戶更改他們使用的資源信息,從而提升系統(tǒng)的可維護(hù)性和可擴(kuò)展性。
優(yōu)點(diǎn):
- 高性能:通過(guò)CDN(Content Delivery Networks)等代理服務(wù)將網(wǎng)站內(nèi)容緩存在位于世界各地的服務(wù)器上,減少服務(wù)到達(dá)用戶的距離。這將為遠(yuǎn)離網(wǎng)站源服務(wù)器的用戶提供更快的加載時(shí)間以及更好的網(wǎng)站性能,從而提高用戶滿意度和留存率。
- 安全性:通過(guò)向用戶隱藏服務(wù)器的具體信息來(lái)提高系統(tǒng)的安全性,使攻擊者難以找到具體的服務(wù)資源。
- 易擴(kuò)展:使用代理服務(wù)可以對(duì)后端的多個(gè)實(shí)例,提供統(tǒng)一的入口訪問(wèn),增加服務(wù)的擴(kuò)展性,同時(shí)提高了服務(wù)的可靠性和靈活性。
- 用戶體驗(yàn):使用單個(gè)、易于記憶的域名,而不是特定的IP地址,可以很好的提升用戶體驗(yàn)。
缺點(diǎn):
- 復(fù)雜性:額外的負(fù)載均衡和代理服務(wù)會(huì)增加系統(tǒng)復(fù)雜度,不合理的配置也可能會(huì)對(duì)服務(wù)的穩(wěn)定性造成影響
- 增加成本:引入額外的負(fù)載均衡和代理服務(wù)會(huì)增加系統(tǒng)的整體成本,在系統(tǒng)的設(shè)計(jì)階段,應(yīng)合理進(jìn)行評(píng)估和規(guī)劃。
實(shí)施要點(diǎn):
- 當(dāng)服務(wù)商提供的資源名稱帶有證書(shū),使用映射后的域名訪問(wèn)會(huì)碰到證書(shū)不匹配的問(wèn)題??梢酝ㄟ^(guò)使用支持證書(shū)的負(fù)載均衡設(shè)備代理相應(yīng)的服務(wù)來(lái)解決這類問(wèn)題,用戶使用域名證書(shū)與負(fù)載均衡設(shè)備進(jìn)行通信,而負(fù)載均衡設(shè)備使用資源證書(shū)與后臺(tái)資源進(jìn)行通信。
一些云平臺(tái)廠商提供具體的負(fù)載均衡資源可供參考:
- AWS: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html
- GCP: https://cloud.google.com/load-balancing/docs/https
設(shè)計(jì)合適的負(fù)載均衡和代理服務(wù)時(shí),要考慮預(yù)期的流量、請(qǐng)求的類型、用戶的地理位置、正在使用的服務(wù)器類型和所需的安全水平等因素。設(shè)計(jì)還應(yīng)該考慮對(duì)網(wǎng)絡(luò)延遲、帶寬利用率和整體系統(tǒng)復(fù)雜性的潛在影響。
只安裝必要的依賴和工具
在業(yè)務(wù)運(yùn)行的系統(tǒng)中,無(wú)論是虛擬機(jī)還是容器中,保持系統(tǒng)的最小化和精簡(jiǎn)化是一種有效的安全措施,只安裝必要的依賴和工具可以最大限度地減小系統(tǒng)大小并降低系統(tǒng)的攻擊面,減少系統(tǒng)漏洞和風(fēng)險(xiǎn)。
此外,在排查問(wèn)題時(shí)隔離有問(wèn)題的虛擬機(jī)或者容器后僅在必要時(shí)安裝需要的工具。在排錯(cuò)結(jié)束之后,及時(shí)銷毀這臺(tái)虛擬機(jī)或者容器,可以最大限度地保護(hù)系統(tǒng)安全。在安裝工具之前,建議先進(jìn)行必要的安全檢查并確保工具的來(lái)源和完整性??梢允褂脭?shù)字簽名或哈希值驗(yàn)證工具的完整性,以確保安裝的工具沒(méi)有被篡改或植入惡意代碼。
優(yōu)點(diǎn):
- 提高性能:通過(guò)僅安裝必要的依賴和工具,可以降低系統(tǒng)的負(fù)載,使虛擬機(jī)或容器將運(yùn)行得更快、更高效。
- 減少存儲(chǔ)需求:更少的依賴和工具意味著更少的磁盤空間和內(nèi)存,可以減少存儲(chǔ)成本和系統(tǒng)資源的占用。
- 提高安全性:不安裝不必要的依賴文件,可以最大化減少工具和服務(wù)產(chǎn)生的漏洞和風(fēng)險(xiǎn),從而提高系統(tǒng)的安全性和穩(wěn)定性。
- 易于維護(hù):當(dāng)需要管理的依賴和工具減少時(shí),系統(tǒng)或容器更新和維護(hù)的難度也會(huì)降低,節(jié)省了運(yùn)維的時(shí)間和精力。
缺點(diǎn):
- 增加運(yùn)維復(fù)雜度:需要運(yùn)維人員可以識(shí)別哪些是必要的依賴和工具,并且解決它們之間的各種關(guān)鍵依賴問(wèn)題后成功安裝,且要讓各種系統(tǒng)或應(yīng)用可以正常運(yùn)行。這在一些復(fù)雜的系統(tǒng)中,安裝的復(fù)雜度會(huì)快速疊加。
- 有限的功能:在虛擬機(jī)和容器的應(yīng)用開(kāi)發(fā)過(guò)程中,前期安裝的依賴和庫(kù)不滿足需要,會(huì)導(dǎo)致要額外添加或更新依賴和庫(kù)。這可能會(huì)比較耗時(shí),尤其是在虛擬機(jī)中安裝更新依賴和庫(kù)。
- 增加運(yùn)維成本:需要運(yùn)維通過(guò)一些工具或文檔記錄和維護(hù)虛擬機(jī)或容器中所安裝的所有依賴和庫(kù),會(huì)增加運(yùn)維的工作量和成本。
實(shí)施要點(diǎn):
- 使用最小的基礎(chǔ)鏡像:使用虛擬機(jī)或Docker時(shí),你可以選擇一個(gè)最小的基礎(chǔ)鏡像,它只包含應(yīng)用程序所需的組件。在構(gòu)建系統(tǒng)和應(yīng)用時(shí),還可以采用分層構(gòu)建。這些都可以幫助你減小系統(tǒng)和應(yīng)用的大小并避免安裝不必要的依賴項(xiàng)。
- 確定系統(tǒng)或應(yīng)用的具體要求:在開(kāi)始安裝任何依賴或工具之前,需要確認(rèn)你的系統(tǒng)或應(yīng)用要運(yùn)行什么程序依賴什么庫(kù)。
- 使用包管理工具:包管理工具可以幫助你只為系統(tǒng)或應(yīng)用安裝必要的依賴項(xiàng),并管理它們的版本和依賴項(xiàng)。系統(tǒng)的包管理工具如yum/apt等。編程語(yǔ)言的包管理器如 Python 的 pip/poetry、Node.js 的 npm/yarn 和 java 的 gradle等。
- 使用虛擬環(huán)境:可以為應(yīng)用程序創(chuàng)建虛擬隔離環(huán)境。這樣可以避免不同版本包之間的沖突,并確保你只安裝應(yīng)用程序所需的內(nèi)容。
- 刪除未使用的依賴項(xiàng):需要你定期檢查系統(tǒng)或容器中安裝的依賴項(xiàng)并刪除不再需要的依賴項(xiàng)。這可以幫助你減小系統(tǒng)或應(yīng)用的整體大小并提高其性能。
實(shí)施示例:
- Docker的分層構(gòu)建
- 包管理工具
只運(yùn)行必要的服務(wù)和端口
確保系統(tǒng)中只運(yùn)行必要的服務(wù),并限制服務(wù)對(duì)外訪問(wèn)權(quán)限,是一種常見(jiàn)的安全措施。如果一個(gè)服務(wù)并不需要對(duì)外提供訪問(wèn),那么最好將其關(guān)閉,以避免可能的安全漏洞。如果一個(gè)服務(wù)有多個(gè)端口,最好將業(yè)務(wù)端口和管理端口分離,并根據(jù)需要限制兩種端口的訪問(wèn)權(quán)限。
優(yōu)點(diǎn):
- 提高安全性:僅啟動(dòng)必要的服務(wù)和端口,可以減少系統(tǒng)的攻擊面,從而提高系統(tǒng)的安全性。攻擊者無(wú)法利用未使用的服務(wù)和端口進(jìn)行攻擊。
- 提高系統(tǒng)性能:減少不必要的服務(wù)和端口,系統(tǒng)將不會(huì)浪費(fèi)資源來(lái)處理對(duì)應(yīng)的中斷和信息,可以釋放系統(tǒng)資源并提高性能。
- 提高可靠性:不需要運(yùn)行的服務(wù)在異常情況下可能會(huì)導(dǎo)致系統(tǒng)崩潰或停止響應(yīng), 減少不必要的服務(wù)和端口,可以減少系統(tǒng)故障的風(fēng)險(xiǎn)。。
- 簡(jiǎn)化系統(tǒng)維護(hù):減少運(yùn)行的服務(wù)和端口可以簡(jiǎn)化系統(tǒng)維護(hù)。管理員不必費(fèi)力去維護(hù)不必要的服務(wù)和端口,從而提高了維護(hù)效率。
缺點(diǎn):
- 特定需求受限:如果只運(yùn)行必要的服務(wù)和端口,則系統(tǒng)可能無(wú)法滿足一些特定需求,例如網(wǎng)絡(luò)共享或遠(yuǎn)程管理等。
- 需要重新評(píng)估和配置:如果需要添加新功能或服務(wù),則需要重新評(píng)估并重新配置系統(tǒng)以確保安全性和性能。這可能涉及到重新打開(kāi)某些服務(wù)或端口,同時(shí)確保它們不會(huì)影響系統(tǒng)的安全性和性能。
- 分析和測(cè)試:確定哪些服務(wù)和端口是必要的,需要進(jìn)行深入的分析和測(cè)試,這可能會(huì)增加系統(tǒng)配置的復(fù)雜性。實(shí)施過(guò)程中可能會(huì)影響業(yè)務(wù)的正常運(yùn)作,需要謹(jǐn)慎評(píng)估風(fēng)險(xiǎn)和影響。
實(shí)施要點(diǎn):
- 只運(yùn)行必要的服務(wù):在系統(tǒng)中只安裝并啟動(dòng)需要的服務(wù),避免安裝不必要的服務(wù)。對(duì)于不需要的服務(wù),最好將其卸載或者禁用。
- 限制對(duì)外訪問(wèn)權(quán)限:對(duì)于需要對(duì)外提供服務(wù)的服務(wù),應(yīng)該根據(jù)實(shí)際需求限制訪問(wèn)權(quán)限,例如使用防火墻等工具來(lái)控制外部訪問(wèn)。同時(shí),對(duì)于不需要對(duì)外提供服務(wù)的服務(wù),應(yīng)該禁止其對(duì)外訪問(wèn)。
- 分離業(yè)務(wù)端口和管理端口:對(duì)于一個(gè)服務(wù)有多個(gè)端口的情況,應(yīng)該將業(yè)務(wù)端口和管理端口分離。業(yè)務(wù)端口用于對(duì)外提供服務(wù),而管理端口則用于服務(wù)管理和配置。這樣可以更好地控制管理端口的訪問(wèn)權(quán)限,避免安全漏洞。
- 根據(jù)需要限制訪問(wèn)權(quán)限:針對(duì)業(yè)務(wù)端口和管理端口,應(yīng)該根據(jù)需要限制訪問(wèn)權(quán)限。例如,只允許特定的IP地址或者IP地址段訪問(wèn),或者使用訪問(wèn)控制列表(ACL)來(lái)限制訪問(wèn)權(quán)限。
- 使用堡壘機(jī)來(lái)訪問(wèn)服務(wù)資源:使用堡壘機(jī)來(lái)訪問(wèn)服務(wù)資源,能夠增加訪問(wèn)控制,并且減少暴露給公網(wǎng)的風(fēng)險(xiǎn)。同時(shí),堡壘機(jī)也能夠記錄所有的訪問(wèn)日志,便于安全審計(jì)。
實(shí)施示例:
- 在Linux系統(tǒng)中查看當(dāng)前正在運(yùn)行的服務(wù)和端口
- 在Linux系統(tǒng)中查看特定端口的運(yùn)行情況
使用堡壘機(jī)保護(hù)內(nèi)部資源
堡壘機(jī)(Bastion Host)或跳板機(jī)是一種網(wǎng)絡(luò)安全設(shè)備,通常用于管理和控制遠(yuǎn)程訪問(wèn)內(nèi)部網(wǎng)絡(luò)的權(quán)限和流量。它是一種安全網(wǎng)關(guān),位于外部網(wǎng)絡(luò)和受保護(hù)網(wǎng)絡(luò)的邊界,它可以限制只有授權(quán)用戶或系統(tǒng)管理員通過(guò)它來(lái)訪問(wèn)內(nèi)部的受保護(hù)資源,從而提高網(wǎng)絡(luò)安全性。堡壘機(jī)也需要定期進(jìn)行安全檢查和升級(jí),以確保其安全性和穩(wěn)定性。
優(yōu)點(diǎn):
- 提高安全性:堡壘機(jī)可以對(duì)遠(yuǎn)程訪問(wèn)進(jìn)行身份驗(yàn)證和授權(quán),確保只有授權(quán)的用戶可以訪問(wèn)敏感系統(tǒng)和數(shù)據(jù),從而提高網(wǎng)絡(luò)安全性。
- 簡(jiǎn)化管理:堡壘機(jī)可以集中管理所有遠(yuǎn)程訪問(wèn)請(qǐng)求和日志記錄,管理員可以更輕松地監(jiān)控和審計(jì)遠(yuǎn)程訪問(wèn)活動(dòng),同時(shí)可以簡(jiǎn)化對(duì)遠(yuǎn)程訪問(wèn)的管理工作。
- 減少風(fēng)險(xiǎn):堡壘機(jī)可以監(jiān)視遠(yuǎn)程訪問(wèn)并實(shí)時(shí)響應(yīng)威脅和攻擊,包括攔截和隔離威脅,從而降低風(fēng)險(xiǎn)。
- 增強(qiáng)合規(guī)性:堡壘機(jī)可以記錄所有遠(yuǎn)程訪問(wèn)活動(dòng)和審計(jì)數(shù)據(jù),從而更好地滿足合規(guī)性要求,如PCI DSS、HIPAA等。
缺點(diǎn):
- 單點(diǎn)故障:如果堡壘機(jī)是一個(gè)單節(jié)點(diǎn)設(shè)備,在它出現(xiàn)故障,所有的遠(yuǎn)程訪問(wèn)都會(huì)受到影響,可能會(huì)導(dǎo)致業(yè)務(wù)中斷。
- 性能影響:堡壘機(jī)需要處理大量的網(wǎng)絡(luò)流量和訪問(wèn)請(qǐng)求,如果性能不足或配置不當(dāng),可能會(huì)導(dǎo)致網(wǎng)絡(luò)延遲或阻塞。
- 需要培訓(xùn):堡壘機(jī)需要管理員具備一定的技術(shù)知識(shí)和技能,包括配置、管理和故障排除等方面,需要額外的培訓(xùn)成本。
- 部署復(fù)雜:堡壘機(jī)需要與其他網(wǎng)絡(luò)安全工具、身份驗(yàn)證系統(tǒng)和訪問(wèn)控制系統(tǒng)進(jìn)行集成,部署和配置比較復(fù)雜,需要耗費(fèi)時(shí)間和資源。
實(shí)施場(chǎng)景:
- 遠(yuǎn)程訪問(wèn)控制:企業(yè)通常有多個(gè)地點(diǎn)或辦公室,員工需要遠(yuǎn)程訪問(wèn)企業(yè)內(nèi)部的系統(tǒng)和應(yīng)用程序來(lái)完成工作。通過(guò)實(shí)施堡壘機(jī),企業(yè)可以控制遠(yuǎn)程訪問(wèn)的權(quán)限和流量,防止未經(jīng)授權(quán)的訪問(wèn)和入侵,并可以記錄所有遠(yuǎn)程訪問(wèn)活動(dòng)以進(jìn)行安全審計(jì)和監(jiān)測(cè)。
- 云安全管理:隨著云計(jì)算的普及,企業(yè)需要管理和控制對(duì)云資源的訪問(wèn)和操作。通過(guò)實(shí)施堡壘機(jī),企業(yè)可以控制云主機(jī)的遠(yuǎn)程訪問(wèn)權(quán)限和流量,保護(hù)敏感數(shù)據(jù)和系統(tǒng)不受未經(jīng)授權(quán)的訪問(wèn)和攻擊,并可以記錄所有云訪問(wèn)活動(dòng)以進(jìn)行安全審計(jì)和監(jiān)測(cè)。
- 第三方訪問(wèn)控制:企業(yè)通常需要與供應(yīng)商、客戶或合作伙伴共享系統(tǒng)和應(yīng)用程序,這些第三方用戶需要遠(yuǎn)程訪問(wèn)企業(yè)內(nèi)部資源。通過(guò)實(shí)施堡壘機(jī),企業(yè)可以控制第三方訪問(wèn)的權(quán)限和流量,確保只有授權(quán)的用戶可以訪問(wèn)受保護(hù)的資源,同時(shí)還可以記錄所有第三方訪問(wèn)活動(dòng)以進(jìn)行安全審計(jì)和監(jiān)測(cè)。
- 內(nèi)部訪問(wèn)控制:企業(yè)內(nèi)部員工需要訪問(wèn)和操作多個(gè)系統(tǒng)和應(yīng)用程序,有時(shí)候也需要在不同的權(quán)限級(jí)別下進(jìn)行操作。通過(guò)實(shí)施堡壘機(jī),企業(yè)可以控制內(nèi)部用戶的訪問(wèn)權(quán)限和流量,保護(hù)敏感數(shù)據(jù)和系統(tǒng)不受未經(jīng)授權(quán)的訪問(wèn)和攻擊,并可以記錄所有內(nèi)部用戶的訪問(wèn)活動(dòng)以進(jìn)行安全審計(jì)和監(jiān)測(cè)。
實(shí)施要點(diǎn):
- 設(shè)計(jì)網(wǎng)絡(luò)架構(gòu):在部署堡壘機(jī)之前,需要先設(shè)計(jì)好網(wǎng)絡(luò)架構(gòu)。這包括確定哪些服務(wù)器需要保護(hù),以及堡壘機(jī)如何與這些服務(wù)器進(jìn)行通信。需要考慮安全性、性能和可用性等因素來(lái)設(shè)計(jì)網(wǎng)絡(luò)架構(gòu)。
- 選擇堡壘機(jī)軟件:選擇適合您需求的堡壘機(jī)軟件是非常重要的。需要考慮軟件的功能、安全性、易用性和可擴(kuò)展性等方面,以及它是否滿足您的需求。
- 安全設(shè)置:堡壘機(jī)的安全設(shè)置是非常重要的,它決定了誰(shuí)可以訪問(wèn)堡壘機(jī)以及如何保護(hù)堡壘機(jī)。需要為堡壘機(jī)設(shè)置強(qiáng)密碼、限制登錄嘗試、啟用雙因素認(rèn)證、限制網(wǎng)絡(luò)訪問(wèn)等安全措施。
- 認(rèn)證和授權(quán):為了確保只有授權(quán)用戶才能訪問(wèn)堡壘機(jī)和私有網(wǎng)絡(luò),需要配置認(rèn)證和授權(quán)策略。這包括使用身份驗(yàn)證機(jī)制、配置訪問(wèn)控制列表(ACL)、限制用戶權(quán)限等。
- 日志和審計(jì):為了監(jiān)控堡壘機(jī)上的用戶活動(dòng)并檢測(cè)異常行為您需要配置日志和審計(jì)功能。這包括記錄登錄和退出時(shí)間、監(jiān)視用戶活動(dòng)、檢測(cè)安全事件等。
- 監(jiān)控和報(bào)警:為了快速檢測(cè)并響應(yīng)安全事件,需要設(shè)置監(jiān)控和報(bào)警功能。這包括監(jiān)視堡壘機(jī)和私有網(wǎng)絡(luò)的活動(dòng)、檢測(cè)異常行為、配置警報(bào)規(guī)則等。
- 測(cè)試和評(píng)估:在部署堡壘機(jī)之前,需要進(jìn)行測(cè)試和評(píng)估,以確保它能夠滿足需求并提供足夠的安全保護(hù)。這包括測(cè)試堡壘機(jī)的性能、安全性、可用性等方面。