プロファイル適用性: レベル1
通常、
hostNetworkフラグがtrueに設定されたコンテナの実行を許可しません。ホストのネットワークネームスペースで実行されているコンテナは、ローカルループバックデバイスにアクセスでき、他のポッドとの間のネットワークトラフィックにアクセスすることができます。
コンテナがホストネットワークネームスペースを共有することを許可しない入場制御ポリシーが少なくとも1つ定義されている必要があります。ホストのネットワークネームスペースへのアクセスを必要とするコンテナを実行する必要がある場合は、別のポリシーで定義し、そのポリシーを使用する許可が限られたサービスアカウントとユーザにのみ与えられていることを慎重に確認する必要があります。
注意デフォルトでは、
hostNetworkコンテナの作成に制限はありません。 |
影響
spec.hostNetwork: trueで定義されたポッドは、特定のポリシーの下で実行されない限り許可されません。監査
クラスター内の各ネームスペースで使用されているポリシーを一覧表示し、各ポリシーが
hostNetworkコンテナの許可を禁止していることを確認してください。各ポッドを手動で確認するのは時間がかかることがあり、特に大規模な環境では、
hostNetworkがtrueに設定されているポッドをフィルタリングするために、より自動化されたアプローチを使用できます。kubectlとjqを使用したコマンドは次のとおりです。kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == true) | "\(.metadata.namespace)/\(.metadata.name)"'
または:
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.hostNetwork == 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を使用して
hostNetworkフラグがtrueに設定されているものをフィルタリングし、最後に一致するポッドのネームスペースと名前を表示するように出力をフォーマットします。修復
ユーザのワークロードがあるクラスター内の各ネームスペースにポリシーを追加して、
hostNetworkコンテナのアドミッションを制限します。Podセキュリティポリシーと割り当ては、Azureポータルでポリシーを検索することで見つけることができます。詳細な手順ガイドは、Kubernetesポリシードキュメントで見つけることができます。
