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