日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在容器環境中,K8S管理著擁有數個、數百個甚至數千個節點的容器集群,其配置的重要性不可忽略。K8S的配置選項很復雜,一些安全功能并非默認開啟,這加大了安全管理難度。如何有效地使用包括Pod安全策略、網絡策略、API服務器、Kubelet及其他K8S組件和功能策略建立安全的K8S環境?青藤云安全為你整理了以下12個最佳實踐,對K8S進行全面加固。

1、將K8S更新到最新穩定版本

K8S新版本通常會引入一系列不同的安全功能,提供關鍵的安全補丁等,將K8S部署更新到最新穩定版本,使用到達stable狀態的API,能夠補救一些已知的安全風險,幫助解決影響較大的K8S安全缺陷問題,大大減少攻擊面。

2、利用Pod策略防止風險容器/Pod被使用

PodSecurityPolicy是K8S中可用的集群級資源,通過啟用PodSecurityPolicy準入控制器來使用此功能。用戶至少要授權一個策略,否則將不允許在集群中創建Pod。Pod安全策略解決了以下幾個關鍵安全用例:

防止容器以特權模式運行,因為這種類型的容器將會擁有底層主機可用的大部分能力

避免容器與宿主機共享非必要的命名空間,如PID、IPC、NET等,確保Docker容器和底層主機之間的適當隔離

限制Volume的類型。例如,通過可寫HostPath目錄卷,操作者可寫入文件系統,讓容器得以在pathprefix之外隨意移動,因此,必須使用readonly:true

限制主機文件系統的使用

通過ReadOnlyRootFilesystem將根文件系統設置為只讀

基于defaultAllowPrivilegeEscalation和allowPrivilegeEscalation選項,防止Pod及Pod中的進程獲得高權限

在遵循最小權限原則的前提下,將Linux功能限制為最低權限

此外,一些Pod屬性也可以通過securityContext來控制。

3、利用K8S命名空間正確隔離K8S資源

通過命名空間可以創建邏輯分區、強制分離資源以及限制用戶權限范圍。在一個命名空間內的資源名稱必須是唯一的,且不能相互嵌套,每個K8S資源只能位于一個命名空間中。在創建命名空間時,要避免使用前綴kube-,因為kube-用于K8S系統的命名空間。

4、利用網絡策略限制容器和Pod通信

網絡策略功能規定了Pod群組之間相互通信以及Pod群組與其他網絡端點間進行通信的方式,可以理解為K8S的防火墻。雖然Kubernetes支持對NetworkPolicy資源的操作,但如果沒有實現該資源的插件,僅創建該資源是沒有效果的,可以通過使用支持網絡策略的網絡插件,比如Calico、Cilium、Kube-router、Romana和Weave Net等。

如果有一個適用于Pod的網絡策略被允許,那么與Pod的連接就會被允許。要明確可以允許哪些Pod訪問互聯網,如果在每個命名空間內使用了default-deny-all命令,那所有的Pod都不能相互連接或接收來自互聯網的流量。對于大多數應用程序來說,可以通過設置指定標簽的方式,創建針對這些標簽的網絡策略來允許一些Pod接收來自外部的流量。

5、利用ImagePolicyWebhook策略管理鏡像來源

可以通過準入控制器ImagePolicyWebhook來防止使用未經驗證的鏡像,從而拒絕使用未經驗證的鏡像來創建Pod,這些鏡像包括近期未掃描過的鏡像、未列入白名單的基礎鏡像、來自不安全的鏡像倉庫的鏡像。

6、安全配置K8S API服務器

Kubernetes API 服務器處理來自集群內運行的用戶或應用程序的 REST API 調用,以啟用集群管理。在主節點運行ps -ef | grep kube-apiserver命令,并檢查輸出中的以下信息:

7、安全配置Kube-scheduler

Kube-scheduler作為K8S的默認編排器,負責監視未分配節點的新創建的Pod,從而將該Pod調度到合適的Node上運行。在主節點上運行ps -ef | grep kube-scheduler命令,并檢查輸出中的以下信息:

--profiling設置為false,以大大減少攻擊面。當遇到系統性能瓶頸的時候,profiling可以通過識別定位瓶頸來發揮作用,對性能調優有顯著幫助。

--address設置為127.0.0.1,防止將編排器綁定到一個非回環的不安全地址。

8、安全配置Kube-controller-manager

在主節點上運行ps -ef | grep kube-controller-manager命令,并檢查輸出中的以下信息:

--terminated-pod-gc-threshold設置為一個適合的值,以確保擁有足夠可用的資源,并不會導致性能降低。

--profilingargument 設置為false。

--use-service-account-credentials設置為true。這種設置可以配合RBAC使用,確保控制環路以最小權限原則運行。

--service-account-private-key-file設置為單獨的公鑰/私鑰對,用于簽署服務賬戶令牌。

--root-ca-file設置為一個適合的值,在包含API服務器的服務證書的根證書中進行設置,這樣Pod會先驗證API服務器的服務證書,然后再建立連接。

--RotateKubeletServerCertificate設置為true,并且只適用于Kubelets從API服務器獲得其證書的情況下。

--address argument設置為127.0.0.1,確保控制管理器服務不會與非回環的不安全地址綁定。

