コンテナーの seccomp プロファイル適用の確認

Linux コンテナーに適切な seccomp プロファイルを適用し、実際の動作を確認してください。

説明

seccomp は、コンテナープロセスが使えるシステムコールを制限し、カーネルの攻撃対象を減らします。Unconfined での実行はこの制限を使いません。明示的な設定がなくても kubelet やランタイムの既定値でプロファイルが適用される場合があるため、実際の適用状態を確認する必要があります。

想定される影響

  • 不要なシステムコールを許可すると、侵害されたプロセスが悪用できる機能が増える場合があります。
  • アプリケーションに適合しないプロファイルは、正常な処理を遮断する場合があります。

対処方法

  • 対応する Linux ワークロードでは、security_context.seccomp_profile に type = "RuntimeDefault" を指定するか、確認済みの Localhost プロファイルを使ってください。コンテナー単位の上書き設定と特権実行も確認してください。
  • 適用後に必要な機能をテストし、拒否ログを確認してください。seccomp と併せて非 root 実行、最小限の capability、セキュリティ更新を維持してください。

例

誤った過去の annotation を、対応する seccomp_profile ブロックに置き換えた比較です。Linux ノードと対応するプロバイダーが必要です。実際のデプロイには保守されているイメージを使ってください。

変更前

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

  spec {
    security_context {
      seccomp_profile {
        type = "Unconfined"
      }
    }

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

変更後

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

  spec {
    security_context {
      seccomp_profile {
        type = "RuntimeDefault"
      }
    }

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

補足:

  • 変更前: Unconfined により seccomp の制限を使いません。
  • 変更後: ランタイムの既定の seccomp プロファイルを明示的に要求します。

参考資料