ビュー:
プロファイル適用性: レベル1
コンテナをsecurityContext.privilegedフラグがtrueに設定された状態で一般的に実行することを許可しないでください。
特権コンテナはすべてのLinuxカーネル機能とデバイスにアクセスできます。フル特権で実行されているコンテナは、ホストができるほとんどのことを行うことができます。このフラグは、ネットワークスタックの操作やデバイスへのアクセスなど、特別なユースケースを許可するために存在します。
特権コンテナを許可しない入場制御ポリシーが少なくとも1つ定義されている必要があります。特権コンテナを実行する必要がある場合は、別のポリシーで定義し、そのポリシーを使用する権限が限られたサービスアカウントとユーザにのみ与えられていることを慎重に確認する必要があります。
注意
注意
デフォルトでは、特権コンテナの作成に制限はありません。

影響

spec.containers[].securityContext.privileged: truespec.initContainers[].securityContext.privileged: truespec.ephemeralContainers[].securityContext.privileged: trueで定義されたPodは許可されません。

監査

クラスター内の各ネームスペースで使用されているポリシーを一覧表示し、各ポリシーが特権コンテナの許可を禁止していることを確認してください。
多くのポッドがある環境では、各ポッドの設定を手動で検索するのは面倒かもしれませんが、grepや他のコマンドラインツールを使用して、より自動化された方法を利用できます。
こちらは、kubectl、grep、およびシェルスクリプトを組み合わせて、より自動化されたソリューションにアプローチする方法の例です。
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == true) | .metadata.name'
または:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == true) | select(.metadata.namespace != "kube-system" and .metadata.namespace != "gatekeeper-system" and .metadata.namespace != "azure-arc" and .metadata.namespace != "azure-extensions-usage-system") | "\(.metadata.name) \(.metadata.namespace)"'
PodSecurityPolicyを作成する際、["kube-system", "gatekeeper-system", "azure-arc", "azure-extensions-usage-system"]ネームスペースはデフォルトで除外されます。
このコマンドは、jqというコマンドラインJSONプロセッサを使用して、kubectl get podsのJSON出力を解析し、任意のコンテナでsecurityContext.privilegedフラグがtrueに設定されているポッドをフィルタリングします。特定の要件やポッド仕様の構造に応じて、コマンドを調整する必要があるかもしれないことに注意してください。

修復

ユーザワークロードがあるクラスター内の各ネームスペースにポリシーを追加して、特権コンテナのアドミッションを制限します。
クラスター内のネームスペースでPSAを有効にするには、適用したいポリシーの値を指定してpod-security.kubernetes.io/enforceラベルを設定してください。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=restricted
上記のコマンドはNAMESPACE名前空間に対して制限付きポリシーを適用します。
すべてのネームスペースに対してPod Security Admissionを有効にすることもできます。
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=baseline
Podセキュリティポリシーと割り当ては、Azureポータルでポリシーを検索することで見つけることができます。詳細な手順ガイドは、Kubernetesポリシードキュメントで見つけることができます。