9、安全配置Etcd

Etcd是一種分布式鍵值存儲,實現跨集群存儲數據。K8S集群都使用Etcd作為主要的數據存儲方式,來處理K8S集群狀態的存儲和復制數據,使系統人員可以根據需要從Etcd讀取并寫入數據。安全地配置Etcd與其服務器的通信是最關鍵的。在Etcd服務器節點上運行ps -ef | grep etcd命令,并檢查輸出中的以下信息:

--cert-file和 --key-file根據需要設置,以確保客戶端連接只通過TLS(傳輸中加密)提供服務。

--client-cert-auth 設置為true,確保所有用戶的訪問都會包括一個有效的客戶端證書。

--auto-tls不要設置為true,這會禁止客戶在TLS中使用自簽名的證書。

如果使用的是Etcd集群(而非單一的Etcd服務器),要檢查一下--peer-cert-file 和--peer-key-file 參數是否設置正確,以確保同級別的Etcd連接在Etcd集群中被加密。此外,檢查--peer-client-cert-auth 參數是否設置為true,確保只有經過認證的同級別的Etcd才能訪問Etcd集群。最后檢查一下--peer-auto-tls 參數是否設置為true。

不要為Etcd與Kubernetes使用相同的授權證書,可以通過驗證API服務器的--client-ca-file引用的文件與Etcd使用的--trusted-ca-file之間的差別來確保這種區分情況。

10、安全配置Kubelet

Kubelet是運行在每個節點上的主要“節點代理”,錯誤地配置Kubelet會面臨一系列的安全風險,所以,可以使用運行中的Kubelet可執行文件參數或Kubelet配置文件來設置Kubelet配置。找到Kubelet配置文件(通過config 參數可找到Kubelet配置文件的位置),運行ps -ef | grep kubelet | grep config 命令,并檢查輸出中的以下信息:

--anonymous-auth 設置為false。常見的錯誤配置之一是允許Kubelet服務器提供匿名和未經驗證的請求。

--authorization-mod設置為AlwaysAllow。若使用默認配置值,要確保有--config 指定的Kubelet配置文件,并且該文件將authorization: mode 設置為AlwaysAllow以外的配置。

--client-ca-file 設置的是客戶端證書授權的位置。若使用默認配置值,要確保有一個由--config指定的Kubelet配置文件,并且該文件已經過認證,同時將x509:clientCAFile 設置為客戶端證書授權的位置。

--read-only-port 設置為0,若使用默認配置值,要確保有一個由config指定的文件,如果要設置適合的值,則將readOnlyPort設置為0。

--protect-kernel-defaults設置為true。若使用默認配置值,要確保有一個由config指定的文件,并且該文件已將protectKernelDefaults設置為true。

--hostname-override 使用默認配置值,確保Kubelet和API服務器之間TLS設置沒有中斷。

--event-qps設置為0。若使用默認配置值,要確保有一個由config指定的kubelet配置文件,并且eventRecordQPS設置為0。

--tls-cert-file和--tls-private-key-file參數設置為合適的值。通過--config所指定的Kubelet config包含tlsCertFile 和 tlsPrivateKeyFile,確保Kubelet上的所有連接都是通過TLS進行的。

如果Kubelet從API服務器獲得證書,將RotateKubeletServerCertificate和--rotate-certificates設置為true,確保Kubelet只使用強密碼。

11、確保主節點的配置文件安全

主節點上的配置文件安全主要涉及到確保API服務器的Pod規范文件權限和所有權、控制管理器Pod規范文件的權限和所有權、編排器Pod規范文件的權限和所有權、Etcd Pod規范文件的權限和所有權、容器網絡接口文件的權限和所有權、Etcd數據目錄的權限和所有權、admins.conf文件的權限和所有權、scheduler.conf文件的權限和所有權、controller-manager.conf文件權限和所有權、Kubernetes PKI目錄&文件權限和所有權、Kubernetes PKI密鑰文件權限等安全性。

以API服務器的Pod規范文件權限和所有權為例:

文件權限:在主節點上運行stat -c %a /etc/kubernetes/manifests/kube-apiserver.yaml 命令 (指定系統的文件位置),在輸出中檢查和確保權限是644或更多權限限制,并保持文件的完整性。

所有權:在主節點上運行stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml命令 (指定系統的文件位置),在輸出中檢查和確保所有權權限設置為root:root。

12、確保工作節點的配置文件安全

保護工作節點的配置文件安全包括確保Kubelet服務文件權限、Kubelet.conf文件權限和所有權、Kubelet服務文件所有權、代理Kubeconfig文件的權限和所有權、證書管理中心的文件權限、客戶端證書管理中心的文件所有權、Kubelet配置文件的權限和所有權。

以Kubelet服務文件權限為例:在主節點上運行stat-c%a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf命令 (指定系統的文件位置),在輸出中檢查和確保權限是644或更多權限限制,并保持文件的完整性。

總結

K8S提供了創建安全應用的強大功能,但我們需要確保所有的配置設置正確。上文介紹的這些配置、代碼示例和詳細建議,可幫助您避免最常見的K8S錯誤配置相關的安全風險。

分享到:
標簽:加固 最全 實踐 錯誤 配置 指南 K8S
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定