DUICUO

Kubernetes リソースインベントリの静的解析ツール - KubeLinter

KubeLinterは、Kubernetesオブジェクトの設定ミスを特定するためのオープンソースの静的解析ツールです。KubeLinterは、Kubernetes YAMLファイルとHelm Chartsに対してセキュリティ検査を実行し、クラスター設定がセキュリティのベストプラクティスに準拠しているかどうかを検証する機能を提供します。組み込みの検査機能は、設定ミスやKubernetesポリシー違反に関するフィードバックを提供します。これにより、開発者の生産性が向上し、DevOpsおよびDevSecOpsプロセスにSecurity as Codeが統合され、Kubernetesアプリケーションに強化されたセキュリティポリシーが自動的に適用されるようになります。

KubeLinterはYAMLファイルとHelm Chartsを分析し、Kubernetesネイティブのセキュリティチェックを実行して、権限昇格、設定ミス、一般的なベストプラクティス違反を特定します。KubeLinterは、コマンドラインまたはCIパイプラインの一部として使用されるGoベースのバイナリで、Kubernetes設定の変更を許可する前に開発者に必要なセキュリティチェックを提供します。現在、CLIには以下を含む19のセキュリティチェックが組み込まれています。

  • デフォルトのServiceAccountを使用する
  • 不一致なセレクタ
  • コンテナをルートとして実行する
  • 書き込み可能なホストマウントを構成する

KubeLinterをインストールする

Goを使用してインストール

  1. GO111MODULE=go を取得し、 golang.stackrox.io/kube-linter/cmd/kube-linter を実行します。

あるいは、リリース ページ (https://github.com/stackrox/kube-linter/releases/tag/0.2.2) から最新のバイナリ ファイルを直接ダウンロードし、PATH に追加することもできます。

brewを使用してインストールする

macOS では Homebrew、Linux では LinuxBrew を使用してインストールします。

  1. kube-linter をインストールします

KubeLinterの使用

KubeLinter を実行して YAML ファイルを lint するには、次の 2 つの基本的な手順だけが必要です。

1. セキュリティと本番環境に対応したベスト プラクティスをテストする YAML ファイルを見つけます。

2. コマンド kube-linter lint /path/to/your/yaml.yaml を実行します。

たとえば、次の pod.yaml リソース ファイルにはいくつかの問題があります。

秘密の質問

1. このポッド内のコンテナは読み取り専用ファイル システムとして実行されていないため、ルート ファイル システムへの書き込みが許可される可能性があります。

生産準備完了

1. コンテナの CPU 制限が設定されていないため、CPU が過剰に消費される可能性があります。 2. コンテナのメモリ制限が設定されていないため、メモリが過剰に消費される可能性があります。

  1. apiバージョン: v1
  2. 種類: ポッド
  3. メタデータ:
  4. 名前: セキュリティコンテキストデモ
  5. 仕様:
  6. セキュリティコンテキスト:
  7. 実行ユーザー: 1000
  8. 実行グループ: 3000
  9. fsグループ: 2000
  10. ボリューム:
  11. -名前: sec-ctx-vol
  12. 空ディレクトリ: {}
  13. コンテナ:
  14. -名前: sec-ctx-demo
  15. 画像: ビジーボックス
  16. リソース:
  17. リクエスト:
  18. メモリ: 「64Mi」  
  19. CPU: 「250m」  
  20. コマンド: [ "sh" , "-c" , "sleep 1h" ]
  21. ボリュームマウント:
  22. -名前: sec-ctx-vol
  23. マウントパス: /data/demo
  24. セキュリティコンテキスト:
  25. 権限昇格の許可: false  

3. 上記の pod.yaml ファイルをコピーし、次のコマンドを実行して linting を実行します。

  1. kube-linter リント pod.yaml

4. KubeLinter でデフォルトのチェックを実行すると、次の結果が出力されます。

  1. pod.yaml: (オブジェクト: <名前空間なし>/security-context-demo /v1、種類=Pod) コンテナ「sec-ctx-demo」には読み取り専用ルートファイルシステムがありませ(チェック:読み取り専用-root - fsなし、修正: readOnlyRootFilesystem次のように設定します 真実 コンテナの securityContext内にあります
  2.  
  3. pod.yaml: (オブジェクト: < 名前空間なし>/security-context-demo /v1、Kind=Pod) コンテナ「sec-ctx-demo」CPU 制限は 0 です (チェック: unset-cpu-requirements、修復:コンテナの要件応じて、コンテナの CPU 要求制限を設定します。詳細については、 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ #requests- and -limitsを参照してください。)
  4.  
  5. pod.yaml: (オブジェクト: < 名前空間なし>/security-context-demo /v1、Kind=Pod) コンテナ「sec-ctx-demo」メモリ制限は 0 です (チェック: unset-memory-requirements、修復:コンテナの要件応じて、コンテナのメモリ要求制限を設定します。詳細については、 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ #requests- and -limitsを参照してください。)
  6.  
  7. エラー: 3 つの lint エラーが見つかりました