ビュー:
プロファイル適用性: レベル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)"'
    
OR
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ポータルでポリシーを検索することで見つけることができます。詳細な手順ガイドはこちらで見つけることができます: https://learn.microsoft.com/en-us/azure/governance/policy/concepts/policy-for-kubernetes