説明
Linux capability は、コンテナーがネットワークやシステム操作で使える権限を分割する仕組みです。security_context.capabilities.add で不要な権限を追加すると、侵害されたプロセスが悪用できる機能が増える場合があります。実際の権限は、ランタイムの既定値や drop 設定にも左右されます。
NET_BIND_SERVICE は低い番号のポートへのバインドに必要な場合があり、既定の集合に含まれることもあります。add の削除だけで、その capability が実際に除去されるわけではありません。
想定される影響
- 不要な capability が、システムやネットワーク権限の悪用に使われる場合があります。
- 必要な権限まで除去すると、アプリケーションの起動や機能が失敗する場合があります。
対処方法
- 不要な
capabilities.addを削除し、実行中プロセスの実際の権限を確認してください。対応するワークロードではdrop = ["ALL"]を起点に、必要な capability だけを許可する方法を検討してください。 - 必要な例外は対象ワークロードだけに付与し、起動、ポートへのバインド、ファイルアクセスをテストしてください。Pod Security Admission やポリシーエンジンで許可範囲を制御してください。
例
既存のイメージと capability の追加設定を比較する例です。実際のデプロイには保守されているイメージを使ってください。変更後もランタイムの既定の capability は残り得るため、すべての権限を除去した例ではありません。
変更前
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
security_context {
capabilities {
add = ["NET_BIND_SERVICE"]
}
}
}
}
}
変更後
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
補足:
- 変更前: NET_BIND_SERVICE を明示的に追加します。権限が増えるかどうかは既定の集合によって異なります。
- 変更後: 明示的な追加を削除します。必要な drop 設定は別途確認してください。