https://itnext.io/great-cks-kubernetes-security-exam-preparation-guide-to-help-you-pass-14fe5ab30ce1
本文是作者的心路歷程分享分享文,想要探討什麼是 Certified Kubernetes Security(CKS) Specialist 以及如果要準備這個考試可以如何準備
CKS
1. 根據 CNCF 官網的介紹, CKS 測驗是用來確認 CKS 能夠擁有與掌握如何安全的管理 Kubernetes Clusters,安全的概念包含安全的去處理這些 Container 以及整個 Kubernetes 平台的安全性(建置,部署,運行等所有階段)
2. 考取 CKS 之前要先通過 CKA (Certified Kubernetes Administrator) 的測試
3. Kubernetes 官網上其實有非常多的文件與操作說明, CKS 更像是一個幫助你去挑戰自我,確認自己有能力與知識去處理 k8s 安全相關的設定與操作。
如何準備 CKS
作者列舉了幾個重點概念
1. Docker Image 實作上的最佳實踐
2. 理解下列內容
a. CIS Kube-bench
b. Trivy
c. Sysdig/Falco
d. AppArmor
e. Seccomp
f. OPA/Gatekeeper
3. Linux 基礎理解,特別是 cGroup
4. Kubernetes 架構以及相關元件,譬如 RBAC, NetworkPolicy, PSP 等
5. API Server 相關操作,包含 Admission control, Audit 以及如何除錯
作者於文章後半部分列出了很多文章與影片連結,資源非常豐富,其中還提到 CKS/CKA/CKAD 的模擬器 (https://killer.sh/),對於該考試有興趣的一定要使用這些資源來練習
最後列出一些純 k8s 的一些考試內容
1. Admission controllers.
請確保你熟悉各種不同類型,如 PodSecurityPolicy,ImagePolicyWebhook 的實作與差異,並一定要知道這些是如何跟 API Server 互動的。
2. Immutable containers
如何使用 securitycontext 創造一個 Immutable 的容器並且避免一些可能會造成 mutable 的操作
3. Network Policy
4. PodSecurityPolicy(隨者 OPA 的發展,這個考試內容將會慢慢的被捨去)
5. gVisor
對於 CKS 考試有興趣的建議看看本篇文章,其中文章內有滿多跟安全相關的影片與文章也都值得閱讀
「docker實作」的推薦目錄:
- 關於docker實作 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於docker實作 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於docker實作 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於docker實作 在 twtrubiks/docker-tutorial: Docker 基本教學 - GitHub 的評價
- 關於docker實作 在 Docker技術實作 的評價
- 關於docker實作 在 Docker筆記(2)-Dockerfile語法使用 - Yen's部落格 的評價
- 關於docker實作 在 實作Dockerfile + flask 教學(附GitHub完整程式) - MAX行銷誌 的評價
- 關於docker實作 在 圖片式Docker教學與入門- 如何在不同作業系統上使用(實作) 的評價
docker實作 在 矽谷牛的耕田筆記 Facebook 的精選貼文
ref: https://blog.sigstore.dev/verify-oci-container-image-signatures-in-kubernetes-33663a9ec7d8
本篇文章要探討的也是跟 security 有關的一個概念,一樣也是基於 Software Supple Chain 這個概念去探討到底環境中用到的相關軟體是否都是安全且被信任的。
本文章分享的是一個基於 Kubernetes Admission Controller 實作的解決方案 Connaisseur,該解決方案的概念很簡單
1. 透過 Admission Controller 去監聽系統上所有 Container 的部署請求
2. 如果部署的 Container Image 是符合事先設定規則的,則允予通過
3. 如果不符合,該次部署就直接失敗
所謂的規則比較簡易的說法就是簽章,只有包含了可信賴簽章的 Container Image 才會被 Connaisseur 給允許通過
有了這個基本概念之後,下一個問題則是到底什麼是可信賴簽章?以及要如何讓想要使用的 Container Image 獲得一個可信賴的簽章?
文章內介紹了關於 Container Signatures 的一些演變,包含了 Docker Content Trust, Notary(V1) 以及 The Update Framework 早期的使用方式
到後來因為 OCI(Open Container Initiative) 的發展與調整,目前可以直接於 OCI Image Spec 一同夾帶該 Image 相關的簽章。
這意味者任何支援該 OCI 標準的 Container Registry 不但可以存放該 Container Image 同時也可以存放該 Image 的簽章。
這個使用方式的變更也促使了 Notary 這個開源專案(v2)的演進。
與此同時, Linux 基金會底下的 Sigstore 專案也再努力地針對開源專案的簽章方面努力著,期望能夠透過簽署與驗證功能來提升開源專案簽署方面的應用。
Sigstore 專案底下的 Cosign 小專案則是專門處理 OCI Image 相關的簽章事項,包含簽署,儲存以及驗證。
而本文所開頭所提及的 Connaisseur 專案則是可以基於 Cosign 所簽署的內容去進行驗證,透過兩者的配合可以用來確保部署到 Kubernetes 的所有 Image 都需要被 Cosign 給簽署過
作者特別強調,目前 Sigsotre 以及 Cosign 這些專案都還是屬於開發階段,所以 Connaisseur 本身對於這項功能的整合也是屬於一個開發實驗階段,很多東西都會不穩定
隨者資安意識以及相關事件 Solarwinds hack 等的出現,當各團隊基本的 DevOps, CI/CD 文化與流程都逐漸成型後, DevSecOps 的東西就會是下一個各團隊要開始煩惱的地方了
特別是所謂的 Software Supply Chain 上的各種潛在危險。
docker實作 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
ref: https://sysdig.com/blog/dockerfile-best-practices/
如果你常用到容器化、微服務架構,這些輕量化的架構當碰到問題時,背後的資安事件調查、報告、修復卻是影響甚鉅。然而,這些影響都可以透過「把安全意識擺在開發階段 (shifting left security)」來降低風險,而這篇文章就會講述 Dockerfile 的最佳實作手段有哪一些。
首先,我們會從幾個大面向來說明各種控制安全風險的細節,像是權限控管、降低攻擊層面、預防機敏資料洩漏,以及在發布 container image 時的注意事項。而你需要特別注意的是,其實 Dockerfile 也只是算是開發階段的一部份,所以這邊能提醒到的內容都屬於部署前(特別是開發階段)的準備。以下共提及 20 個你可以注意的重點,但因為篇幅較長,筆者將選出較重要的幾個來談談。
讓我們從「權限控管」說起:
Rootless container
根據報告結果顯示,有超過 58% 的 image 都是用 root 作為執行服務的使用者,所以在此也會建議透過 USER 參數來設定容器的預設使用者,同時,也可以利用執行環境/架構的設定來避免容器的預設使用者是 root。
Make executables owned by root and not writable
服務的 binary file 應該避免被任何人修改,容器的預設使用者只需要執行服務的權限,而不是擁有權。
至於「減少攻擊面」的部分:
Multistage builds小
在 image 的建立,可以透過 multistage build 來建立很多層 container,例如在第一層安裝編譯所需的套件,而第二層則只需安裝 runtime 所需的套件(如 openssl 等),再複製第一層所編譯出來的執行檔就可以了。其餘的因開發/編譯所安裝的套件皆不需要放在最後的 image,這樣同時也可以把 image 的大小縮小。
Distroless & Truested image
採用最小/最輕量化的 base image 來作為你打造 image 的基礎,同時使用可信任來源的 image,避免不小心在未知的情況引入好幾個潛在的安全威脅。(在原文中,sysdig 也使用了自身開發的工具來檢測 image 是否有安全問題,如果有需要也能參考看看)
而再來關於「機敏資訊」的部分:
Copy
當你在從你的開發環境複製檔案到 image 當中時,需要非常小心,因為你很可能一不小心就把你的密碼、開發環境的 token、API key 等資訊複製進去了。而且不要以為把 container 裡面的檔案刪掉就沒事了,別忘了 container image 是一層一層堆疊起來的,就算刪掉了,還是能在前面的 layer 裡面找到。
但如果還是有需要用到這些機敏資料,也可以考慮使用環境變數(docker run -e 引入),或是 Docker secret、Kubernetes secret 也能夠幫你引入這些參數。如果是設定檔的話,則可以用 mount 的方式來掛載到你的 container 裡面。
總而言之,你的 image 裡面不該有任何機敏資料、設定檔,開發服務時讓服務在 runtime 的時候可以接受來自環境變數的參數才是相對安全的。
其他的部分:
其實文章當中還有提到很多製作 image 的注意事項,像是在 deployment 階段,可能你部署的 latest 與實際的 latest 因時間差而不同。又或是在 image 裡面加上 health check,也才能做到狀況監測。
在容器化服務的時代,開發者不僅需要具備撰寫開發程式的能力,也要對於虛擬化環境有足夠的理解,否則,在對架構不熟的情況就將服務部署上去,或把 image 推送到公開的 registry,都可能造成重要的資料外洩與潛在的資安危機。
docker實作 在 Docker技術實作 的推薦與評價
Docker 技術 實作. Watch later. Share. Copy link. Info. Shopping. Tap to unmute. If playback doesn't begin shortly, try restarting your device. ... <看更多>
docker實作 在 Docker筆記(2)-Dockerfile語法使用 - Yen's部落格 的推薦與評價
認識Dockerfile語法,使用情境. ... Springboot + SQL (MariaDB) + docker 實作 · Docker筆記(4)-Docker Compose & 規模化部署比較 ... ... <看更多>
docker實作 在 twtrubiks/docker-tutorial: Docker 基本教學 - GitHub 的推薦與評價
Docker 基本教學- 從無到有Docker-Beginners-Guide 教你用Docker 建立Django + PostgreSQL - GitHub ... 它基於Google 公司推出的Go 語言實作。 ... <看更多>