特権モードで動作する Kubernetes コンテナー

Kubernetes の特権コンテナーは、ノードのリソースへの広いアクセスを許可し、隔離を弱めます。

説明

コンテナーの securityContext.privileged: true は通常のセキュリティ制約を緩和し、ホストへの広いアクセスを許可します。Linux ではすべての capability を付与し、seccomp や AppArmor などの保護を回避できる場合があります。

一般のアプリケーションでは特権モードを避けてください。システム処理に必要な場合は通常のワークロードから分離し、アクセスを厳しく制限してください。

想定される影響

  • ノードのデバイスやカーネル機能へ過剰にアクセスできる場合があります。
  • 一つのアプリケーションの侵害が、ノードや他のワークロードへ波及する可能性があります。

対処方法

  • securityContext.privileged を削除するか、false にしてください。
  • 可能な限り、必要な機能に限定した capability とデバイスアクセスだけを許可してください。
  • hostPath、hostNetwork、追加の capability も見直してください。ワークロードのテンプレートに制限を反映し、必要な機能をテストしてください。

例

二つの Pod は設定の比較例です。実際のデプロイで使うイメージとワークロードのテンプレートに合わせて適用してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: privileged-pod
spec:
  containers:
    - name: app
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        privileged: true

コンテナーを特権モードで実行します。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: standard-pod
spec:
  containers:
    - name: app
      image: gcr.io/google-samples/node-hello:1.0
      securityContext:
        privileged: false

特権モードを無効にしています。実行ユーザーや他の権限も別途制限する必要があります。

参考資料