花苞安全入場
Pod 安全性承認實作了限制 Pod 行為的 Kubernetes Pod 安全性標準,針對違反為相關命名空間設定的 Pod 安全性設定檔政策的 Pod,提供警告訊息和 kube-apiserver 稽核事件。
Red Hat OpenShift on IBM Cloud 4.11 及更高版本包含對 pod 安全認證的支援。Kubernetes 如需詳細資訊,請參閱 Kubernetes 文件中的 Pod Security Admission 和 Pod Security Standards。
Red Hat OpenShift on IBM Cloud 4.11 及更高版本始終啟用 Pod Security Admission。 Kubernetes 的早期版本使用 pod 安全政策。
瞭解安全設定檔
Kubernetes pod 安全標準定義了以下三種設定檔。
- 特許
- 預設 pod 安全設定會全局強制執行
privilegedKubernetes pod 安全設定檔,此設定檔不受限制,並允許已知的權限升級,並根據restricted設定檔所設定的政策產生警告和稽核事件。 - 基準線
baseline設定檔是一種限制性設定檔,可防止已知的權限升級。 允許預設 (最小指定) Pod 設定。- 已受限
restricted設定檔受到嚴格限制,並遵循目前的 pod 加強最佳實作。
如需 Pod 安全設定檔的詳細資訊,請參閱 Kubernetes 文件中的 設定檔詳細資訊。
Pod Security Admission 包含三種模式,定義控制平面在偵測到潛在違規時採取的行動。
- 施行
- 違反政策會導致 Pod 被拒絕。
- 審核
- 違反政策會觸發在稽核記錄中記錄的事件中加入稽核註解,但在其他方面是允許的。
- warn
- 違反政策會觸發面向使用者的警告,但在其他方面是允許的。
當安全標準或設定檔實作因應新功能而改變時,您可以設定 Pod Security Admission 以使用特定版本的角色。 支援以下版本。
- Kubernetes major.minor 版本 (例如
v1.25) latest
如果 Pod Security 入學不適合我怎麼辦?
雖然 Pod Security Admission 始終啟用,但它可以是多個 Admission Controller 之一。 您可以設定第三方 Kubernetes 接納控制器,以執行其他適合您使用情況的安全政策模型。
如果您使用 privileged 設定檔將 Pod Security Admission 設定為強制執行、警告和稽核,則控制平面允許所有 Pod 執行。 然後,您可以設定其他存取控制器來拒絕它們。
只要不採取下列任何一項動作,您就可以安裝第三方存取控制器。
- 它不會安裝自己的 pod 安全政策 (PSP)。
- 它並不依賴 PSP 來執行部分政策。
設定 Pod 安全性接納命名空間標籤
您可以在每個命名空間中定義要用於 pod 安全的存取控制模式。 Kubernetes 定義了一組標籤,您可以設定這些標籤,以定義要在命名空間中使用哪個預先定義的 Pod 安全標準設定檔。 您選擇的標籤定義了控制平面在偵測到潛在違規時所採取的動作。
預設情況下,Red Hat OpenShift on IBM Cloud 會將 privileged Pod Security 標籤加入下列命名空間。 這些命名空間透過使用 privileged 設定檔,標示為 enforce、audit 和 warn。
kube-systemibm-systemibm-operatorscalico-systemtigera-operatorcalico-apiserver(版本 4.16 及更新版本)
請勿移除或變更這些命名空間或任何 openshift-* 命名空間的標籤。
可標示命名空間,為任何或所有 Pod Security Admission 設定 Pod 安全設定檔 modes。
例如,除了使用 warn 或 audit 外,您還可以使用 baseline 設定檔來標示命名空間,以強制執行 privileged 設定檔。
此標籤允許管理員和應用程式開發人員在不拒絕 Pod 的情況下,僅針對 baseline 設定檔尋找警告和稽核記錄,以乾式運行應用程式。 然後,您可以先對工作負載進行必要的變更,再將強制執行模式變更為 baseline。
Pod 安全准入命名空間標籤的形式為 pod-security.kubernetes.io/<MODE>: <LEVEL> 和 pod-security.kubernetes.io/<MODE>-version: <VERSION>。
pod-security.kubernetes.io/enforcepod-security.kubernetes.io/enforce-versionpod-security.kubernetes.io/auditpod-security.kubernetes.io/audit-versionpod-security.kubernetes.io/warnpod-security.kubernetes.io/warn-version
若要標示命名空間以強制執行 privileged 設定檔,並針對違反 baseline 設定檔的行為產生警告和稽核事件,請使用下列標籤。
pod-security.kubernetes.io/enforce: privilegedpod-security.kubernetes.io/enforce-version: latestpod-security.kubernetes.io/audit: baselinepod-security.kubernetes.io/audit-version: latestpod-security.kubernetes.io/warn: baselinepod-security.kubernetes.io/warn-version: latest
預設 Pod Security Admission 外掛程式設定
Red Hat OpenShift on IBM Cloud 預設使用下列 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 安全存取
您可以使用預先定義的 pod 安全標籤,在命名空間層級設定 pod 安全行為。 如需有關設定的詳細資訊,請參閱 Red Hat OpenShift 文件中的 控制 pod 安全性承認同步。 請注意,每個群集版本的步驟都不同,因此請確定您檢視的是正確版本的步驟。
有關為 Red Hat OpenShift on IBM Cloud 配置 apiserver 日誌的詳細資訊,請參閱 Kubernetes API 伺服器稽核日誌。
Pod 安全性承認提供對違反安全設定檔的 Pod 執行、警告和產生稽核事件的能力。 在 OpenShift 4.11 中,預設設定會強制執行特權設定檔,同時也會根據 restricted 設定檔產生警告和稽核事件。 可透過在名稱空間上使用預先定義的 pod 安全標籤,在名稱空間層級控制此行為。 執行 Pod 安全設定檔時,您可能會看到如以下範例的警告。
`Warning: would violate PodSecurity "restricted:latest": host namespaces (hostNetwork=true, hostPID=true), privileged (container "container-00" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "container-00" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "container-00" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "host" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "container-00" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "container-00" must not set runAsUser=0), seccompProfile (pod or container "container-00" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")`
在這個範例中,只要服務帳號授權到 SecurityContextConstraint 設定檔,就仍會建立 Pod 並且可以執行。 警告表示,要使 pod 在指定的 pod 安全設定檔下執行,必須變更 pod 和容器的 securityContext 設定檔,例如設定 allowPrivilegeEscalation=false 選項,或者必須使用允許這些功能的 pod 安全設定檔。
Red Hat OpenShift 還包含一個控制器,可根據指定命名空間中服務帳戶的 SCC 權限套用命名空間標籤。 Pod 安全認證和 SCC 都會套用。 您可以主要使用 SCC,並使用 pod 安全性承認同步控制器調整命名空間上的 pod 安全性標籤。 或者,您可以主要使用具有命名空間角色綁定的 pod 安全設定檔,讓命名空間中的所有服務帳戶都能使用同等(或更高權限)的 SCC。 請勿定義適用於全局的角色綁定或群集角色綁定,例如所有授權使用者或所有命名空間中的所有服務帳戶,因為這些綁定可能會影響預期在特定 SCC 下執行的 Red Hat OpenShift 元件。
其他資源
- 瞭解並管理 pod 安全認證。
- Pod 安全入門 Red Hat OpenShift 4.11.
- Kubernetes API 伺服器稽核記錄 說明如何在 Red Hat OpenShift on IBM Cloud 服務中設定 API 伺服器稽核記錄。