セキュリティエンジニアのためのKubectlプラグイン トップ15

本文の内容は、2023年1月17日にNIGEL DOUGLAS が投稿したブログ（https://sysdig.com/blog/top-15-kubectl-plugins-for-security-engineers/)を元に日本語に翻訳・再構成した内容となっております。<br /><br />誰にとっても、特にセキュリティエンジニアにとって非常に有用であると強く感じるこのKubectlプラグインのリストを、さらに掘り下げてみましょう。<br /><br />Kubernetesは、設計上、信じられないほどカスタマイズが可能です。Kubernetesは、特定のユースケースシナリオのためのカスタム構成をサポートしています。そのため、基本的な機能にパッチを適用する必要がありません。プラグインは、Kubernetesの機能を拡張し、アウトオブボックスの提供を実現する手段です。<br /><br /><h2>Kubernetesプラグインとは何ですか？</h2><a href="https://kubernetes.io/docs/reference/kubectl/">Kubernetesのコマンドラインツール</a>であるkubectlに対して、ユーザーが拡張機能をインストールし、記述することができます。<br /><br />kubectlのコアコマンドをKubernetesクラスターと対話するための必須ビルドブロックとみなすことで、クラスター管理者はプラグインをこれらのビルドブロックを利用してより複雑な動作を作成するための手段として考えることができます。<br /><br />プラグインは、新しいサブコマンドでkubectlを拡張し、kubectlのメインディストリビューションには含まれていない新しいカスタム機能を可能にします。<br /><br /><h3>なぜプラグインはセキュリティ運用に有用なのか？</h3>Kubernetesプラグインは、プラットフォームに無数のセキュリティ上の利点を提供します。インシデント対応者は、選択した言語で「その場で」追加機能を開発することができます。<br /><br />Kubernetesの機能は、企業が「スコープ外」の機能を実現する必要がある場合に不足することが多いため、チームは独自のカスタムオペレーションを実装する必要があることが多いでしょう。<br /><br /><h2>Kubernetesプラグインのセキュリティに関する潜在的な考慮事項</h2>カスタム実装は、kubectlでアウトオブボックスに提供されない機能を追加しますが、これらのプラグインは必ずしも私たちが望むほど安全とは必ずしもありません。この記事では、<strong>セキュリティポスチャーを向上させる</strong>ために最も一般的または有用なKubernetesプラグインを取り上げることを目的としています。<br /><br /><h3>Krewでプラグインを管理する</h3><a href="https://krew.sigs.k8s.io/">Krew</a>は、Kubernetes Special Interest Group (SIG) CLIコミュニティによってメンテナンスされているプラグインマネージャーです。Krewはkubectlプラグインを簡単に利用できるようにし、マシン上でのプラグインのディスカバリー、インストール、管理を支援します。apt、dnf、brewのようなツールに似ています。現在、200以上のkubectlプラグインがKrewで利用可能であり、その数は増加の一途をたどっています。活発に利用されているプロジェクトもあれば、時間の経過とともに非推奨となるものもありますが、Krewからアクセスすることは可能です。<br /><br />Krew経由でkubectlプラグインをインストールするコマンドです：<br /><br /><pre>kubectl krew install &lt;PLUGIN_NAME&gt;</pre><br />Krewのプラグインインデックス経由で利用できるKubectlプラグインは監査が行われていないため、サプライチェーンに問題が発生する可能性があります。前述したように、Krew plugin indexには数百のkubectlプラグインが収められています。<br /><a href="https://krew.sigs.k8s.io/plugins/">https://krew.sigs.k8s.io/plugins/</a><br /><br />サードパーティのプラグインをインストールして実行する場合、自己責任で行うことになります。結局のところ、kubectlプラグインはシェルで動作する任意のプログラムに過ぎません。<br /><br />最後に、Kubernetesクラスターでのセキュリティ姿勢を向上させる、トップ15のkubectlプラグインを紹介したいと思います。<br /><br /><h3>1. Sternプラグイン</h3><a href="https://github.com/stern/stern">GitHubリポジトリ</a>へのリンク<br /><br /><strong>Stern</strong>は、Linuxの'<a href="https://linuxways.net/centos/tail-command-in-linux/">tail -f</a>'のような働きをするkubectlプラグインです。入力パラメータに制限があるkubectl log -fとは異なり、SternではPod IDとContainer IDの両方を正規表現で指定することができます。<br /><br />マッチしたものは追従し、出力はPod IDとContainer IDを先頭につけて多重化され、人間が読めるように色分けされます（ファイルにパイプする場合は色が剥がされる）。<br /><br />Sternのインストールは、以下のKrewコマンドで行います：<br /><br /><pre>kubectl krew install stern</pre><br />Sternのappnameをtailするコマンドです：<br /><br /><pre>kubectl stern appname</pre><br />これは、serviceという単語を含むPodにマッチし、その中のすべてのコンテナをリッスンします。サーバーコンテナへのトラフィックのみを確認したい場合は、以下のようにします。<br /><br /><pre>kubectl stern --container </pre><br />これは、複数のPodで実行されている場合でも、すべてのサーバーコンテナのログをストリーミングします。<br /><br />Sternプラグインのセキュリティ面での興味深い使用例として、Kubernetesクラスターへの認証アクティビティを見ることが挙げられます。過去15分以内の認証アクティビティを、関連するハイライトされたタイムスタンプとともに表示するには、次のコマンドを実行します：<br /><br /><pre>kubectl stern -t --since 15m auth</pre><br /><h3>2. RBACツール</h3><a href="https://github.com/alcideio/rbac-tool">GitHubリポジトリ</a>へのリンク<br /><br /><a href="https://sysdig.com/learn-cloud-native/kubernetes-security/kubernetes-rbac/">RBAC</a>（Role-based Access Control）とは、組織内の個々のユーザーの役割に基づいて、コンピュータやネットワークリソースへのアクセスを規制する方法です。RBAC-toolは、クエリーやRBACポリシーの作成を簡略化します。<br /><br /><strong>RBAC-tool</strong>のインストールは、以下のKrewコマンドで行います：<br /><br /><pre>kubectl krew install rbac-tool</pre><br />RBACロールが異なるKubernetesコンポーネントにどのように割り当てられるかについてよく知らない場合、可視化コマンドは、すべてのRBAC決定の洞察に富んだグラフを生成します。<br /><br /><pre>kubectl rbac-tool viz --cluster-context nigel-douglas-cluster</pre><br />上記のコマンドは、kubeconfigコンテキスト<span>'</span><strong>nigel-douglas-cluster</strong><span>' </span>を持つクラスターをスキャンします。これらのグラフは、サービスアカウントに割り当てられたパーミッションのビフォーアフターを視覚的に表示するのに便利です。<br /><br />RBAC-toolプラグインでは、'<strong>viz</strong>' 以外にも複数のコマンドが提供されています。最も便利なのは '<strong>who-can</strong>' コマンドです。これは、オブジェクトに対して'VERB'（Create, Read, Update, Delete）で示されるアクションを実行するRBAC権限を持っているサブジェクトを表示するものです。<br /><br /><span>‘</span><strong>important-secret</strong><span>’</span>という名前のシークレットリソースを誰が読むことができるかを見るには、以下のコマンドを実行します。<br /><br /><pre>kubectl rbac-tool who-can get secret/important-secret</pre><br /><h3>3. Ciliumプラグイン</h3><a href="https://github.com/bmcustodio/kubectl-cilium">GitHubリポジトリ</a>へのリンク<br /><br /><strong>Cilium</strong>は、強力なeBPFデータプレーンによって人気を博し続けているネットワークセキュリティプロジェクトです。Kubernetesは特定の<a href="https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/">CNI（ネットワーク）プラグイン</a>を念頭に置いて設計されていないため、kubectl経由でCiliumエージェントを管理しようとすると、脱力してしまうことがあります。そこで Cilium チームは Cilium kubectl プラグインをリリースしました。<br /><br /><strong>Cilium</strong>プラグインは、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install cilium</pre><br />まず基本的なことですが、Cilium ネットワークを搭載した単一ノードの接続性チェックを以下のコマンドで行います。<br /><br /><pre>kubectl cilium connectivity test --single-node &lt;node&gt;</pre><br />これは単に運用の可視性を向上させるだけでなく、ネットワークセキュリティエンジニアにとって非常に有益です。例えば、Ciliumが <span>‘</span><a rel="noopener nofollow noreferrer" target="_blank" href="https://github.com/cilium/hubble">Hubble</a><span>’ </span>のようなコアコンポーネントと通信できない場合、これは接続性テストに表示されます。<br /><br />Hubbleは、Kubernetesのネットワーク、サービス、セキュリティの観測性を提供します。<span>“connection refused” </span>などの接続エラーを迅速に診断できることで、脅威の全体的な可視性が向上し、規制遵守の維持に必要な集中型のネットワークイベントビューが提供されます。ネットワーク・ポリシーをさらに深く掘り下げたい場合は、<a href="https://sysdig.jp/blog/denial-of-service-kubernetes-calico-falco/">Kubernetesでサービス拒否（DoS）攻撃を防止する方法</a>をご覧ください。<br /><br /><h3>4. Kube Policy Advisor</h3><a href="https://github.com/sysdiglabs/kube-policy-advisor">GitHubリポジトリ</a>へのリンク<br /><br />kube-policy-advisorプラグインは、KubernetesクラスターのPodSecurityPoliciesとOpen Policy Agent (OPA) Policiesを提案します。<a href="https://kubernetes.io/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/">PodSecurityPoliciesは非推奨</a>のため、使用すべきではありませんが、OPAは<a href="https://sysdig.com/learn-cloud-native/kubernetes-security/kubernetes-admission-controllers/">アドミッションコントローラー</a>において非常に推奨されるツールです。<br /><br /><strong>advise-policy</strong>は、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install advise-policy</pre><br />このkubectlプラグインは、Kubernetesクラスターのセキュリティおよびコンプライアンスチェックを提供します。クラスターの構成に潜在するセキュリティリスクやベストプラクティスの違反を特定し、それらの問題を修正するための推奨事項を提供することができます。kube-policy-advisorが実行できるチェックの種類には、次のような例があります。<br /><br /><ul><li>Podが最小限の権限で実行され、不要なパーミッションが付与されていないことを確認します。</li><li>シークレットやその他の機密データがプレーンテキストで保存されたり、ソースコントロールにチェックされたりしないことを確認します。</li><li>リソースへの不正なアクセスから保護するためのネットワークポリシーが設定されていることを確認します。</li><li>コンテナイメージの安全性を評価し、信頼できるソースからのものであることを確認します。</li></ul><br />Kubernetesにおいてアドミッションコントローラーは、作成、更新、および削除の操作中にオブジェクトのセマンティック検証を実施します。OPAを使用すると、Kubernetes APIサーバーを再コンパイルまたは再構成することなく、Kubernetesオブジェクトにカスタムポリシーを適用することができます。<br /><br />kube-policy-advisorは、ライブのK8s環境、またはPod仕様（<span>Deployment</span>、DaemonSet、Podなど）を含む単一の.yamlファイルから、OPAポリシーを簡単に作成するためのツールです。以下のコマンドでは、プラグインが任意のネームスペースを検査し、レポートまたはOPAポリシーを出力します。<br /><br /><pre>kubectl advise-policy inspect --namespace=&lt;ns&gt;</pre><br />注意：任意のネームスペースを入力しない場合、すべてのネットワークのネームスペースに対するOPAポリシーが生成されます。<br /><br />kube-policy-advisorを使用することで、Kubernetesクラスターが安全でベストプラクティスに準拠していることを確認し、潜在的な脅威からアプリケーションとデータを保護するのに役立ちます。<br /><br /><h3>5. Kubectl-ssm-secret</h3><a href="https://github.com/pr8kerl/kubectl-ssm-secret">GitHubリポジトリ</a>へのリンク<br /><br /><strong>kubectl-ssm-secret</strong>プラグインは、管理者が<a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html">AWS SSM</a> Parameter Storeパスとの間で<a href="https://sysdig.com/learn-cloud-native/kubernetes-101/how-to-create-and-use-kubernetes-secrets/">Kubernetes Secrets</a>をインポートまたはエクスポートすることを可能にします。Kubernetesシークレットは、Kubernetes環境内で使用されるパスワードやアクセスキーなどの機密情報です。KubernetesとAWSクラウド間で転送する際に、これらの機密情報を安全に制御できるようにすることが重要です。<br /><br /><strong>ssm-secret</strong>プラグインは、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install ssm-secret</pre><br />もちろん、SecretsはKubernetesに限ったことではありません。最近のアプリケーション環境やプラットフォームでは、ほぼすべてのタイプでSecretsのデータを使用します。ssm-secretプラグインの場合、指定されたパラメータストアのパス下で見つかったすべてのパラメータを、"StringData "として単一のkubernetesシークレットにインポートすることが可能です。<br /><br />これは、クラスターやネームスペースを再プロビジョニングする際に、同じシークレットを何度もプロビジョニングする必要がある場合に、非常に便利です。また、<a href="https://letsencrypt.org/">LetsEncrypt</a>や他の証明書のバックアップ/リストアにも便利です。<br /><br />パス/foo/barのAWSパラメータにシークレット値が、パラメータ/foo/passwdにセキュアパスワードが含まれている場合、kubectl ssm-secret listサブコマンドを使用してパラメータストアのキーと値を表示することができます：<br /><br /><pre>kubectl ssm-secret list --ssm-path /foo</pre><br />これらの出力パラメータは、以下のimportコマンドでインポートすることができます：<br /><br /><pre>kubectl ssm-secret import foo --ssm-path /foo</pre><br /><h3>セキュリティに関する注意点</h3>このプラグインが動作するためには、1つのパラメータストアのパスを指定する必要があります。このプラグインは、指定されたパスの下の複数のレベルを再帰的に検索することはありません。その結果、このプラグインは非常に意見が分かれやすく、ユーザーはこれらのパスを正しく追跡しない場合、正しいパスへのシークレットのインポート/エクスポートに失敗する危険性があります。<br /><br /><h3>6. Kubelogin</h3><a href="https://github.com/int128/kubelogin">GitHubリポジトリ</a>へのリンク<br /><br />Kubelogin (kubectl-loginとしても知られています)は、CLI経由でクラスターにログインするための便利なセキュリティプラグインです。これは、DEXのようなOpenID Connectプロバイダを通じて実現される。OpenID ConnectはOAuth 2.0プロトコル上にあるシンプルなIDレイヤーです。これは、クライアントが認証サーバーによって実行された認証に基づいてエンドユーザーのアイデンティティを確認し、同様に相互運用性とRESTのような方法でエンドユーザーの基本的なプロファイル情報を取得することを可能にします。<br /><br />kubectl-loginプラグインは、以下のKrewコマンドでインストールすることができます：<br /><br /><pre>kubectl krew install kubectl-login</pre><br />OpenID Connectプロバイダーが、Kubernetes API ClientのデフォルトコールバックエンドポイントをOpenID設定内にリストアップしている必要があります：<br /><pre>http://localhost:33768/auth/callback</pre><br />このKubectlプラグインはOpenID Connect (OIDC) 発行者のURLを.kube/configから取得するので、.kube/configに記述しておく必要があります。kubeconfigファイルにこの変更を加えると、OIDCプロバイダに割り当てられたユーザー名を使用するために進むことができます：<br /><br /><pre>kubectl login nigeldouglas-oidc</pre><br />このコマンドをCLIで実行すると、OpenID Connect Providerのログインページにリダイレクトされた状態でブラウザが開かれます。OIDCプロバイダ側で認証に成功すると、kubeconfigファイル内のトークンが置き換えられます。<br /><br /><h3>7. Kubectl-whisper-secret</h3><a href="https://github.com/rewanthtammana/kubectl-whisper-secret">GitHubリポジトリ</a>へのリンク<br /><br />kubectl-ssm-secretプラグインを使用して、<span> ‘Secrets’  </span>のような機密性の高いクレデンシャルを保護することの重要性について言及しました。whisper-secretプラグインは、改善されたプライバシーでこれらのシークレットを作成することに重点を置いています。このプラグインは、ターミナル（bash）の履歴やショルダーサーフィン攻撃などによる情報漏洩を防ぐために、安全な入力プロンプトを使用してシークレットを作成することができます。<br /><br /><strong>whisper-secret</strong>プラグインは、以下のKrewコマンドでインストールすることができます：<br /><br /><pre>kubectl krew install whisper-secret</pre><br /><strong>'kubectl create secret' </strong>には、私たちが最もよく使うサブコマンドがいくつかあり、上記のように複数の方法で機密情報を漏洩してしまう可能性があります。例えば、<strong>’kubectl create secret’<span> </span></strong>コマンドでDockerレジストリに接続する際、認証用の平文パスワードで接続することができます。<br /><br /><pre>kubectl create secret docker-registry my-secret --docker-password nigelDouglasP@ssw0rD</pre><br /><strong>'kubectl whisper-secret' </strong>プラグインは、ユーザーが機密情報を含む<strong>-from-literal</strong>や<strong>-docker-password</strong>などのフィールドに安全な入力プロンプトを表示してシークレットを作成することを可能にします。<br /><br /><pre>kubectl whisper-secret docker-registry my-secret --docker-password -- -n nigel-test --docker-username &lt;insert-password&gt;</pre><br />すると、Dockerのパスワードを入力するよう促されますが、これはコマンド自体には挿入されません。こうすることで、パスワードがプレーンテキストの値としてbashの履歴に表示されなくなり、セキュリティが高まります。<br /><br /><h3>8. Kubectl-capture</h3><a href="https://github.com/sysdiglabs/kubectl-capture">GitHubリポジトリへ</a>のリンク<br /><br />Sysdigオープンソース（<a href="https://sysdig.jp/blog/sysdig-inspect/">Sysdig Inspect</a>）は、コンテナのトラブルシューティング、パフォーマンスチューニング、セキュリティ調査などのための強力なツールです。Sysdigのチームは、Podを実行している基盤となるホストでパケットキャプチャーをトリガーするkubectlプラグインを作成しました。<br /><br /><strong>kubectl-capture</strong>プラグインは、以下のKrewコマンドでインストールすることができます。<br /><br /><pre>kubectl krew install kubectl-capture</pre><br />パケットキャプチャーは、<a href="https://sysdig.jp/blog/guide-kubernetes-forensics-dfir/">Kubernetesにおけるインシデントレスポンスやフォレンジック</a>に非常に有効です。キャプチャーファイルは一定期間作成され、Linuxシステムの詳細なシステム、ネットワーク、アプリケーションの活動を含むデータ密度の高いSysdigキャプチャーを直感的に操作するために設計された強力なオープンソースインターフェースである<a href="https://github.com/draios/sysdig-inspect">Sysdig Inspect</a>で使用するためにローカルにダウンロードされます。<br /><br />クラスター内の実行中のPodに対して、以下のコマンドを実行するだけです：<br /><br /><pre>kubectl capture kinsing-78f5d695bd-bcbd8</pre><br /><br />キャプチャーコンテナが起動すると、Sysdig Kernelモジュールのコンパイルとシステムコールのキャプチャーが行われます。完了すると、ワークステーションからSysdig Inspect UI内のコンテンツを読み込むことができます：<br /><br /><img width="1170" height="726" decoding="async" src="https://sysdig.com/wp-content/uploads/Screenshot-2023-01-16-at-16.22.46.png" alt="alt_text" title="Sysdig Inspect" class="img-lightbox u-drop-shadow entered lazyloaded" data-lazy-src="https://sysdig.com/wp-content/uploads/Screenshot-2023-01-16-at-16.22.46.png" data-ll-status="loaded" /><br /><br />これらのツールを使えば、アナリストが問題の原因を見つけたり、何が起こったかを監査したりするのがずっと簡単になります。より深く知りたい場合は、<a href="https://sysdig.jp/blog/sysdig-inspect/">Sysdig Inspectを使ったコンテナのトラブルシューティング</a>や、<a href="https://sysdig.jp/blog/triaging-malicious-docker-container/">悪意のあるコンテナのトリアージ</a>などをお読みください。<br /><br /><h3>9. Kubectl-trace</h3><a href="https://github.com/iovisor/kubectl-trace">GitHubリポジトリ</a>へのリンク<br /><br /><strong>kubectl-trace</strong>は、Kubernetesクラスターにおけるbpftraceプログラムの実行をスケジュールすることができるkubectlプラグインです。簡単に言うと、Kubectl-traceプラグインは、Kubernetesクラスターで分散トレースを行うためのツールです。Pod、サービス、イングレスコントローラーなど、クラスタのさまざまなコンポーネントを通過するリクエストの実行をトレースできるようになります。<br /><br />kubectl-traceプラグインは、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install trace</pre><br />Kubectl-traceプラグインを利用することで得られるセキュリティ上の利点として、クラスター内のリクエスト処理に関する問題の特定やトラブルシューティングに役立てることができます。例えば、クラスター内の何らかの問題が原因で特定のリクエストがブロックされたり、速度が低下していると思われる場合、Kubectl-traceを使用してリクエストがクラスターを通過するのを追跡し、問題の原因を特定することができます。<br /><br />このプラグインは、選択したノード上のトレースポイントをプローブするプログラムを実行します：<br /><br /><pre>kubectl trace run &lt;node-name&gt; -e "tracepoint:syscalls:sys_enter_* { @[probe] = count(); }"</pre><br />もう一つの潜在的なセキュリティ上の利点は、Kubectl-traceがクラスター内でどのようにリクエストが処理されているかを理解するのに役立ち、潜在的な脆弱性や設定ミスを特定するのに役立つということです。例えば、あるリクエストが侵害されたPodやサービスによって処理されていることが分かった場合、Kubectl-traceを使用してリクエストを追跡し、問題の原因を特定することができます。<br /><br />全体として、Kubectl-traceプラグインは、リクエスト処理と実行に関連する問題の特定と対処を支援することで、Kubernetesクラスターのセキュリティを向上させる有用なツールとなりえます。<br /><br /><h3>10. Access-matrix</h3><a href="https://github.com/corneliusweig/rakkess">GitHubリポジトリ</a>へのリンク<br /><br /><strong>Access-matrix</strong>（しばしば<span>‘ Rakkess’ </span>とも呼ばれる）は、サーバーリソースのアクセスマトリクスを表示するkubectlプラグインです。<br /><br />以下のKrewコマンドで<strong>access-matrix</strong>プラグインをインストールすることができます：<br /><br /><pre>kubectl krew install access-matrix</pre><br />以下のコマンドを実行するだけで、<span>‘default’ </span>ネットワークのネームスペースにあるすべてのリソースのCRUD（Create, Read, Update &amp; Delete）パーミッションが表示されます：<br /><br /><pre>kubectl rakkess –n default</pre><br />一部のロールは、特定の名前を持つリソースにのみ適用されます。このような設定を確認するには、リソース名を追加の引数として指定します。例えば、ネームスペース<strong>sysdig-agent</strong>の<strong>sysdig-controller</strong>というConfigMapのアクセス権を表示するには下記のように実行します：<br /><br /><pre>kubectl access-matrix r cm sysdig-controller -n sysdig-agent --verbs=all</pre><br />rakkessリソースはRoles、ClusterRoles、およびそれらのバインディングをクエリーする必要があるため、通常、管理クラスターアクセスを必要とします。<br /><br /><h3>11. Rolesum</h3><a href="https://github.com/Ladicle/kubectl-rolesum">GitHub リポジトリ</a>へのリンク<br /><br />Rolesum kubectlプラグインは、Kubernetesクラスターで定義されているロールとパーミッションの概要を生成するためのツールです。これにより、クラスターに定義されているすべてのロールとパーミッション、およびそれらのロールを付与されたユーザーとグループを確認することができます。指定した対象（ServiceAccount、User、Group）に対するRBACロールを集計します。<br /><br /><strong>rolesum</strong>プラグインは、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install rolesum</pre><br />Rolesum kubectlプラグインを使用するセキュリティ上の利点として、クラスターで定義されているロールとパーミッションを特定および理解するのに役立つことが挙げられます。これは、適切なアクセス制御が行われていることを確認したり、潜在的な脆弱性や設定ミスを特定したりするのに役立ちます。<br /><br /><span>"nigeldouglas" ServiceAccoun</span>t にバインドされているロールを要約することができます。<br />デフォルトでは、rolesumはserviceaccountを探します。フラグを指定する必要はありません。<br /><br /><pre>kubectl rolesum nigeldouglas</pre><br />もう一つのセキュリティ上の利点として、Rolesumは特定のロールやパーミッションを付与されたユーザやグループを素早く特定することができ、問題のトラブルシューティングやセキュリティ評価の実施に役立ちます。<br /><br />例えば、"staging " グループにバインドされたロールを要約することができます。<br /><br /><pre>kubectl rolesum -k Group staging</pre><br />全体として、Rolesum kubectlプラグインは、クラスターで定義されているロールとパーミッションを理解し管理するのに役立ち、Kubernetesクラスタのセキュリティを向上させる有用なツールになります。<br /><br /><h3>12. Cert-Manager</h3><a href="https://github.com/cert-manager/cert-manager">GitHubリポジトリ</a>へのリンク<br /><br />Cert-Managerは、クラスター内のTLS（Transport Layer Security）証明書の自動管理を提供するKubectlプラグインです。これにより、証明書の署名プロセスを手動で処理することなく、アプリケーションのTLS証明書を簡単にプロビジョニング、管理、更新することができます。<br /><br />cert-managerプラグインは、以下のKrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install cert-manager</pre><br />cert-managerを使用することの潜在的なセキュリティ上の利点の1つは、アプリケーションが有効で最新のTLS証明書を使用していることを確認するのに役立つことです。これは、アプリケーションとそのユーザー間の通信の機密性と完全性を保護するために重要になることがあります。<br /><br />もう1つのセキュリティ上の利点は、cert-managerはTLS証明書の取得と更新のプロセスを自動化するのに役立ち、証明書の期限切れや誤操作のリスクを減らすことができることです。<br /><br />全体として、cert-manager kubectlプラグインは、安全かつ自動化された方法でTLS証明書を管理するのに役立ち、Kubernetesクラスターセキュリティを向上させる有用なツールになり得ると言えるでしょう。cert-managerプラグインは、kube-legoの作業を緩やかにベースにしており、kube-cert-managerなどの他の類似プロジェクトの知恵も借りています。<br /><br /><h3>13. np-viewer</h3><a href="https://github.com/runoncloud/kubectl-np-viewer">GitHubリポジトリ</a>へのリンク<br /><br />kubectl-np-viewerプラグインは、Kubernetesクラスターのネットワークトポロジーを可視化するためのツールです。クラスター内のPod、サービス、その他のリソース間の接続をグラフィカルに表示することができます。<br /><br />np-viewerプラグインは、以下のKrewコマンドでインストールすることができます：<br /><br /><pre>kubectl krew install np-viewer</pre><br />先ほどのCiliumプラグインとは異なり、kubectl-np-viewerプラグインは使用するCNIプラグインに関係なくクラスター内の通信パターンを把握し可視化するのに役立ちます。Ciliumプラグインは、CiliumネットワークポリシーなどのCiliumリソースの管理のみを支援します。デフォルトのKubernetesネットワークポリシーを表示することで、Kubernetesネットワークを使い始めたチームは、意図しないリソースと通信していたり、インターネットに公開されているPodなど、潜在的な脆弱性や誤った設定に対する有益な可視化から利益を得ることができます。<br /><br />以下のコマンドは、現在のネームスペース内の特定のPodに影響を与えるネットワークポリシールールを表示します：<br /><br /><pre>kubectl np-viewer -p pod-name</pre><br />同様に、kubectl-np-viewerプラグインのセキュリティ上の利点として、クラスター内のネットワーク問題のトラブルシューティングを支援することが挙げられます。例えば、Podやサービス間の接続に問題がある場合、このプラグインを使用してこれらのリソース間の接続を可視化し、すべてのネットワークネームスペースで問題の原因を特定することができます。<br /><br />以下のコマンドは、すべてのネームスペースのすべてのネットワークポリシールールを表示します：<br /><br /><pre>kubectl np-viewer --all-namespaces</pre><br />全体として、kubectl-np-viewerプラグインは、クラスターのネットワークトポロジーを理解し監視するのを助けることによって、Kubernetesクラスターのセキュリティを向上させるのに役立つツールになりえます。すべての企業が、CalicoやCiliumといった高度なネットワークポリシーの実装に移っているわけではありません。ユーザーがKubernetesネットワークポリシーの実装を検討している間、このセキュリティプラグインを使用して、ポリシーがクラスター内の潜在的に不要な/悪意のあるトラフィックを制御する方法をより理解することができます。<br /><br /><h3>14. ksniff</h3><a href="https://github.com/eldadru/ksniff">GitHub リポジトリ</a>へのリンク<br /><br />ksniff kubectlプラグインは、Kubernetesクラスター内のネットワークトラフィックをキャプチャーして分析するためのツールです。ネットワークの問題のトラブルシューティング、トラフィックパターンの監視、セキュリティ評価の実行に使用できます。<br /><br /><strong>ksniff</strong>プラグインは、以下のKrewコマンドでインストールすることができます：<br /><br /><pre>kubectl krew install ksniff</pre><br />ksniffを使用する利点の1つは、クラスター内のノードに直接アクセスすることなく、トラフィックをキャプチャーして分析できることです。これは、ノードに直接アクセスできない状況や、トラフィックをキャプチャーすることによるクラスターへの潜在的な影響を最小限に抑えたい場合に役立ちます。<br /><br />もう一つの利点は、ksniffを使用してPodとサービス間のトラフィックをキャプチャーできることです。これは、アプリケーションがクラスター内でどのように通信しているかを理解するのに役立ちます。これは、問題のトラブルシューティング、パフォーマンスの最適化、および潜在的なセキュリティ脆弱性の特定に役立ちます。<br /><br />全体として、ksniff kubectl プラグインは、ネットワーク関連の問題や脆弱性の特定と対処を支援することで、Kubernetes クラスターのセキュリティを向上させる有用なツールとなりえます。これは、TCPdumpやWireSharkなどの既存の技術でKubernetes Podをスニフィングすることで達成されます。<br /><br /><h3>15. Inspektor-Gadget</h3><a href="https://github.com/inspektor-gadget/inspektor-gadget">GitHubリポジトリ</a>へのリンク<br /><br /><strong>Inspektor-Gadget</strong>は、最も便利なkubectlプラグインの1つです。このプラグインは、ユーザーのシステム内で実行され、クラスター内にデプロイされた場合はDaemonSetとして実行されます。本当にKubernetesのリソースやアプリケーションをデバッグしたり検査したりするためのツール（またはガジェット）の集合体です。<br /><br />ガジェットプラグインは、以下のKkrewコマンドでインストールできます：<br /><br /><pre>kubectl krew install gadget</pre><br />1つまたは複数のガジェットをデプロイできます。ガジェットの例は以下のように分類されます。<br /><br /><ul><li><strong>Advice</strong> (クラスターの<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/advise/seccomp-profile.md">seccompプロファイル</a>や<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/advise/network-policy.md">ネットワークポリシー</a>を生成する)</li><li><strong>Audit</strong> (<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/audit/seccomp.md">seccompプロファイル</a>が監査ログに送信するシステムコールをトレースする)</li><li><strong>Profile</strong> (分散レイテンシーによる<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/profile/block-io.md">ブロックI/O</a>の解析、スタックトレースのサンプリングによる<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/profile/cpu.md">CPU使用率</a>の解析)</li><li><strong>Snapshot</strong> (実行中の<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/snapshot/process.md">プロセス</a>およびTCP/UDP<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/snapshot/socket.md">ソケット</a>の情報を収集)</li><li><strong>Top</strong> (<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/top/block-io.md">ブロックデバイスのI/O</a>アクティビティ、<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/top/ebpf.md">eBPF</a>のランタイム統計、<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/top/file.md">ファイル</a>ごとの読み取り/書き込みアクティビティを定期的にレポート)</li><li><strong>Trace</strong> (<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/trace/dns.md">DNS</a>クエリー/レスポンスから<a href="https://github.com/inspektor-gadget/inspektor-gadget/blob/main/docs/guides/trace/oomkill.md">OOMkill</a>によるプロセスキルまで、ほぼすべてのアクティビティをトレース)</li></ul><br />BPF Compiler Collection (BCC) ツールをベースにしたものや、Inspektor Gadget で使用するために特別に開発されたものなど、Kubernetes クラスターにおける eBPF プログラムのパッケージング、デプロイ、および実行を管理します。低レベルのカーネルプリミティブを高レベルのKubernetesリソースに自動的にマッピングし、関連情報をより簡単かつ迅速に見つけることができます。<br /><br />ネットワークトレースアクティビティに基づいてKubernetesネットワークポリシーを <span>“Advise” </span>するには、以下のコマンドを実行します：<br /><pre>kubectl gadget advise network-policy report --input ./networktrace.log &gt; network-policy.yaml</pre><br />Pod、ネームスペース、システムコール、コードに基づいてseccompプロファイルを<span>“Audit” </span>するには、以下のコマンドを実行します。<br /><pre>kubectl gadget audit seccomp -o custom-columns=namespace,pod,syscall,code</pre><br /><h2>kubectlのプラグインをDIYする</h2>コマンドラインコマンドを記述できるプログラミング言語やスクリプトであれば、プラグインを記述することができます。プラグインのインストールやプリロードは必要ないので、プラグインのコンパイルはむしろ簡単になります。<br /><br />プラグインの実行ファイルはkubectlバイナリから継承された環境を受け取ります。例えば、<strong>kubectl-sysdig</strong>というプラグインは、<strong>kubectl sysdig</strong>というコマンドを提供します。<br /><br />プラグインの実行ファイルは<strong>PATH</strong>のどこかにインストールする必要があります。<br /><br />プラグインスクリプトは次のようなものです：<br /><br /><pre>#!/bin/bash<br /># optional argument handling<br />if [[ "$1" == "version" ]]<br />then<br />    echo "1.0.0"<br />    exit 0<br />fi<br /># optional argument handling<br />if [[ "$1" == "config" ]]<br />then<br />    echo "$KUBECONFIG"<br />    exit 0<br />fi<br />echo "I am a plugin named kubectl-sysdig"</pre><br />Kubectlプラグインのビルドに関する完全なガイドについては、<a href="https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/#using-a-plugin">Kubernetesの公式ドキュメント</a>をご覧ください。<br /><br /><h2>kubectlプラグインに関する最終的な検討事項</h2>このブログ記事を書いている時点で、現在Krew上でアクセス可能な<strong>kubectlプラグインは208*個</strong>あります。それらのkubectlプラグインは、MacOS、Linux、Windowsといった主要なプラットフォームで開発者がアクセスできるようになっています。これらのプラグインは、運用タスクやセキュリティ監査において、デフォルトのkubectlユーティリティに対する明確な制限に対処することが多い一方で、Kubernetesクラスターに対して新たなセキュリティギャップを大量に発生させることにもなっています。<br /><br />セキュリティの観点から、<a href="https://sysdig.jp/blog/guide-kubernetes-forensics-dfir/">Kubernetesにおけるインシデント対応とフォレンジック</a>のためにセキュリティチームがより良い可視性を得るための最も有用なkubectlプラグイン15個を説明しました。しかし、環境にプラグインを追加すると、危険にさらされる可能性のある未監査のバイナリも追加されることになります。Krewは、これらのバイナリに既知の脆弱性や安全でない設定がないかを監査する義務を提供しません。<br /><br />kubectlプラグインを使用することによるセキュリティ上の影響には、以下のようなものがあります：<br /><br /><ol><li><strong>プラグインの脆弱性：</strong>kubectlプラグインに脆弱性がある場合、攻撃者がそれを悪用してKubernetesクラスターにアクセスできる可能性があります。</li><li><strong>安全でないプラグインインストール：</strong>プラグインが信頼できないソースからインストールされた場合、クラスターのセキュリティを脅かす悪質なコードが含まれている可能性があります。</li><li><strong>特権昇格：</strong>kubectlプラグインはkubectlコマンドと同じ特権で実行されるため、プラグインが侵害された場合、特権昇格してクラスター内の機密リソースにアクセスするために使用される可能性があります。</li><li><strong>データ漏洩：</strong>kubectlプラグインが適切に保護されていない場合、クラスターから機密データを漏洩する可能性があります。</li></ol><br />これらのリスクを軽減するためには、信頼できるソースからkubectlプラグインのみをインストールし、インストールしたプラグインを定期的に更新し、パッチを適用することが重要です。また、インストールしたプラグインを定期的に確認し、不要になったプラグインを削除するのもよいでしょう。<br /><br />あなたは、特定のプラグインがあなたのクラスターに値を追加しないように感じる場合, それは念のためにそれを削除するのが賢明でしょう.<br /><br />
<hr /><br />
このコンテンツをお楽しみいただき、Kubernetesのセキュリティについてさらに学びたい方は、Sysdigの’<a href="https://sysdig.com/learn-cloud-native/kubernetes-security/">Learn Cloud Native</a>’フィードでさらなるニュースやアップデートをお気軽にご覧ください。