IBM Cloud Docs
ポッド・セキュリティーのアドミッション

ポッド・セキュリティーのアドミッション

ポッド・セキュリティー許可は、ポッドの動作を制限する Kubernetes ポッド・セキュリティー標準を実装し、関連する名前空間に対して構成されたポッド・セキュリティー・プロファイル・ポリシーに違反するポッドに対して警告メッセージと kube-apiserver 監査イベントを提供します。

Red Hat OpenShift on IBM Cloud バージョン 4.11 以降には、 Kubernetes ポッド・セキュリティー・アドミッションのサポートが含まれています。 詳しくは、 Kubernetes 資料の Pod Security Admission および Pod Security Standards を参照してください。

Pod Security Admissionは、 Red Hat OpenShift on IBM Cloud バージョン 4.11 以降では常に有効です。 Kubernetes の以前のバージョンは、ポッドセキュリティポリシーを使用している。

セキュリティー・プロファイルについて

Kubernetes ポッド・セキュリティー標準は、以下の 3 つのプロファイルを定義します。

特権
デフォルトのポッド・セキュリティー構成は、 privileged Kubernetes ポッド・セキュリティー・プロファイルをグローバルに適用します。これは無制限であり、既知の特権エスカレーションを許可し、 restricted プロファイルによって設定されたポリシーに基づいて警告および監査イベントを生成します。
ベースライン
baseline プロファイルは、既知の特権エスカレーションを防止する制限付きプロファイルです。 デフォルト (最小指定) のポッド構成を許可します。
制限付き
restricted プロファイルは大きく制限されており、現在のポッド強化のベスト・プラクティスに従っています。

ポッド・セキュリティー・プロファイルについて詳しくは、 Kubernetes 資料の プロファイルの詳細 を参照してください。

ポッド・セキュリティー・アドミッションには、潜在的な違反が検出された場合にコントロール・プレーンが実行するアクションを定義する 3 つのモードが含まれています。

適用
ポリシー違反により、ポッドが拒否されます。
監査
ポリシー違反は、監査ログに記録されたイベントへの監査アノテーションの追加をトリガーしますが、それ以外の場合は許可されます。
warn
ポリシー違反は、ユーザーに表示される警告をトリガーしますが、それ以外の場合は許可されます。

新しい機能に対応するためにセキュリティー標準またはプロファイル実装が変更されたため、特定のバージョンの役割を使用するようにポッド・セキュリティー・アドミッションを構成できます。 対応バージョンは以下の通り。

  • Kubernetes major.minor のバージョン (例: v1.25)
  • latest

ポッド・セキュリティー・アドミッションが私にとって適切な選択肢ではないとしたらどうでしょうか?

ポッド・セキュリティー・アドミッションは常に有効になっていますが、複数のアドミッション・コントローラーの 1 つにすることができます。 サード・パーティーの Kubernetes アドミッション・コントローラーを構成して、ユース・ケースに適合する他のセキュリティー・ポリシー・モデルを実装できます。

privileged プロファイルを使用してポッド・セキュリティー管理者が適用、警告、および監査を行うように構成した場合、コントロール・プレーンはすべてのポッドの実行を許可します。 その後、他のアドミッション・コントローラーがそれらを拒否するように構成できます。

以下のいずれのアクションも実行しない限り、サード・パーティーのアドミッション・コントローラーをインストールできます。

  • 独自のポッド・セキュリティー・ポリシー (PSP) はインストールされません。
  • ポリシーの一部を適用するために PSP に依存することはありません。

ポッド・セキュリティーのアドミッション名前空間ラベルの構成

各名前空間でポッド・セキュリティーに使用するアドミッション制御モードを定義できます。 Kubernetes は、名前空間に使用する事前定義ポッド・セキュリティー標準プロファイルを定義するために設定できるラベルのセットを定義します。 選択するラベルは、潜在的な違反が検出された場合にコントロール・プレーンが実行するアクションを定義します。

デフォルトでは、 Red Hat OpenShift on IBM Cloud は、 privileged ポッド・セキュリティー・ラベルを以下の名前空間に追加します。 これらの名前空間には、 privileged プロファイルを使用して、 enforceaudit、および warn のラベルが付けられます。

  • kube-system
  • ibm-system
  • ibm-operators
  • calico-system
  • tigera-operator
  • calico-apiserver (バージョン 4.16 以降)

これらの名前空間または openshift-* 名前空間のラベルを削除したり変更したりしないでください。

名前空間にラベルを付けて、ポッド・セキュリティー・アドミッション・ modes の一部またはすべてにポッド・セキュリティー・プロファイルを設定できます。

例えば、 baseline プロファイルを使用して warn または audit を使用することに加えて、 privileged プロファイルを適用するために名前空間にラベルを付けることができます。

このラベルにより、管理者およびアプリケーション開発者は、ポッドを拒否することなく、 baseline プロファイルに対する警告および監査レコードのみを検索することで、アプリケーションをドライランすることができます。 その後、強制モードを baseline に変更する前に、ワークロードに必要な変更を加えることができます。

ポッド・セキュリティー・アドミッションの名前空間ラベルの形式は、 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

デフォルトのポッド・セキュリティー・アドミッション・プラグイン構成

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: []

ポッド・セキュリティー許可の構成

事前定義されたポッド・セキュリティー・ラベルを使用して、名前空間レベルでポッド・セキュリティーの動作を構成できます。 構成について詳しくは、 Red Hat OpenShift 資料の ポッド・セキュリティー許可の同期の制御 を参照してください。 手順はクラスター・バージョンごとに異なるため、正しいバージョンの手順を表示していることを確認してください。

Red Hat OpenShift on IBM Cloudの apiserver ログの構成について詳しくは、 Kubernetes API サーバーの監査ログ を参照してください。

ポッド・セキュリティー・アドミッションは、セキュリティー・プロファイルに違反するポッドの監査イベントを適用、警告、および生成する機能を提供します。 OpenShift 4.11では、デフォルト構成により特権プロファイルが適用されますが、 restricted プロファイルに基づいて警告および監査イベントも生成されます。 この動作は、名前空間で事前定義されたポッド・セキュリティー・ラベルを使用して、名前空間レベルで制御できます。 ポッド・セキュリティー・プロファイルが適用されると、以下の例のような警告が表示される場合があります。

`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 プロファイルに対して許可されている限り実行できます。 この警告は、指定されたポッド・セキュリティー・プロファイルの下でポッドを実行するには、ポッドとコンテナーの securityContext プロファイルを変更する必要があることを示します。例えば、 allowPrivilegeEscalation=false オプションを設定したり、それらの機能を許可するポッド・セキュリティー・プロファイルを使用したりする必要があります。

Red Hat OpenShift には、特定の名前空間内のサービス・アカウントの SCC 許可に基づいて名前空間ラベルを適用するコントローラーも含まれています。 ポッド・セキュリティー・アドミッションと SCC の両方が適用されます。 主に SCC を使用し、ポッド・セキュリティー・アドミッション同期コントローラーを使用して、名前空間のポッド・セキュリティー・ラベルを調整できます。 あるいは、名前空間内のすべてのサービス・アカウントが同等 (またはそれ以上の特権) を使用できるようにする名前空間役割バインディングを持つポッド・セキュリティー・プロファイルを主に使用できます。 SCC。 グローバルに適用される役割バインディングやクラスター役割バインディング (すべての許可ユーザーや、すべての名前空間内のすべてのサービス・アカウントなど) を定義しないでください。これらのバインディングは、特定の SCC の下で実行されることが予想される Red Hat OpenShift コンポーネントに影響を与える可能性があります。

追加リソース