説明
NET_RAW は、raw socket や packet socket などのネットワーク機能を許可する Linux capability です。一般的なアプリケーションには不要な場合が多く、残っていると侵害されたプロセスに悪用されるおそれがあります。実際の権限は、ランタイムの既定値と capability の追加・除去設定を併せて確認する必要があります。
想定される影響
- 不要なパケット生成・操作などのネットワーク機能が悪用される場合があります。
- capability を過剰に除去すると、必要なアプリケーション動作に影響する場合があります。
対処方法
- 不要な
NET_RAWをsecurity_context.capabilities.dropに指定してください。より厳しい最小権限構成に対応できる場合は、ALLを除去して必要な権限だけを許可する方法を検討してください。 - 再追加する capability と特権モードも確認し、実際のアプリケーション動作をテストしてください。Pod Security Admission やポリシーエンジンで必要な基準を適用してください。
例
既存の nginx 構成で NET_RAW の除去だけを比較します。すべての capability を除去するとユーザー切り替え、ポート、ファイル操作にも影響し得るため、ALL の適用には別途互換性確認が必要です。実際のデプロイには保守されているイメージを使ってください。
変更前
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {}
}
}
}
}
変更後
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {
drop = ["NET_RAW"]
}
}
}
}
}
補足:
- 変更前: 明示的な capability の除去はありません。実際の既定権限を確認する必要があります。
- 変更後: NET_RAW を除去します。他の既定の capability まですべて除去する設定ではありません。