ホストの PID 名前空間を共有する Kubernetes ワークロード

hostPID を使うとコンテナーがノードのプロセス名前空間を共有し、分離が弱まります。

説明

hostPID: true を設定した Pod は、ホストのプロセス ID 名前空間を共有します。コンテナーからノードや他のワークロードのプロセスが見えるため、通常のアプリケーションには不要な情報へのアクセスが生じます。

プロセスが見えることと制御できることは異なります。シグナルの送信やプロセスのトレースには、ユーザー ID や Linux capability などの追加の権限条件が適用されます。

想定される影響

  • 実行中のプロセスやコマンド引数などの運用情報が公開される可能性があります。
  • 追加の権限がある場合、他のプロセスの妨害や機密情報の取得に悪用されるおそれがあります。

対処方法

  • 不要な hostPID を削除するか、false に設定してください。
  • hostIPC、hostNetwork、privileged、追加の capability も確認してください。
  • 診断や運用ツールに必要な例外は承認したワークロードに限定し、利用できる権限を管理してください。

例

次の例は Pod がホストの PID 名前空間を共有するかどうかを比較します。イメージと実行コマンドは実際の用途に合わせて設定してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  hostPID: true
  containers:
    - name: sec-ctx-demo
      image: busybox

ホストの PID 名前空間を共有するため、ノードのプロセスについて確認できる情報が増えます。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  hostPID: false
  containers:
    - name: sec-ctx-demo
      image: busybox

ホストの PID 名前空間を共有しません。ファイルアクセスや他の名前空間の共有に対する制御も、別途維持する必要があります。

参考資料