Privileged モードで実行される Kubernetes コンテナー

Kubernetes コンテナーの不要な privileged モードを無効にしてください。

説明

Privileged コンテナーは広い権限を持ち、通常のコンテナー隔離が弱まります。一般のアプリケーションには必要最小限の権限だけを与え、init コンテナーにも同じ基準を適用してください。

Privileged モードは UID 0 での実行とは異なります。ノードへの実際の影響は、デバイスへのアクセス、マウント、ほかのセキュリティ設定にも左右されます。

想定される影響

  • コンテナーの侵害がノードのリソースやほかのワークロードに影響する可能性があります。
  • 過剰なデバイスやカーネルへのアクセス権限が悪用される可能性があります。

対処方法

  • コンテナーの security_context ブロックで privileged = false を指定してください。
  • 特別な権限が必要なワークロードは必要な機能と範囲を絞り、専用ノードやポリシーで隔離してください。
  • capabilities、hostPath、ホストの名前空間の共有も確認してください。

例

Privileged 設定を比較する例です。イメージのバージョンは過去の例なので、デプロイ時はサポートされるイメージを選んでください。

変更前

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "app-container"

      security_context {
        privileged = true
      }
    }
  }
}

コンテナーが privileged モードで実行され、隔離が弱まります。

変更後

hcl
resource "kubernetes_pod" "app_pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "app-container"

      security_context {
        privileged = false
      }
    }
  }
}

Privileged モードを無効にしています。ほかの権限やホストへのアクセス設定も制限する必要があります。

参考資料