Hello folks,我是 Luga,今天我們來分享一下與云原生安全相關的話題,即面向“DevOps”的 Kubernetes 最佳安全實踐。
如今,DevOps 和云原生理念事實上已成為各大企業和組織的標準實踐。因此,軟件開發人員及運維人員越來越希望利用這些更新的計算范例來加快上市時間,同時保持高可用性并降低資源成本。Kubernetes 就是這樣一種平臺,組織希望采用這種平臺來加快軟件交付速度。
然而,不幸的是,在沒有適當安全措施的情況下采用 Kubernetes 會增加我們業務的網絡攻擊風險。容器服務的分布式特性使我們的環境面臨更多的攻擊窗口。但是,若我們通過適當的安全協議和最佳實踐,那么可以避免所構建的 Kubernetes Cluster 和應用程序免受這些潛在威脅,并確保我們的核心數據處于安全和機密狀態。
(相關資料圖)
—1—
據 ionir 的一項調查結果顯示,大約 60% 的受訪者正在或已經在 Kubernetes 平臺上運行不同種類的應用程序,50% 的受訪者表示他們計劃在未來 12 個月內也將其業務遷移至 Kubernetes 平臺。此外,Red Hat 的《2022 年 Kubernetes 安全狀況》調查報告指出,在 Kubernetes 部署方面,78% 的受訪者選擇 DevSecOps 作為他們的首選解決方案。
在深入探討 Kubernetes 安全性的細節之前,讓我們先看看這些安全協議背后的概念。眾所周知,Kubernetes 之所以能夠如此安全,無非是因為它基于與主機操作系統完全隔離的 Linux 容器環境。即意味著如果攻擊者想要嘗試破壞我們所構建的 Kubernetes Cluster 平臺,他們將只能夠訪問容器,而無法進入主機操作系統的其他部分。基于這種隔離特性,使得攻擊者需要單獨破壞集群中運行的每個容器才能訪問或修改敏感數據,因此,導致攻擊者在未經授權的情況下訪問 Kubernetes Cluster 內的數據變得更加困難(如果不是不可能的話)。
誠然, Kubernetes 為現代組織提供了諸多好處,并帶來了較大收益,然而,我們需要注意的是,作為一種軟件產品,這也意味著 Kubernetes 在某種特定的場景中可能會遭受到網絡安全威脅。此外,再加上 Kubernetes 開源特性,使得它可能比商業軟件更容易受到更多安全風險的影響。因此,在我們的環境中引入 Kubernetes 之前,我們應當確保有一個安全策略來保護我們的數據免受網絡威脅。否則,攻擊者可能會在未經授權的情況下訪問我們的敏感數據并破壞所規劃的業務流程,從而導致重大的經濟及名譽受損。
—2—
使用可信容器鏡像
1、容器 Image 的選型
首先,確保我們環境使用的是受信任的容器 Image。在實際的項目活動中,基于大家的“良好”習慣,可能會在網上隨意 Pull 所想構建的應用鏡像,然而,這些鏡像的來源未知,可能會導致將來構建好的容器存在各種風險及漏洞。因此,在團隊技術實力不允許的條件下,我們還是盡量使用受信任的開源鏡像,畢竟,這些鏡像經過安全掃描或認證,降低了在容器中引入惡意代碼注入的風險。
當然,若團隊技術實力比較雄厚或是行業的龍頭,有自己的標準體系,那么,可以基于自身的業務屬性進行鏡像的分級構建,從所依賴的底層 OS、中間件、第三方支撐組件以及到應用本身等。
2、權限的賦予
此外,在配置容器時應遵循最小權限原則。這意味著盡量減少我們所構建的容器比他們實際需要更多的訪問權限。畢竟,這樣做會增加違規的風險,因為惡意行為者如果沒有權限就無法獲得對操作系統的完全訪問權限。
權限管理
在實際的系統維護活動中,如何能夠減輕資源的管理成本,乃是保護 Kubernetes Cluster 的關鍵的第一步。許多組織選擇為需要集群范圍權限的 Kubernetes 創建有限的服務賬戶。本質上就是為 Kubernetes 中需要集群范圍權限的每個組件創建一個特殊的用戶帳戶以進行資源的合理維護。
Kubernetes 有兩類用戶:
1、集群用戶用于集群的日常管理。他們可以創建 Pod 和 Services,但無權修改 Kubernetes API。
2、經過身份驗證的用戶使用 Kubernetes API 進行身份驗證,并擁有對 Kubernetes API 的完全訪問權限。
Kubernetes Cluster 觀測
基于云原生生態環境,在實際的業務場景中,我們必須持續性觀測所構建的 Kubernetes 工作負載和環境是否存在惡意的活動,以防止這些活動帶來以下安全風險及威脅,具體如下:
1、未經授權用戶的訪問:我們應該能夠監控訪問所構建的 Kubernetes Cluster 的用戶的資源信息,例如,IP 地址等。理想情況下,這應該擴展到容器本身。這使我們可以查看訪問的容器的請求是否是授權用戶。
2、API 濫用:若我們正在使用 Kubernetes 的 API,那么,應該監控 API 調用以確保惡意行為者不會濫用我們的 API 來破壞所構建的 Kubernetes Cluster。這可能包括監控來自未授權 IP 地址的 API 調用、失敗的 API 調用或比預期時間更長的 API 調用等。
3、數據泄露:除上述所述的 2 種風險之外,基于業務特性,我們還應該監控 Kubernetes Cluster 內的數據泄露問題,例如,可能涉及異常文件活動的監視、對敏感數據的意外和隨機訪問或異常網絡流量。
CI/CD 中集成安全工具
Kubernetes 安全工具/平臺(例如 Kubescape、Datree、Trivy 等)可以幫助我們發現所編寫的 Yaml 文件和 Cluster 中的安全問題和漏洞。運維、開發人員需要有一種方法將這些工具集成到 CI/CD 管道中。
引入 GitOps
基于 GitOps ,使得我們在不同的場景中能夠輕而易舉地解決各種安全問題。以 Git 作為主要工具,一切都可以追溯,讓觀測變得更為容易。將 CI/CD 工具鏈與 GitOps 方法結合使用對于確保 Kubernetes 部署安全并在整個組織中維護標準方法至關重要。讓我們深入了解如何實現它。
—3—
針對上述所述的 Kubernetes 安全工具/平臺,讓我們來了解一下每個工具的作用以及它在管道中所能檢測到的具體內容。
Kubescape
作為一個 K8s 開源工具,Kubescape 能夠提供 Kubernetes 單一管理平臺,包括風險分析、安全合規、RBAC 可視化工具和圖像漏洞掃描。Kubescape 工具能夠掃描 K8s 集群、YAML 文件和 HELM 圖表,根據多個框架(如 NSA-CISA、MITRE ATT & CK?)檢測錯誤配置、軟件漏洞和早期 RBAC(基于角色的訪問控制)違規 CI/CD 管道,即時計算風險評分并顯示隨時間變化的風險趨勢。
從本質上講,Kubescape 主要掃描 Kubernetes Cluster 并展示不符合安全標準的 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 是當下云原生生態領域中最流行的開源安全掃描器。基于其可靠、快速且易于使用特性,使得 Trivy 在漏洞查找和 IaC 錯誤配置、SBOM 發現、云掃描以及 Kubernetes 安全風險等不同場景下廣泛應用。
基于此優秀特性,Aqua Trivy 也成為許多流行項目和公司的 DevOps 和安全團隊的默認選擇掃描儀。用戶受益于定期的、高質量的貢獻和創新的功能請求。同時,Aqua Trivy 也是 GitLab 代碼庫、Artifact Hub 以及 Harbor 鏡像倉庫的默認掃描器。除此之外,Aqua Trivy 也已成為 RedHat 認證的掃描組件,其影響力甚廣。
其實,從本質上而言,Trivy 則主要掃描我們 Kubernetes Cluster 工作負載中的漏洞情況,具體如下所示:
=====================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
作為一個開源掃描器,Datree 主要用于檢查 Kubernetes Cluster 文件資源是否存在錯誤配置。通常情況下,Datree 能夠通過阻止不符合所預設定的策略的資源來防止配置錯誤。基于 Datree 內置的各種規則,我們無須擔心自己編寫策略。畢竟,其內置了多個領域的多種不同規則,主要涉及容器、工作負載、CronJob、網絡、安全、棄用、Argo、NSA-hardening-guidelines 等。
除此之外,Datree 還能夠用于命令行、Admission Webhook,甚至作為 Kubectl 插件來針對 Kubernetes Cluster 對象運行策略進行掃描。
與上述 2 種不同工具相比而言,Datree 顯示我們的 Kubernetes 清單文件中是否存在任何錯誤配置。具體如下所示:
> 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 |+-----------------------------------+------------------------------------------------------+作為部署和擴展應用程序的一種方式,Kubernetes 和容器化正迅速流行起來。然而,隨著 DevOps 的普及,安全威脅也隨之增加,尤其是在團隊沒有始終如一地遵循最佳實踐的情況下。畢竟,安全是一件有趣的、難以捉摸的事情。
誠然,Kubernetes 是一種用于交付容器化應用程序的流行技術,但擴展 Kubernetes 環境仍具有挑戰性,每一個新部署的容器都會增加攻擊面。要有效處理 Kubernetes 安全性,我們必須對每個托管容器和應用程序請求具有完整的可見性。Kubernetes 擅長編排,但不擅長安全。對于所有部署,必須采用適當的部署架構和安全最佳實踐。
Adiós !
··································
Hello folks,我是 Luga,一個 10 年+技術老司機,從 IT 屌絲折騰到碼畜,最后到“醬油“架構師。如果你喜歡技術,不喜歡呻吟,那么恭喜你,來對地方了,關注我,共同學習、進步、超越~
您的每一個點贊、在看及分享,我都認真當成了喜歡 ~
標簽: