👮

KubernetesのマニフェストをCIで検査する方針を考える

2022/12/17に公開

このエントリーは 3-shake Advent Calendar 2022 17日目の記事です。
https://qiita.com/advent-calendar/2022/3-shake

概要

以下の気持ちでKubernetesのマニフェストを検査するツールを選定しました。

  • ベストプラクティスに則りたい
  • 細かなレビューの手間を省きたい
  • セキュリティリスクを排除したい
  • 保守するのが大変なので出来るだけ自分でポリシーは書きたくない。書くとしても書きやすい方法で記述したい

検査ツールの選定

以下のツールからカテゴリ別に選定することにしました。

結論

まず、結論として一通り調べた結果は以下になりました。
各ツールの概要については結論の後に記述してあります。

スキーマ検査

  • kubeconformを採用
  • 理由
    • kubevalの方が優れている点を見つけることができず、後述しますがkubeconformはkubevalの正当進化版に位置するツールだと思います

セキュリティ・推奨事項

Argo Rolloutsを利用してない場合

  • kicsを採用
  • 理由
    • 他ツールのほとんどの検査項目を包括しており網羅率が最も高いです
    • kics単体でRegoで独自に検査したい項目を追加できconftestが不要です
      • そして、以下の点からconftestよりも使いやすいです
        • Metadataを記述できる
        • テストしやすい
        • Kubernetesのマニフェストを検査するための汎用的な関数が定義済み

Argo Rolloutsを利用している場合

  • trivyを採用
  • 理由
    • kicsはArgo Rolloutsに対応してない項目が多々あります
      • 検査はワークロードリソース周りが中心なので、Rolloutリソースが無視されると検査する意味が薄れます
    • trivyもArgo Rolloutsに対応していませんが、簡単にRolloutにも検査を走らせられるようにできます
    • セキュリティ関連の網羅率がArgo Rolloutsも検査可能なツールの中で一番高いです
    • 推奨設定に関しては検査してくれないので、別途で独自に定義する必要があります
      • polarisと併用することを考えましたが、重複していない項目の数が少ないので見送りました
    • kicsと同様にtrivy単体でRegoで独自に検査したい項目を追加できconftestが不要です

バージョンチェック

  • セキュリティ・推奨事項でtrivyを採用している場合はtrivyを採用
    • 理由
      • kube-secやkicsは十分に検査できないです
      • plutoは独自の検査バージョンを容易に追加できますが、trivyもRegoが書ければ同じことができます
  • セキュリティ・推奨事項でtrivyを採用していない場合はplutoを採用
    • 理由
      • バージョンチェックのためだけにtrivyを採用するのは重いので、十分に検査できかつ独自の検査バージョンを容易に追加できるplutoが良いかと思います

各検査ツールについて

スキーマ検査

kubeval

  • https://github.com/instrumenta/kubeval
  • Kubernetes OpenAPIの仕様から生成されたスキーマを使用して検証
  • 複数のバージョンのKubernetesのスキーマを検証可能
  • 例えば、spec.containers[*].securityContextで指定すべき値がspec.securityContextで指定されていることを検出できます

kubeconform

セキュリティ・推奨事項

kubesec

kube-linter

kube-score

polaris

trivy

kics

バージョンチェック

目的としては非推奨なapiVersionの検出です。
KubernetesのバージョンアップではカジュアルにapiVersionが非推奨になります。
apiVersionの修正は容易ですが修正対象を見つけることが少々面倒です。
api-serverのエラーに頼ろうとすると予期せぬapiVersionの変換が行われる可能性があります。
https://github.com/kubernetes/kubernetes/issues/58131#issuecomment-356823588

pluto

trivy

kube-score

kics

まとめ

本記事は社内向けに半年以上前に執筆していたものを、ところどころ古い部分を修正して公開しているので、修正漏れがあるかもしれないのでその際はご一報ください🙇

今回はCIで検査する目的で選定したので言及してないですが、trivyにはoperatorがあり秋季インターンでインターン生が検証してくれているのでぜひ見てみてください!
https://sreake.com/blog/trivy_operator_vulnerability/

Discussion