SYS_ADMIN capability が追加された Kubernetes コンテナー

必要性を確認せずにコンテナーへ SYS_ADMIN capability を付与しないでください。

説明

SYS_ADMIN は、マウントなど幅広い Linux 管理操作を許可する強力な capability です。アプリケーションに追加すると最小権限の原則を外れ、コンテナー侵害の影響を広げる可能性があります。実際の権限範囲は、ユーザー名前空間やほかのセキュリティ制御にも左右されます。

想定される影響

  • 不要なシステム管理機能がコンテナー内で悪用される可能性があります。
  • ほかのホストアクセス権限や脆弱性と組み合わさると、ノードやほかのワークロードに影響する可能性があります。

対処方法

  • security_context.capabilities.add から不要な SYS_ADMIN を削除してください。
  • 可能な場合は既定の capabilities をすべて削除し、実際に必要な限定的な権限だけを追加してください。
  • privileged、hostPath、ホストの名前空間の共有も制限してください。SYS_ADMIN を残したまま allow_privilege_escalation = false だけを指定しても、このリスクは解消されません。

例

Capability の追加を比較する例です。イメージのバージョンは過去の例なので、実際のデプロイではサポートされるイメージを使用してください。

変更前

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

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

      security_context {
        capabilities {
          add = ["SYS_ADMIN"]
        }
      }
    }
  }
}

SYS_ADMIN を追加し、広い管理権限を与えています。

変更後

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

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

SYS_ADMIN の追加を削除しています。ランタイムの既定の capabilities がすべて消えるわけではないため、残る権限が必要か確認してください。

参考資料