Pod 安全許可
Pod 安全許可會實作 Kubernetes Pod 安全標準,以限制 Pod 的行為,並針對違反針對相關名稱空間所配置之 Pod 安全設定檔原則的 Pod 提供警告訊息及 kube-apiserver
審核事件。
IBM Cloud Kubernetes Service 1.25 版以及更新版本包括對 Kubernetes Pod 安全許可的支援。 如需相關資訊,請參閱 Kubernetes 文件中的 Pod Security Admission 及 Pod Security Standards。
IBM Cloud Kubernetes Service 1.25 及更高版本始終啟用 Pod Security Admission。 Kubernetes 的早期版本使用 pod 安全政策。
瞭解安全設定檔
Kubernetes Pod 安全標準定義下列三個設定檔。
- 特許
- 預設 Pod 安全配置會廣域施行
privileged
Kubernetes Pod 安全設定檔 (不受限制且容許已知專用權呈報),並根據restricted
設定檔所設定的原則產生警告及審核事件。 - 基準線
baseline
設定檔是一種限制設定檔,可防止已知專用權提升。 容許預設 (最小指定) Pod 配置。- 已受限
restricted
設定檔受到嚴格限制,並遵循現行 Pod 強化最佳作法。
如需 Pod 安全設定檔的相關資訊,請參閱 Kubernetes 文件中的 設定檔詳細資料。
Pod 安全許可包含三種模式,可定義偵測到潛在違規時控制平面採取的動作。
- 施行
- 原則違規會導致 Pod 遭到拒絕。
- 審核
- 原則違規會觸發將審核註釋新增至審核日誌中所記錄的事件,但以其他方式容許。
- warn
- 原則違規會觸發使用者面對的警告,但以其他方式容許。
當安全標準或設定檔實作變更以解決新特性時,您可以配置 Pod Security Admission 以使用特定版本的角色。 支援下列版本。
- Kubernetes major.minor 版本 (例如,
v1.25
) latest
如果 Pod 安全許可不是我的正確選擇呢?
雖然一律啟用「Pod 安全許可」,但它可以是多個許可控制器之一。 您可以配置協力廠商 Kubernetes 許可控制器,以實作符合您使用案例的其他安全原則模型。
如果您使用 privileged
設定檔將 Pod 安全許可配置為施行、警告及審核,則控制平面會容許所有 Pod 執行。 然後,您可以配置其他許可控制器來拒絕它們。
只要不採取下列任一動作,即可安裝協力廠商許可控制器。
- 它不會安裝自己的 Pod 安全原則 (PSP)。
- 它不依賴 PSP 強制執行部分原則。
配置 Pod 安全許可名稱空間標籤
您可以定義要用於每個名稱空間中 Pod 安全的許可控制模式。 Kubernetes 會定義一組標籤,您可以設定這些標籤來定義您要對名稱空間使用哪些預先定義的 Pod 安全標準設定檔。 您選取的標籤會定義在偵測到潛在違規時控制平面採取的動作。
依預設,IBM Cloud Kubernetes Service 會將 privileged
Pod 安全標籤新增至下列名稱空間。 這些名稱空間使用 privileged
設定檔標示為 enforce
、audit
及 warn
。
kube-system
ibm-system
ibm-operators
calico-system
( 1.29 版以及更新版本)tigera-operator
( 1.29 版以及更新版本)calico-apiserver
(版本 ) 1.31
請勿移除或變更這些名稱空間的標籤。
名稱空間可以標示為設定任何或所有 Pod 安全許可 modes
的 Pod 安全設定檔。
例如,除了使用 warn
或 audit
之外,您還可以使用 baseline
設定檔來標示名稱空間以施行 privileged
設定檔。
此標籤可讓管理者及應用程式開發人員針對 baseline
設定檔只尋找警告及審核記錄,而不拒絕 Pod,從而讓應用程式執行。 然後,您可以在將施行模式變更為 baseline
之前對工作量進行必要的變更。
「Pod 安全許可」名稱空間標籤的格式為 pod-security.kubernetes.io/<MODE>: <LEVEL>
和 pod-security.kubernetes.io/<MODE>-version: <VERSION>
。
pod-security.kubernetes.io/enforce
pod-security.kubernetes.io/enforce-version
pod-security.kubernetes.io/audit
pod-security.kubernetes.io/audit-version
pod-security.kubernetes.io/warn
pod-security.kubernetes.io/warn-version
若要標示名稱空間以施行 privileged
設定檔,並針對 baseline
設定檔違規產生警告及審核事件,請使用下列標籤。
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/enforce-version: latest
pod-security.kubernetes.io/audit: baseline
pod-security.kubernetes.io/audit-version: latest
pod-security.kubernetes.io/warn: baseline
pod-security.kubernetes.io/warn-version: latest
預設 Pod 安全許可外掛程式配置
依預設,IBM Cloud Kubernetes Service 會使用下列 PodSecurityConfiguration
。
apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
defaults:
enforce: "privileged"
enforce-version: "latest"
audit: "privileged"
audit-version: "latest"
warn: "privileged"
warn-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: []
自訂 Pod Security Admission 外掛程式配置
叢集層面的 Pod Security Admission 外掛程式配置會針對沒有 Pod 安全標籤或豁免的所有名稱空間設定 enforce
、audit
及 warn
行為。
對於 Kubernetes 1.24 叢集,apiVersion
必須是 pod-security.admission.config.k8s.io/v1beta
。 對於 1.25 以及更新版本 pod-security.admission.config.k8s.io/v1
是偏好的版本,但仍然可以使用 v1beta
API 版本。
-
建立包含
PodSecurityConfiguration
資源的 YAML 檔。 您可以使用預設配置來啟動。apiVersion: pod-security.admission.config.k8s.io/v1 kind: PodSecurityConfiguration defaults: enforce: "privileged" enforce-version: "latest" audit: "privileged" audit-version: "latest" warn: "privileged" warn-version: "latest" exemptions: usernames: [] runtimeClasses: [] namespaces: []
-
進行您想要使用的自訂。 請檢閱下列配置每一個區段的相關資訊。
defaults
-
配置的
defaults
區段會定義沒有 Pod 安全標籤之名稱空間的叢集層面預設值。 欄位可以具有與對應名稱空間標籤相同的值。 exemptions
-
配置的
exemptions
區段可讓您建立因特定名稱空間相關聯原則而被禁止的 Pod。 豁免維度包括下列情況。-
使用者名稱: 系統會忽略來自具有豁免已鑑別 (或模擬) 使用者名稱之使用者的要求。 使用者名稱通常是 IAM 使用者或服務帳戶。 例如
usernames: [ "IAM#user@example.com" ]
。 您也可以豁免與admin kubeconfig
用戶端憑證相關聯的使用者名稱。 如果您要指定admin kubeconfig
憑證,使用者名稱是現行用戶端憑證的CN
元件。kubectl config view --minify -o jsonpath='{.users[0].user.client-certificate}' /home/user/.bluemix/plugins/container-service/clusters/mycluster-cheku1620qbs90gq6mdg-admin/admin.pem
在下列範例中,使用者名稱是
IBMid-27000xxxxx-admin-2023-05-12
。 如果您取得新的admin kubeconfig
,則使用者名稱可能不同。openssl x509 -in <client-certificate> -subject -noout` subject=C = US, ST = San Francisco, L = CA, O = ibm-admins, CN = IBMid-27000xxxxx-admin-2023-05-12
-
RuntimeClassNames:指定豁免執行時期類別名稱的 Pod 和工作負載資源將被忽視。
-
名稱空間: 忽略豁免名稱空間中的 Pod 及工作量資源。
-
-
儲存您的自訂作業 YAML 檔案。
-
執行
ibmcloud ks cluster master pod-security set
指令。ibmcloud ks cluster master pod-security set --cluster CLUSTER --config-file CONFIG-FILE
當您執行 ibmcloud ks cluster master pod-security set
指令時,如果未指定配置檔,則 Pod 安全許可會重設為預設配置。