権限昇格が許可された Kubernetes コンテナー

実行ファイルを通じた追加権限の取得を制限するよう、コンテナーの権限昇格設定を構成してください。

説明

allow_privilege_escalation は、実行ファイルを通じてプロセスが親より高い権限を得る経路を制御します。false にすると Linux の no_new_privs を使い、setuid プログラムやファイル capabilities による新たな権限取得を制限します。

既に持つ権限を削除したり、すべてのカーネル脆弱性を防いだりする機能ではありません。Privileged コンテナーや SYS_ADMIN を持つコンテナーではこの制限を期待できないため、それらの権限も削除してください。

想定される影響

  • 特権実行ファイルが利用可能な場合、プロセスが意図しない追加権限を得る可能性があります。
  • アプリケーションの侵害によるコンテナー内の影響が大きくなる可能性があります。

対処方法

  • security_context ブロックで allow_privilege_escalation = false を指定してください。
  • privileged と不要な capabilities を削除し、実行ユーザーも最小権限にしてください。
  • 共通の Pod テンプレートや Helm チャートにも適用し、必要な実行ファイルが正常に動作するか確認してください。

例

権限昇格設定を比較する例です。イメージのバージョンは過去の例なので、実際のデプロイにはサポートされるイメージを使用してください。

変更前

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

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

      security_context {
        allow_privilege_escalation = true
      }
    }
  }
}

この設定では、実行ファイルを通じた追加権限の取得を制限していません。実際に取得できるかは、実行ファイルやほかの制御によって異なります。

変更後

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

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

      security_context {
        allow_privilege_escalation = false
      }
    }
  }
}

no_new_privs による制限を適用しています。既存の権限やほかのセキュリティ設定も別途確認してください。

参考資料