説明
コンテナーの数値 UID がホストや共有ボリュームの別ユーザーと重なると、意図しないファイルアクセスにつながる場合があります。影響はユーザー名前空間の UID マッピング、アクセス可能なマウント、ファイル権限に依存します。UID が小さいことだけでホスト権限を得るわけではありません。
専用の非 root UID を割り当て、イメージとマニフェストで一貫して使用してください。数値を大きくするだけでは隔離を保証できません。
想定される影響
アクセス可能なファイルの所有者 UID が重なると、別ユーザーのファイルを読み取ったり変更したりするおそれがあります。計画せず UID を変更すると、必要なファイルにアクセスできず、起動やデータ処理が失敗する場合もあります。
対処方法
- 割り当てた非 root UID を runAsUser に指定し、Pod の既定値とコンテナーの上書き設定を確認してください。
- runAsGroup、ボリューム所有権、ファイル権限を実際の UID マッピングに合わせ、不要なホストマウントを削除してください。
- 必要なファイルアクセスとアプリケーション動作が維持され、別ユーザーのファイルへのアクセスが拒否されることを検証してください。
例
UID の割り当てを比較する例です。イメージが指定 UID で動作する必要があり、ファイルとボリュームの権限は別途準備してください。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-2
spec:
securityContext:
runAsUser: 1000
containers:
- name: sec-ctx-demo-2
image: gcr.io/google-samples/node-hello:1.0
securityContext:
runAsUser: 2000
allowPrivilegeEscalation: false
コンテナーは Pod の UID 1000 を上書きし、UID 2000 で動作します。実際のマウントで別ユーザーの UID と重ならないか確認してください。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-2
spec:
securityContext:
runAsUser: 10000
containers:
- name: sec-ctx-demo-2
image: gcr.io/google-samples/node-hello:1.0
securityContext:
runAsUser: 10100
allowPrivilegeEscalation: false
コンテナーに UID 10100 を指定しています。10000 以上という数値だけで安全が保証されるわけではないため、実際の割り当てとファイル権限を確認してください。