コンテナーの NET_RAW 除去設定の確認

raw socket が不要なコンテナーから NET_RAW を除去してください。

説明

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 まですべて除去する設定ではありません。

参考資料