説明
Privileged コンテナーは広い権限を持ち、通常のコンテナー隔離が弱まります。一般のアプリケーションには必要最小限の権限だけを与え、init コンテナーにも同じ基準を適用してください。
Privileged モードは UID 0 での実行とは異なります。ノードへの実際の影響は、デバイスへのアクセス、マウント、ほかのセキュリティ設定にも左右されます。
想定される影響
- コンテナーの侵害がノードのリソースやほかのワークロードに影響する可能性があります。
- 過剰なデバイスやカーネルへのアクセス権限が悪用される可能性があります。
対処方法
- コンテナーの
security_contextブロックでprivileged = falseを指定してください。 - 特別な権限が必要なワークロードは必要な機能と範囲を絞り、専用ノードやポリシーで隔離してください。
- capabilities、hostPath、ホストの名前空間の共有も確認してください。
例
Privileged 設定を比較する例です。イメージのバージョンは過去の例なので、デプロイ時はサポートされるイメージを選んでください。
変更前
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "app-container"
security_context {
privileged = true
}
}
}
}
コンテナーが privileged モードで実行され、隔離が弱まります。
変更後
hcl
resource "kubernetes_pod" "app_pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "app-container"
security_context {
privileged = false
}
}
}
}
Privileged モードを無効にしています。ほかの権限やホストへのアクセス設定も制限する必要があります。