FIXER cloud.config Tech Blog
Kubernetesのマニフェストを多方面から手軽にチェック「ValidKube」
2022年03月29日 10時00分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Kubernetes のマニフェストファイルを手軽に色々チェックできる ValidKube を使ってみる #Kubernetesリレー」を再編集したものです。
はじめに
Kubernetesのマニフェストを書いているとき、書いている内容が正しいか、ベストプラクティスに沿っているか確認したくなることがあるかと思います。
そんな時に使えるツールはいくつかありますが、その中でもブラウザ上で手軽に利用できそうなサービスがあったので紹介してみる回です。
ValidKubeとは
ValidKubeは、ブラウザ上で動作するKubernetesのマニフェスト用のチェックを行えるWebアプリです。
Kubernetesのマニフェストについて、構造が正しいかどうか検証したり、不要な記述を除いたり、セキュリティ上の問題点がないかを調べたりすることができます。
このツールの実体はこの後ろで動いている個別の検証ツールで、それぞれ以下のツールがバックエンドで動いています。
・マニフェストの構造が正しいかチェックするコマンドラインツールKubeval
・マニフェストから不要な記述を除去して見やすくするコマンドラインツールkubectl-neat
・マニフェストからセキュリティ上の脆弱性を検知するコマンドラインツールtrivy
Webアプリケーション上でマニフェストを入力して実行するとマニフェストがバックエンドに送られ、上記ツールを使用して検証を行い、検証結果を Web アプリケーション上で表示する仕組みで動いているようです。
使い方
ページを開くと右と左に 2 つのフォームがあります。
この中の左のフォームに検証したいマニフェストファイルの中身を張り付け、右側のフォームの上部にあるタブで検証の内容を選び、「Run」ボタンをクリックするとマニフェストの検証が行われます。
今回は例としてサンプルのマニフェストを使用してみましょう。
左側のフォームの下の Example のボタンをクリックしてからRunボタンをクリックすると以下のような結果が出力されています。
結果の中に
'spec.replicas: Invalid type. Expected: [integer,null], given: string'
とあることから、spec.replicasのパラメータの型がintegerでなければならないのにstringが入力されているので不正であると言われていますね。
同様に、右側のフォームの上部のタブから「Secure」を選択してみましょう。
するとすぐに検証が実行され、以下のような結果が出力されるはずです。
出力結果には様々な脆弱性がyaml形式で表示されていますが例えば以下のようなものが出力されています。
- Description: A program inside the container can elevate its own privileges and
run as root, which might give the program control over the container and node.
ID: KSV001
IacMetadata: {}
Layer: {}
Message: Container 'nginx' of Deployment 'nginx-deployment' should set 'securityContext.allowPrivilegeEscalation'
to false
Namespace: appshield.kubernetes.KSV001
PrimaryURL: https://avd.aquasec.com/appshield/ksv001
Query: data.appshield.kubernetes.KSV001.deny
References:
- https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted
- https://avd.aquasec.com/appshield/ksv001
Resolution: Set 'set containers[].securityContext.allowPrivilegeEscalation' to
'false'.
Severity: MEDIUM
Status: FAIL
Title: Process can elevate its own privileges
Type: Kubernetes Security Check
例えば上記の脆弱性だと、「コンテナ内のプログラムが権限昇格してコンテナやノードの中身を弄り回す危険があるので、マニフェストのコンテナの設定パラメータでsecurityContext.allowPrivilegeEscalationをfalseに設定してください」といった内容になります。
ここで報告される脆弱性は、Aqua securityという企業が公開している脆弱性データベースが元になっており、公開されている脆弱性の一覧はこちらで閲覧することができます。
このようにして、作成したマニフェストの検証をブラウザ上で簡単に行うことができます。
使い道
このアプリケーションの実体は3つの個別のコマンドラインツールです。
コマンドラインツールとして動くということで、CI パイプラインに組み込みやすいため、Gitでのコミット毎、またはPR作成時にビルドパイプラインを実行するようにし、それらで個別のツールを使用し、マニフェストの検証を行うといった使い方ができます。
というか、これらのツールのユースケースはそういった場面が主に想定されています。 一方で、ビルドパイプラインを実行する前に開発を進める段階でマニフェストを検証するのにはマニフェストを簡単に検証できるためValidKubeを使用することになるのかなと思います。
また、ValidKubeはGithubでオープンソースとして公開されており、アプリケーションをビルドして自前の環境に展開する方法が Github リポジトリ上で紹介されています。 このアプリケーションはサイトで公開されているものなので、他人のサービスに自前のマニフェストを送信したくないという場合もあると思いますが、その場合は時前の環境にValidKubeを展開して身内にのみ公開することでマニフェストを外部に公開せずにValidKubeを利用することもできます。
マニフェストファイルの品質を上げたい場合や、Kubernetesに展開する前にマニフェストの整合性を検証しておきたい場合には検討できるツールかと思います。
おわりに
今回はkubernetesのマニフェストの検証ツールである validkubeを触ってみました。 マニフェストファイルの中身が妥当か判断するのは人の目だけだと難しい部分もあり、そのような部分をカバーするのに自動化されたツールはとても有用だと思います。 作成したマニフェストの検証方法に悩んでいる方の参考になれば幸いです。
参考
・ValidKube
・ValidKube Github リポジトリ
・Kubeval Github リポジトリ
・kubectl-neat Github リポジトリ
・trivy Github リポジトリ
・Aqua Security kubernetes vulnerability database
なゆむ/FIXER
最近インフラ始めました。
k8s社内最強を目指します。
[転載元]
Kubernetes のマニフェストファイルを手軽に色々チェックできる ValidKube を使ってみる #Kubernetesリレー