CRI-O と containerd を使用した SLS のインストール
Sophos Linux Sensor (SLS) は、CRI-O または containerd がインストールされているホストで実行できます。これは、SLS をコンテナイメージとしてデプロイするか、rpm または deb パッケージを介してホストプロセスとしてインストールするかに関係なく適用されます。
設定
CRI 設定値は、SLS 設定ファイル /etc/sophos/runtimedetections.yaml
にあります。
CRI 固有の設定値には、次の 3つがあります。
値 | 意味 | デフォルト | 例 |
---|---|---|---|
enabled | SLS をオンまたはオフにするブール値。 | false | enabled: true |
addr | CRI コンテナランタイム API へのパスを示す。 | auto-detect | addr: unix:///var/run/crio/crio.sock |
poll_interval | SLS が CRI インターフェースでコンテナのステータスの変更をチェックする頻度。 | 250ms | poll_interval: 150ms |
addr
値の前に unix://
を付ける必要があり、これを付けない場合はエラーメッセージが表示されます。たとえば、CRI-O UNIX ソケットに接続する場合は、addr: unix:///var/run/crio/crio.sock
として addr
を入力する必要があります。
次に例を示します。
crisensor:
enabled: true
addr: unix:///var/run/crio/crio.sock
poll_interval: 150ms
対応しているランタイムのデフォルトの UNIX ソケットパス
サポートされているランタイムのデフォルトパスを次の表に示します。
ランタイム | ソケットパス | 設定オプションの例 |
---|---|---|
CRI-O | /var/run/crio/crio.sock | crisensor.addr: unix:///var/run/crio/crio.sock |
Containerd | /var/run/containerd/containerd.sock | crisensor.addr: unix:///var/run/containerd/containerd.sock |
コンテナの導入
SLS をコンテナに導入する場合、crisensor.addr
で指定されるパスは、コンテナにマウントされている UNIX ソケットのパスと一致する必要があります。
CRI-O をコンテナランタイムとして使用している場合は、SLS を実行する際に、環境変数 GRPC_GO_REQUIRE_HANDSHAKE
を off
に設定する必要があります。これを Kubernetes DaemonSet マニフェストの env
セクションに追加できます。
次に例を示します。
env:
- name: GRPC_GO_REQUIRE_HANDSHAKE
value: "off"
バージョン 1.17 以降の GRPC プロトコルの変更により、SLS はこの環境変数を必要とします。CRI-O の多くのバージョンは古いバージョンの gRPC で構築されているため、互換性のために環境変数が必要です。
GRPC_GO_REQUIRE_HANDSHAKE
環境変数を設定しないと、SLS が CRI ソケットに接続できない場合に、次のエラーが発生することがあります。
ERRO[0004] crisensor: connection error context deadline exceeded
このエラーメッセージは、SLS が CRI に対応するコンテナランタイムの UNIX ソケットに接続できなかったことを示します。この問題は、GRPC_GO_REQUIRE_HANDSHAKE
環境変数を設定するとで解決できます。
イベントの並べ替えウィンドウ
イベントは発生した際に Sensor に送信されないため、SLS はイベントを要求する必要があります。これは CRI API の制限によるものです。これは、2019年 8月 30日時点で状態変化を通知するメカニズムが API にないことが原因です。その結果、リクエスト間でコンテナイベントや状態変化が発生する可能性があります。
上記の制限に対処するために、SLS は、状態変化を検出しなかったことに気付いた場合は合成イベントを生成します。たとえば、コンテナが終了したため次のポーリングで存在しない場合、SLS は、コンテナ終了イベントとコンテナ破棄イベントを生成します。この問題は、runtimedetections-rules.yaml
で event_reorder_window
の値をより長い時間 (デフォルトは 25 ms) に設定することで解決できます。
次に例を示します。
event_reorder_window: 270ms
次の例では、event_reorder_window
が 270ms
に設定されています。これによって、分析エンジンは、正しいコンテナデータでイベントを適切にエンリッチ化できます。ただし、並び替えの時間を増加すると、対応アクションが遅くなることにも注意してください。