見出し画像

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」 というイメージです!

いいなと思ったら応援しよう!