ノート:

TetragonのインストールおよびOracle Container Engine for KubernetesでのTracingPoliciesの構成

イントロダクション

このチュートリアルでは、eBPFベースのツールがクラウド・ネイティブ・アプリケーションにより広く利用されるようになるため、Oracle Cloud Infrastructure (OCI)でのセキュリティの可観測性と適用のためのeBPFベースのツールであるTetragonを実行する方法について説明します。

オペレーティング・システム・カーネルは、通常、システムを監視および影響を与える最適な場所です。機能を実行するツールと、監視および影響を与えるアクティビティの間に障壁がほとんどないためです。カーネル領域内で実行すると、多くの場合、プログラムのオーバーヘッドは非常に低くなりますが、セキュリティと保守のコストがかかります。

eBPFは、カーネルソースコードを変更したりカーネルモジュールをロードしたりすることなく、サンドボックスおよび特権コンテキストで実行できる新しい機能を導入する方法を提供します。基本的に、仮想マシンベースのプログラミング言語と同様のパラダイムを作成することによって機能します。最新の Javaプログラムが、JVM (Java Virtual Machine)がJITコンパイラを使用してネイティブコードにコンパイルし、ネイティブパフォーマンスを取得する方法に似た方法で、eBPFプログラムはバイトコード表現を使用します。BPFは Linuxカーネルに深く関連付けられており、カーネル内JITコンパイラはeBPFバイトコードをカーネル領域で実行できるネイティブコードにコンパイルします。

eBPFはイベントベースのモデルを使用してプログラムをロードし、eBPFプログラムはネットワークイベントやシステムコールなどに「フック」で書き込まれます。eBPFプログラムがフックするイベントが呼び出されると、eBPFプログラムが検証およびJITコンパイル後にカーネルにロードされます。検証ステップにより、プログラムの実行が安全であり、適切な権限を持ち、完了まで実行できるが、JITコンパイルによってネイティブのパフォーマンスが保証されます。多くの場合、eBPFプログラムは上位レベルの言語で記述され、バイトコード表現にコンパイルされます。これらは、プログラムがフックされるイベントに基づいて、JITコンパイル後に実行中のカーネルにロードされます。

テトラゴン- eBPFベースのセキュリティー可観測性と強制

Tetragonは、セキュリティーの可観測性と適用を実行する、クラウドネイティブのeBPFベースのツールです。シリウムプロジェクトのコンポーネントです。eBPFを使用すると、Tetragonはカーネルの外部で実行されているエージェントにイベントを送信することなく、イベントをフィルタおよび監視し、リアルタイムでポリシーを適用できます。Tetragonは、ネットワーク接続のオープン、ファイルへのアクセス、コンテナ内のプロセスの開始などのイベントをフィルタリングすることで、多数のセキュリティおよび可観測性ユースケースに対処できます。たとえば、アプリケーション・コンテナ内で起動されているシェル・プロセスは、セキュリティ・イベントとみなすことができます。問題のトラブルシューティングを試みている人がいるか、悪意のあるアクティビティーである可能性があり、いずれの場合も、システムへの攻撃を除外するためにセキュリティーチェックをトリガーする必要があります。開いているネットワーク接続やファイルの読取りについても同じことが言えます。Tetragonは、オーバーヘッドをほとんどまたはまったく発生させずに、これらのイベントをソフトウェアで検出できる最も早い段階で、これらのアクティビティをトレースおよびフィルタできます。

TetragonはKubernetesワークロードに最適で、クラスタの各ノードでdaemonsetとして実行されます。その後、TetragonはKubernetes APIサーバーからメタデータをプルし、そのメタデータを各ノードのカーネル内で観測されたイベントに関連付けることができます。Tetragonを使用すると、TracingPoliciesを使用して、これらのアクティビティのリアルタイム・フィルタを簡単に設定できます。TracingPolicyはTetragonによって作成されたカスタム・リソースで、管理者およびDevSecOpsはカーネル・イベントのフィルタをKubernetesリソースとして作成およびデプロイできます。TracingPolicyは、システム・コール、プロセス属性および引数を照合し、一致に対するアクションをトリガーできます。

目標

前提条件

Oracle Linuxの前提条件

