説明
コンテナーは既定で複数の Linux capability を持つ場合があります。securityContext.capabilities.drop を設定しないと、アプリケーションに不要な権限が残るおそれがあります。add で必要な権限を追加するだけでは既定の権限は削除されないため、ランタイムと適用されたポリシーも併せて実効権限を確認する必要があります。
想定される影響
- コンテナーに不要なシステム権限が残る場合があります。
- アプリケーションの脆弱性が悪用されたとき、影響が大きくなるおそれがあります。
対処方法
- Linux コンテナーでは可能な限り capabilities.drop に ALL を指定し、実際に必要な capability だけを add で許可してください。アプリケーションの起動と正常な動作を試してください。
- 特権モードは別途解除し、非 root 実行と権限昇格の防止を組み合わせてください。実行中も不要な capability が残っていないことを確認してください。
例
Deployment のコンテナー権限だけを比較する抜粋です。selector などは省略しています。実際のイメージに必要な権限と、低い番号のポートを使う条件は別途確認してください。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
spec:
containers:
- name: payment
image: nginx
securityContext:
capabilities:
add:
- NET_BIND_SERVICE
NET_BIND_SERVICE を追加していますが、他の既定 capability は削除していません。
変更後
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
spec:
containers:
- name: payment
image: nginx
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
既定 capability をすべて削除してから、NET_BIND_SERVICE だけを再度要求します。この権限も実際に必要な場合だけ維持してください。