IBM Cloud Docs
Pod 安全許可

Pod 安全許可

Pod 安全許可會實作 Kubernetes Pod 安全標準,以限制 Pod 的行為,並針對違反針對相關名稱空間所配置之 Pod 安全設定檔原則的 Pod 提供警告訊息及 kube-apiserver 審核事件。

IBM Cloud Kubernetes Service 1.25 版以及更新版本包括對 Kubernetes Pod 安全許可的支援。 如需相關資訊,請參閱 Kubernetes 文件中的 Pod Security AdmissionPod 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 設定檔標示為 enforceauditwarn

  • kube-system
  • ibm-system
  • ibm-operators
  • calico-system ( 1.29 版以及更新版本)
  • tigera-operator ( 1.29 版以及更新版本)
  • calico-apiserver (版本 ) 1.31

請勿移除或變更這些名稱空間的標籤。

名稱空間可以標示為設定任何或所有 Pod 安全許可 modes 的 Pod 安全設定檔。

例如,除了使用 warnaudit 之外,您還可以使用 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 安全標籤或豁免的所有名稱空間設定 enforceauditwarn 行為。

對於 Kubernetes 1.24 叢集,apiVersion 必須是 pod-security.admission.config.k8s.io/v1beta。 對於 1.25 以及更新版本 pod-security.admission.config.k8s.io/v1 是偏好的版本,但仍然可以使用 v1beta API 版本。

  1. 建立包含 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: []
    
  2. 進行您想要使用的自訂。 請檢閱下列配置每一個區段的相關資訊。

    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 及工作量資源。

  3. 儲存您的自訂作業 YAML 檔案。

  4. 執行 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 安全許可會重設為預設配置。