OKEはOracle Linuxを使用し、TetragonはカーネルでのBTF (BPFタイプ・フォーマット)のサポートに依存します。最近のOracle Linuxカーネルには、この即時利用可能なカーネルが含まれているため、ユーザーは5.4.17-2136.305.3.el7uek以上のカーネルを使用する必要があります。また、TetragonはArm (linux/arm64)アーキテクチャのサポートを提供せず、記述時にx86 (linux/amd64)サポートのみを提供します。OKEクラスタにアーム・ノードがある場合、デーモン・セットはInit:CrashLoopBackOffステータスのままになります。

ノート: OKEノード・イメージの最新バージョンは、BTFサポートを含むカーネルに基づいています。BTFサポートのこの注意事項は、ノードOSがしばらく更新されておらず、新しく作成されたクラスタではないクラスタにのみ適用されます。不明な場合、BTFサポートがあるかどうかを確認する最善の方法は、ノードにSSHで接続してls /sys/kernel/BTFを実行することです。ここにリストされているモジュールとカーネル(vmlinux)が表示されます。一般的なノートとして、このデプロイメントにはOracle Linux 8ベースのノードをお薦めします。

ノードが実行されているカーネルのバージョンを確認するには、ノードでuname -aを実行します。古いバージョンのカーネルを実行している場合は、ノード・プール構成でバージョンをアップグレードできます。ただし、これは新しく作成されたノードにのみ影響し、既存のノードは自動的にアップグレードされないため、ワークロードで実行される可能性のある継続性が確保されます。ノード・プールのアップグレード・プロセスに従って、既存のノードを新しいカーネル・バージョンにすることができます。

JSON出力としてのイベント・ストリームは冗長で理解しにくいですが、情報密度です。このJSONデータを取り込み、そこから分析情報を導出する方法はいくつかあります。明らかなのは、tetragon CLIツールを使用することです。CiliumとTetragonの背後にあるIsovalentは、このデータを分析および視覚化して、より実用的で同化しやすいようにするフル機能の商用製品も提供しています。

タスク1: tetra CLIのインストール

タスク2: FileAccessおよびネットワークの可観測性に対するTracingPoliciesの構成

TracingPoliciesは、カーネル・イベントのリアルタイム・フィルタの設定を簡単にするカスタム・リソースです。TracingPolicyは、システム・コールで可観測性を照合およびフィルタ処理し、これらの一致に対するアクションもトリガーします。Tetragonは、この機能を紹介するいくつかの例を提供し、TracingPoliciesを構成するための開始点として使用できます。

これらのイベントはカーネル内から直接監視されるため、これらのコールをトレースする処理にオーバーヘッドがほとんどなく、悪意のあるアクターによって難読化またはマスクされる可能性もほとんどありません。

このアプローチの主な欠点は、たとえば、ファイルを読み取るプロセスを強制終了するというようなアクションを実行できるという点です。つまり、イベントが発生しているときではなく、イベントについて知っているということです。ただし、カーネルレベルでイベントをフィルタリングおよび照合し、それらを監視および処理するのに役立つポリシーを作成できるよう、オーバーヘッドが低いソリューションを持つことは非常に強力です。

トラブルシューティング

エラー: TetragonポッドがCrashLoopBackOff状態であることが判明した場合、これは2つの理由が原因である可能性があります。

考えられる理由: クラスタ内にArmベースのノードがある場合、これがArmベースのノードで発生している可能性が最も高い理由です。テトラゴンはまだ腕で走っていない。

トラブルシューティング:

2つ目の理由は、ノードに古いカーネルがあり、BTFサポートが含まれていないことです。これが実際の問題であるかどうかを確認するには、前述のようにポッド内の障害が発生したコンテナのコンテナ・ログを取得します。カーネルでのBTFサポートが不足している場合は、次のようなエラーメッセージが表示されます。

aborting. kernel autodiscovery failed: Kernel version BTF search failed kernel is not included in supported list.
Use --btf option to specify BTF path and/or '--kernel' to specify kernel version

これは、OSが最近または古いバージョンのOSを更新していないノードで想定されます。これを解決するには、ワーカー・ノードの最新のOracle Linux 8ベースのOKEまたはプラットフォーム・イメージに切り替えます。ノード・プール構成をこの選択で更新し、標準ノード・プールのアップグレード・プロセスに従ってノードをアップグレードする必要があります。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。