コンテナーの Linux capability 削減の確認

アプリケーションに不要な Linux capability を削除してください。

説明

コンテナーの security_context.capabilities.drop がないと、ランタイムの既定または追加の capability が残る場合があります。不要な権限は、コンテナーが利用できるシステム機能と攻撃対象を増やす可能性があります。

Linux コンテナーには必要な権限だけを残してください。drop = ["ALL"] を基本とし、必要な capability だけを追加して実際の動作をテストしてください。

想定される影響

  • 脆弱性が悪用された場合、不要なシステム権限が被害範囲を広げる可能性があります。
  • 必要な capability まで削除すると、起動や通常の処理に失敗する場合があります。

対処方法

  • drop = ["ALL"] を適用し、必要な capability だけを add で許可してください。初期化コンテナーも確認してください。
  • イメージの実行ユーザーと必要なシステム操作を確認し、デプロイ前にテストしてください。capability の削減は、他のセキュリティコンテキストやホスト分離設定の代わりにはなりません。

例

既存の nginx の例は capability 設定だけを比較します。保守されているイメージを使い、権限削減後に起動、ファイルアクセス、ポートのバインドを確認してください。すべての capability の削除が、このイメージの正常な実行を保証するわけではありません。

変更前

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      security_context {
        capabilities {
          add = ["NET_BIND_SERVICE"]
        }
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      security_context {
        capabilities {
          drop = ["ALL"]
        }
      }
    }
  }
}

補足:

  • 変更前: NET_BIND_SERVICE を追加し、既定の capability は明示的に削除していません。
  • 変更後: すべての capability を削除します。正常動作に不可欠な権限は別途確認する必要があります。

参考資料