プロファイル適用性: レベル1
コンテナを
securityContext.privileged
フラグがtrue
に設定された状態で一般的に実行しないでください。特権コンテナはすべてのLinuxカーネル機能とデバイスにアクセスできます。フル特権で実行されるコンテナは、ホストができるほとんどのことを行うことができます。このフラグは、ネットワークスタックの操作やデバイスへのアクセスなど、特別なユースケースを許可するために存在します。特権コンテナを許可しない少なくとも1つのアドミッションコントロールポリシーを定義する必要があります。特権コンテナを実行する必要がある場合は、別のポリシーで定義し、限られたサービスアカウントとユーザにのみそのポリシーを使用する許可が与えられていることを慎重に確認する必要があります。
![]() |
注意デフォルトでは、特権コンテナの作成に制限はありません。
|
影響
spec.containers[].securityContext.privileged: true
、spec.initContainers[].securityContext.privileged: true
、spec.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'
OR
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"]
ネームスペースはデフォルトで除外されます。このコマンドは、コマンドラインJSONプロセッサであるjqを使用して、
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ポータルでポリシーを検索することで見つけることができます。
詳細な手順ガイドはこちらで見つけることができます: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes