ビュー:
プロファイル適用性: レベル1
コンテナをallowPrivilegeEscalationフラグがtrueに設定された状態で実行することを一般的に許可しないでください。この権限を許可すると、コンテナを実行しているプロセスが開始時よりも多くの権限を取得する可能性があります。
これらの権利は全体的なコンテナサンドボックスによって依然として制約されており、この設定は特権コンテナの使用とは関係がないことに注意してください。
allowPrivilegeEscalationフラグがtrueに設定されているコンテナは、親プロセスよりも多くの権限を取得できるプロセスを持つ可能性があります。
コンテナが特権昇格を許可しないようにするために、少なくとも1つのアドミッションコントロールポリシーを定義する必要があります。setuidバイナリの実行を許可するオプションが存在し (デフォルトではtrueに設定されています)。
コンテナを実行する必要があり、それがsetuidバイナリを使用するか、特権の昇格を必要とする場合、これは別のポリシーで定義する必要があり、そのポリシーを使用する権限が限られたサービスアカウントとユーザのみに与えられていることを慎重に確認する必要があります。
注意
注意
デフォルトでは、コンテナ内のプロセスが特権を昇格させる能力に制限はありません。

影響

spec.allowPrivilegeEscalation: trueで定義されたPodは、特定のポリシーの下で実行されない限り許可されません。

監査

クラスター内の各ネームスペースで使用されているポリシーを一覧表示し、各ポリシーが特権昇格を許可するコンテナのアドミッションを禁止していることを確認してください。
このコマンドは、すべてのネームスペースにわたるすべてのポッドを取得し、その詳細をJSON形式で出力し、jqを使用してallowPrivilegeEscalationtrueに設定されているコンテナの出力を解析およびフィルタリングします。
オプション1
kubectl get pods --all-namespaces -o json | jq -r '.items[] |
select(any(.spec.containers[];
.securityContext.allowPrivilegeEscalation == true)) |
"\(.metadata.namespace)/\(.metadata.name)"'
オプション2
kubectl get pods --all-namespaces -o json | jq '.items[] |
select(.metadata.namespace != "kube-system" and .spec.containers[];
.securityContext.allowPrivilegeEscalation == true) | {pod:
.metadata.name, namespace: .metadata.namespace, container:
.spec.containers[].name}'
PodSecurityPolicyを作成する際、["kube-system"]ネームスペースはデフォルトで除外されます。
このコマンドは、コマンドラインJSONプロセッサであるjqを使用して、kubectl get podsのJSON出力を解析し、任意のコンテナにsecurityContext.privilegedフラグがtrueに設定されているポッドをフィルタリングします。
注意
注意
特定の要件やポッド仕様の構造に応じて、コマンドを調整する必要があるかもしれません。

修復

ユーザのワークロードがあるクラスター内の各ネームスペースにポリシーを追加して、.spec.allowPrivilegeEscalationtrueに設定されているコンテナのアドミッションを制限します。