プロファイル適用性: レベル1
コンテナを
allowPrivilegeEscalation
フラグがtrue
に設定された状態で実行することを一般的に許可しないでください。この権限を許可すると、コンテナを実行しているプロセスが開始時よりも多くの権限を取得する可能性があります。これらの権利は全体的なコンテナサンドボックスによって依然として制約されており、この設定は特権コンテナの使用には関係ありません。
allowPrivilegeEscalation
フラグがtrue
に設定されているコンテナは、親プロセスよりも多くの権限を取得できるプロセスを持つ可能性があります。コンテナが特権昇格を許可しないようにするために、少なくとも1つのアドミッションコントロールポリシーを定義する必要があります。setuidバイナリの実行を許可するオプションが存在し
(デフォルトではtrueに設定されています)。
コンテナを実行する必要があり、setuidバイナリを使用するか、特権の昇格が必要な場合は、これを別のポリシーで定義し、そのポリシーを使用する権限が限られたサービスアカウントとユーザのみに与えられていることを慎重に確認する必要があります。
![]() |
注意デフォルトでは、コンテナ内のプロセスが特権を昇格させる能力に制限はありません。
|
影響
spec.allowPrivilegeEscalation: true
で定義されたPodは、特定のポリシーの下で実行されない限り許可されません。監査
クラスター内の各ネームスペースで使用されているポリシーを一覧表示し、各ポリシーが特権昇格を許可するコンテナのアドミッションを禁止していることを確認してください。
このコマンドは、すべてのネームスペースにわたるすべてのポッドを取得し、その詳細をJSON形式で出力し、jqを使用して
allowPrivilegeEscalation
がtrue
に設定されているコンテナの出力を解析およびフィルタリングします。オプション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}'
Pod Security Policyを作成する際、
["kube-system"]
ネームスペースはデフォルトで除外されます。このコマンドは、コマンドラインJSONプロセッサであるjqを使用して、kubectl get podsのJSON出力を解析し、任意のコンテナに
securityContext.privileged
フラグがtrueに設定されているポッドをフィルタリングします。![]() |
注意特定の要件やポッド仕様の構造に応じて、コマンドを調整する必要があるかもしれません。
|
修復
ユーザのワークロードがあるクラスター内の各ネームスペースにポリシーを追加して、
.spec.allowPrivilegeEscalation
がtrue
に設定されたコンテナのアドミッションを制限します。