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