説明
SYS_ADMIN は、マウントなど幅広い Linux 管理操作を許可する強力な capability です。アプリケーションに追加すると最小権限の原則を外れ、コンテナー侵害の影響を広げる可能性があります。実際の権限範囲は、ユーザー名前空間やほかのセキュリティ制御にも左右されます。
想定される影響
- 不要なシステム管理機能がコンテナー内で悪用される可能性があります。
- ほかのホストアクセス権限や脆弱性と組み合わさると、ノードやほかのワークロードに影響する可能性があります。
対処方法
security_context.capabilities.addから不要なSYS_ADMINを削除してください。- 可能な場合は既定の capabilities をすべて削除し、実際に必要な限定的な権限だけを追加してください。
- privileged、hostPath、ホストの名前空間の共有も制限してください。
SYS_ADMINを残したままallow_privilege_escalation = falseだけを指定しても、このリスクは解消されません。
例
Capability の追加を比較する例です。イメージのバージョンは過去の例なので、実際のデプロイではサポートされるイメージを使用してください。
変更前
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "app-container"
security_context {
capabilities {
add = ["SYS_ADMIN"]
}
}
}
}
}
SYS_ADMIN を追加し、広い管理権限を与えています。
変更後
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "app-container"
}
}
}
SYS_ADMIN の追加を削除しています。ランタイムの既定の capabilities がすべて消えるわけではないため、残る権限が必要か確認してください。