コンテナーの Linux capability 追加設定の確認

追加権限の必要性を確認し、実際の capability を最小限にしてください。

説明

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 設定は別途確認してください。

参考資料