Hello folks,我是 Luga,今天我們來分享一下與云原生安全相關(guān)的話題,即面向“DevOps”的 Kubernetes 最佳安全實(shí)踐。
如今,DevOps 和云原生理念事實(shí)上已成為各大企業(yè)和組織的標(biāo)準(zhǔn)實(shí)踐。因此,軟件開發(fā)人員及運(yùn)維人員越來越希望利用這些更新的計(jì)算范例來加快上市時(shí)間,同時(shí)保持高可用性并降低資源成本。Kubernetes 就是這樣一種平臺(tái),組織希望采用這種平臺(tái)來加快軟件交付速度。
然而,不幸的是,在沒有適當(dāng)安全措施的情況下采用 Kubernetes 會(huì)增加我們業(yè)務(wù)的網(wǎng)絡(luò)攻擊風(fēng)險(xiǎn)。容器服務(wù)的分布式特性使我們的環(huán)境面臨更多的攻擊窗口。但是,若我們通過適當(dāng)?shù)陌踩珔f(xié)議和最佳實(shí)踐,那么可以避免所構(gòu)建的 Kubernetes Cluster 和應(yīng)用程序免受這些潛在威脅,并確保我們的核心數(shù)據(jù)處于安全和機(jī)密狀態(tài)。
(相關(guān)資料圖)
—1—
據(jù) ionir 的一項(xiàng)調(diào)查結(jié)果顯示,大約 60% 的受訪者正在或已經(jīng)在 Kubernetes 平臺(tái)上運(yùn)行不同種類的應(yīng)用程序,50% 的受訪者表示他們計(jì)劃在未來 12 個(gè)月內(nèi)也將其業(yè)務(wù)遷移至 Kubernetes 平臺(tái)。此外,Red Hat 的《2022 年 Kubernetes 安全狀況》調(diào)查報(bào)告指出,在 Kubernetes 部署方面,78% 的受訪者選擇 DevSecOps 作為他們的首選解決方案。
在深入探討 Kubernetes 安全性的細(xì)節(jié)之前,讓我們先看看這些安全協(xié)議背后的概念。眾所周知,Kubernetes 之所以能夠如此安全,無非是因?yàn)樗谂c主機(jī)操作系統(tǒng)完全隔離的 Linux 容器環(huán)境。即意味著如果攻擊者想要嘗試破壞我們所構(gòu)建的 Kubernetes Cluster 平臺(tái),他們將只能夠訪問容器,而無法進(jìn)入主機(jī)操作系統(tǒng)的其他部分?;谶@種隔離特性,使得攻擊者需要單獨(dú)破壞集群中運(yùn)行的每個(gè)容器才能訪問或修改敏感數(shù)據(jù),因此,導(dǎo)致攻擊者在未經(jīng)授權(quán)的情況下訪問 Kubernetes Cluster 內(nèi)的數(shù)據(jù)變得更加困難(如果不是不可能的話)。
誠然, Kubernetes 為現(xiàn)代組織提供了諸多好處,并帶來了較大收益,然而,我們需要注意的是,作為一種軟件產(chǎn)品,這也意味著 Kubernetes 在某種特定的場景中可能會(huì)遭受到網(wǎng)絡(luò)安全威脅。此外,再加上 Kubernetes 開源特性,使得它可能比商業(yè)軟件更容易受到更多安全風(fēng)險(xiǎn)的影響。因此,在我們的環(huán)境中引入 Kubernetes 之前,我們應(yīng)當(dāng)確保有一個(gè)安全策略來保護(hù)我們的數(shù)據(jù)免受網(wǎng)絡(luò)威脅。否則,攻擊者可能會(huì)在未經(jīng)授權(quán)的情況下訪問我們的敏感數(shù)據(jù)并破壞所規(guī)劃的業(yè)務(wù)流程,從而導(dǎo)致重大的經(jīng)濟(jì)及名譽(yù)受損。
—2—
使用可信容器鏡像
1、容器 Image 的選型
首先,確保我們環(huán)境使用的是受信任的容器 Image。在實(shí)際的項(xiàng)目活動(dòng)中,基于大家的“良好”習(xí)慣,可能會(huì)在網(wǎng)上隨意 Pull 所想構(gòu)建的應(yīng)用鏡像,然而,這些鏡像的來源未知,可能會(huì)導(dǎo)致將來構(gòu)建好的容器存在各種風(fēng)險(xiǎn)及漏洞。因此,在團(tuán)隊(duì)技術(shù)實(shí)力不允許的條件下,我們還是盡量使用受信任的開源鏡像,畢竟,這些鏡像經(jīng)過安全掃描或認(rèn)證,降低了在容器中引入惡意代碼注入的風(fēng)險(xiǎn)。
當(dāng)然,若團(tuán)隊(duì)技術(shù)實(shí)力比較雄厚或是行業(yè)的龍頭,有自己的標(biāo)準(zhǔn)體系,那么,可以基于自身的業(yè)務(wù)屬性進(jìn)行鏡像的分級構(gòu)建,從所依賴的底層 OS、中間件、第三方支撐組件以及到應(yīng)用本身等。
2、權(quán)限的賦予
此外,在配置容器時(shí)應(yīng)遵循最小權(quán)限原則。這意味著盡量減少我們所構(gòu)建的容器比他們實(shí)際需要更多的訪問權(quán)限。畢竟,這樣做會(huì)增加違規(guī)的風(fēng)險(xiǎn),因?yàn)閻阂庑袨檎呷绻麤]有權(quán)限就無法獲得對操作系統(tǒng)的完全訪問權(quán)限。
權(quán)限管理
在實(shí)際的系統(tǒng)維護(hù)活動(dòng)中,如何能夠減輕資源的管理成本,乃是保護(hù) Kubernetes Cluster 的關(guān)鍵的第一步。許多組織選擇為需要集群范圍權(quán)限的 Kubernetes 創(chuàng)建有限的服務(wù)賬戶。本質(zhì)上就是為 Kubernetes 中需要集群范圍權(quán)限的每個(gè)組件創(chuàng)建一個(gè)特殊的用戶帳戶以進(jìn)行資源的合理維護(hù)。
Kubernetes 有兩類用戶:
1、集群用戶用于集群的日常管理。他們可以創(chuàng)建 Pod 和 Services,但無權(quán)修改 Kubernetes API。
2、經(jīng)過身份驗(yàn)證的用戶使用 Kubernetes API 進(jìn)行身份驗(yàn)證,并擁有對 Kubernetes API 的完全訪問權(quán)限。
Kubernetes Cluster 觀測
基于云原生生態(tài)環(huán)境,在實(shí)際的業(yè)務(wù)場景中,我們必須持續(xù)性觀測所構(gòu)建的 Kubernetes 工作負(fù)載和環(huán)境是否存在惡意的活動(dòng),以防止這些活動(dòng)帶來以下安全風(fēng)險(xiǎn)及威脅,具體如下:
1、未經(jīng)授權(quán)用戶的訪問:我們應(yīng)該能夠監(jiān)控訪問所構(gòu)建的 Kubernetes Cluster 的用戶的資源信息,例如,IP 地址等。理想情況下,這應(yīng)該擴(kuò)展到容器本身。這使我們可以查看訪問的容器的請求是否是授權(quán)用戶。
2、API 濫用:若我們正在使用 Kubernetes 的 API,那么,應(yīng)該監(jiān)控 API 調(diào)用以確保惡意行為者不會(huì)濫用我們的 API 來破壞所構(gòu)建的 Kubernetes Cluster。這可能包括監(jiān)控來自未授權(quán) IP 地址的 API 調(diào)用、失敗的 API 調(diào)用或比預(yù)期時(shí)間更長的 API 調(diào)用等。
3、數(shù)據(jù)泄露:除上述所述的 2 種風(fēng)險(xiǎn)之外,基于業(yè)務(wù)特性,我們還應(yīng)該監(jiān)控 Kubernetes Cluster 內(nèi)的數(shù)據(jù)泄露問題,例如,可能涉及異常文件活動(dòng)的監(jiān)視、對敏感數(shù)據(jù)的意外和隨機(jī)訪問或異常網(wǎng)絡(luò)流量。
CI/CD 中集成安全工具
Kubernetes 安全工具/平臺(tái)(例如 Kubescape、Datree、Trivy 等)可以幫助我們發(fā)現(xiàn)所編寫的 Yaml 文件和 Cluster 中的安全問題和漏洞。運(yùn)維、開發(fā)人員需要有一種方法將這些工具集成到 CI/CD 管道中。
引入 GitOps
基于 GitOps ,使得我們在不同的場景中能夠輕而易舉地解決各種安全問題。以 Git 作為主要工具,一切都可以追溯,讓觀測變得更為容易。將 CI/CD 工具鏈與 GitOps 方法結(jié)合使用對于確保 Kubernetes 部署安全并在整個(gè)組織中維護(hù)標(biāo)準(zhǔn)方法至關(guān)重要。讓我們深入了解如何實(shí)現(xiàn)它。
—3—
針對上述所述的 Kubernetes 安全工具/平臺(tái),讓我們來了解一下每個(gè)工具的作用以及它在管道中所能檢測到的具體內(nèi)容。
Kubescape
作為一個(gè) K8s 開源工具,Kubescape 能夠提供 Kubernetes 單一管理平臺(tái),包括風(fēng)險(xiǎn)分析、安全合規(guī)、RBAC 可視化工具和圖像漏洞掃描。Kubescape 工具能夠掃描 K8s 集群、YAML 文件和 HELM 圖表,根據(jù)多個(gè)框架(如 NSA-CISA、MITRE ATT & CK?)檢測錯(cuò)誤配置、軟件漏洞和早期 RBAC(基于角色的訪問控制)違規(guī) CI/CD 管道,即時(shí)計(jì)算風(fēng)險(xiǎn)評分并顯示隨時(shí)間變化的風(fēng)險(xiǎn)趨勢。
從本質(zhì)上講,Kubescape 主要掃描 Kubernetes Cluster 并展示不符合安全標(biāo)準(zhǔn)的 YAML 文件,具體如下所示:
+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| SEVERITY | CONTROL NAME | DOCS | ASSISTANT REMEDIATION |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| High | Apply Security Context to Your | https://hub.armosec.io/docs/cis-5-7-3 | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true || | Pods and Containers | | spec.template.spec.containers[0].securityContext.runAsNonRoot=true || | | | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false || | | | spec.template.spec.containers[0].securityContext.capabilities.drop=NET_RAW || | | | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE || | | | spec.template.spec.containers[0].securityContext.seccompProfile=YOUR_VALUE |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| Medium | Allow privilege escalation | https://hub.armosec.io/docs/c-0016 | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | …… | | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE || | | | spec.template.spec.containers[0].securityContext.capabilities.drop[0]=YOUR_VALUE |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | Non-root containers | https://hub.armosec.io/docs/c-0013 | spec.template.spec.containers[0].securityContext.runAsNonRoot=true || | | | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| Low | Immutable container filesystem | https://hub.armosec.io/docs/c-0017 | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | Label usage for resources | https://hub.armosec.io/docs/c-0076 | metadata.labels=YOUR_VALUE || | | | spec.template.metadata.labels=YOUR_VALUE |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+Trivy
作為多合一的開源安全掃描工具,Trivy 是當(dāng)下云原生生態(tài)領(lǐng)域中最流行的開源安全掃描器?;谄淇煽?、快速且易于使用特性,使得 Trivy 在漏洞查找和 IaC 錯(cuò)誤配置、SBOM 發(fā)現(xiàn)、云掃描以及 Kubernetes 安全風(fēng)險(xiǎn)等不同場景下廣泛應(yīng)用。
基于此優(yōu)秀特性,Aqua Trivy 也成為許多流行項(xiàng)目和公司的 DevOps 和安全團(tuán)隊(duì)的默認(rèn)選擇掃描儀。用戶受益于定期的、高質(zhì)量的貢獻(xiàn)和創(chuàng)新的功能請求。同時(shí),Aqua Trivy 也是 GitLab 代碼庫、Artifact Hub 以及 Harbor 鏡像倉庫的默認(rèn)掃描器。除此之外,Aqua Trivy 也已成為 RedHat 認(rèn)證的掃描組件,其影響力甚廣。
其實(shí),從本質(zhì)上而言,Trivy 則主要掃描我們 Kubernetes Cluster 工作負(fù)載中的漏洞情況,具體如下所示:
=====================Total: 1 (HIGH: 1, CRITICAL: 0)┌──────────┬────────────────┬──────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │├──────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤│ httplib2 │ CVE-2021-21240 │ HIGH │ 0.12.1 │ 0.19.0 │ python-httplib2: Regular expression denial of service via ││ │ │ │ │ │ malicious header ││ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-21240 │└──────────┴────────────────┴──────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘Dockerfile (dockerfile)=======================Tests: 17 (SUCCESSES: 16, FAILURES: 1, EXCEPTIONS: 0)Failures: 1 (HIGH: 1, CRITICAL: 0)HIGH: Last USER command in Dockerfile should not be "root"Datree
作為一個(gè)開源掃描器,Datree 主要用于檢查 Kubernetes Cluster 文件資源是否存在錯(cuò)誤配置。通常情況下,Datree 能夠通過阻止不符合所預(yù)設(shè)定的策略的資源來防止配置錯(cuò)誤?;?Datree 內(nèi)置的各種規(guī)則,我們無須擔(dān)心自己編寫策略。畢竟,其內(nèi)置了多個(gè)領(lǐng)域的多種不同規(guī)則,主要涉及容器、工作負(fù)載、CronJob、網(wǎng)絡(luò)、安全、棄用、Argo、NSA-hardening-guidelines 等。
除此之外,Datree 還能夠用于命令行、Admission Webhook,甚至作為 Kubectl 插件來針對 Kubernetes Cluster 對象運(yùn)行策略進(jìn)行掃描。
與上述 2 種不同工具相比而言,Datree 顯示我們的 Kubernetes 清單文件中是否存在任何錯(cuò)誤配置。具體如下所示:
> File: /Users/leonli/traefik_values.yml[V] YAML validation[X] Kubernetes schema validation? k8s schema validation error: error while parsing: missing "kind" keyAre you trying to test a raw Helm file? To run Datree with Helm - check out the helm plugin README:https://github.com/datreeio/helm-datree [?] Policy check didn"t run for this file(Summary)- Passing YAML validation: 1/1- Passing Kubernetes (1.20.0) schema validation: 0/1- Passing policy check: 0/1+-----------------------------------+------------------------------------------------------+| Enabled rules in policy "Default" | 21 || Configs tested against policy | 0 || Total rules evaluated | 0 || Total rules skipped | 0 || Total rules failed | 0 || Total rules passed | 0 || See all rules in policy | https://app.datree.io/login?t=mMcCiuo14nt2DZx1E7ZhA8 |+-----------------------------------+------------------------------------------------------+作為部署和擴(kuò)展應(yīng)用程序的一種方式,Kubernetes 和容器化正迅速流行起來。然而,隨著 DevOps 的普及,安全威脅也隨之增加,尤其是在團(tuán)隊(duì)沒有始終如一地遵循最佳實(shí)踐的情況下。畢竟,安全是一件有趣的、難以捉摸的事情。
誠然,Kubernetes 是一種用于交付容器化應(yīng)用程序的流行技術(shù),但擴(kuò)展 Kubernetes 環(huán)境仍具有挑戰(zhàn)性,每一個(gè)新部署的容器都會(huì)增加攻擊面。要有效處理 Kubernetes 安全性,我們必須對每個(gè)托管容器和應(yīng)用程序請求具有完整的可見性。Kubernetes 擅長編排,但不擅長安全。對于所有部署,必須采用適當(dāng)?shù)牟渴鸺軜?gòu)和安全最佳實(shí)踐。
Adiós !
··································
Hello folks,我是 Luga,一個(gè) 10 年+技術(shù)老司機(jī),從 IT 屌絲折騰到碼畜,最后到“醬油“架構(gòu)師。如果你喜歡技術(shù),不喜歡呻吟,那么恭喜你,來對地方了,關(guān)注我,共同學(xué)習(xí)、進(jìn)步、超越~
您的每一個(gè)點(diǎn)贊、在看及分享,我都認(rèn)真當(dāng)成了喜歡 ~
標(biāo)簽:
天天即時(shí)看!面向 DevOps 的 Kubernetes 最佳安全實(shí)踐
【環(huán)球快播報(bào)】國家統(tǒng)計(jì)局局長康義:今年要組織實(shí)施第五次全國經(jīng)濟(jì)普查
天天關(guān)注:開公司需要準(zhǔn)備什么材料_開公司需要準(zhǔn)備什么
腸鏡清腸標(biāo)準(zhǔn)黃水圖片_腸鏡前拉黃水算清水嗎