
Kubernetes の runAsUser: 0 と privileged: true の違いは?どちらを使うべき?
Kubernetes の Pod セキュリティ設定をしていると、runAsUser: 0 や privileged: true というオプションを見かけることがあります。どちらも「権限を強くする」設定ですが、実は 影響範囲が大きく異なる んです。
例えば、あなたがビルの管理者だとします。
runAsUser: 0 は「ビル内で自由に行動できる管理人」
privileged: true は「ビルの構造まで変えられるオーナー」
というイメージ。つまり、 privileged: true の方が圧倒的に強い権限を持ちます。
runAsUser: 0 とは?
runAsUser: 0 を設定すると、Pod 内で root ユーザーとして動作 します。ただし、通常の Linux の root とは異なり、ホストには強い影響を与えません。
メリット
✅ コンテナ内で root ユーザーとして動作可能
✅ 権限エラーを回避できる
デメリット
❌ ホストのリソースにはアクセスできない
runAsUser: 0 のサンプル YAML
apiVersion: v1
kind: Pod
metadata:
name: runasuser-root
spec:
securityContext:
runAsUser: 0 # コンテナ内で root ユーザーとして実行
containers:
- name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
この設定では、Pod 内のプロセスは root として実行されますが、ホストには影響を与えません。
privileged: true とは?
privileged: true を設定すると、Pod は ホストの root に近い権限 を持ちます。
メリット
✅ ホストのデバイスやネットワーク設定を変更可能
✅ iptables でファイアウォール設定を変更できる
✅ /dev デバイスを操作できる
デメリット
❌ セキュリティリスクが非常に高い(ホストが乗っ取られる可能性あり)
❌ ほとんどの場合、不要
privileged: true のサンプル YAML
apiVersion: v1
kind: Pod
metadata:
name: privileged-pod
spec:
containers:
- name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
securityContext:
privileged: true # ホストレベルの権限を持つ
この設定では、コンテナがホストのデバイスやカーネルパラメータを変更できるようになります。
結局、どちらを使うべき?
✅ 通常は runAsUser: 0 で十分!
✅ privileged: true は特別な場合のみ!(Docker in Docker、ネットワーク設定変更、デバイス制御 など)
❌ 不要な privileged: true の使用は避ける!(ホストに悪影響を与える可能性がある)
つまり、 「root 権限が欲しいだけなら runAsUser: 0、ホストレベルの制御が必要なら privileged: true」 というイメージです!