Kubernetes への Sophos Linux Sensor のインストール
概要
Sophos Linux Sensor (SLS) は Linux ホストにインストールされる軽量エージェントで、ホストからイベントを収集して、警告生成や自動対応を実施します。SLS は、既存のログおよび警告インフラと統合します。SLS は、パブリッククラウドやプライベートクラウド、コンテナや VM、オンプレミス版ベアメタルなど、Linux のあるあらゆる環境、およびさまざまなカーネルバージョンおよび Linux ディストリビューションに導入できます。
要件
- このガイドの内容に従う前に、Kubernetes、Docker、および kubectl などのコマンドラインツールについて十分に理解しておくことをお勧めします。
- kubetcl v1.18 以降。詳細は、Kubernetes インストールツールを参照してください。
-
Sophos Linux Sensor パッケージリポジトリ API トークンを生成する方法に従って、
{LINUX_REPO_API_KEY}
および{tenant-id}
を取得します。{LINUX_REPO_API_KEY}
は "SLS-" で始まる短い文字列です。-
{tenant-id}
は以下の形式の文字列です。1a2345b6-78c9-012d-ef34-5a6b789c0de1
注
Sensor はルート PID 名前空間で実行する必要があります。ほとんどの環境では、kubelet とノードのコンテナランタイムはルート PID 名前空間で実行されるため、hostPID: true
を指定すれば十分です。minikube や kind などの非運用環境では、kubelet はルート PID 名前空間ではなくコンテナ内で実行されることがあります。
インストール
これらの手順は、Kubernetes を介してセンサー コンテナイ メージの導入の概要を説明している例です。ここでのガイダンスを使用して、選択したツールを使用して導入をカスタマイズできます。
Kubernetes に SLS をインストールするには、次の手順を実行します。
-
次のコマンドを実行して、
kubectl
が対象のインストールクラスタを指定するように設定されていることを確認します。kubectl config current-context
-
使用する予定のマシンで、環境変数を設定します。次のコマンドを実行し、<TOKEN> をソフォスのパッケージリポジトリ API キーに置き換えます。
export SLS_TOKEN=$'<TOKEN>'
-
新しい Kubernetes Secret を作成します。SLS は、この Secret を使用して kubelet を認証し、kubelet がソフォスのプライベート コンテナ レジストリからダウンロードできるようにします。
kubectl create secret docker-registry sophos-registry-secret --docker-server=registry.sophosupd.com --docker-username=$SLS_TOKEN --docker-password=$SLS_TOKEN
次のコマンドを実行して、新しい Secret を表示します。
kubectl get secrets
注
アクセスは、Kubernetes の
docker-registry sophos-registry-secret
を参照するソフォスのマニフェストのみに許可されます。 -
SLS およびデフォルトのコンテンツイメージに使用可能なタグを取得します。
curl -u {LINUX_REPO_API_KEY}:{LINUX_REPO_API_KEY} -X GET https://registry.sophosupd.com/v2/release/sophos-linux-sensor/tags/list |jq '.tags'
curl -u {LINUX_REPO_API_KEY}:{LINUX_REPO_API_KEY} -X GET https://registry.sophosupd.com/v2/release/sophos-linux-content/tags/list |jq '.tags'
ヒント
sophos-linux-sensor
とsophos-linux-content
の両方の最新のバージョンタグをメモしておきます。これらのタグは、次の手順のほとんどで必要になります。不明な場合は、最新の SLS バージョンをリリースノートで確認することができます。リリースノートを参照してください。 -
ソフォスから提供された次のマニフェストの内容を
kubernetes-manifest.yaml
として保存します。場所はどこでもかまいません。<CONTENT_TAG> を最新のコンテンツバージョンタグに、<SENSOR_TAG> を最新のセンサーバージョンタグに、{tenant-id} をファイル内の固有の Sophos Central ID に置き換える必要があります。
# This sensor does not communicate with a Console. # Its alerts are only configured to go to stdout, and its configuration comes from Sophos content mounted into /var/lib/sophos/content apiVersion: apps/v1 kind: DaemonSet metadata: name: sophos-linux-sensor labels: app: sophos-linux-sensor spec: selector: matchLabels: app: sophos-linux-sensor template: metadata: labels: app: sophos-linux-sensor spec: hostPID: true securityContext: runAsUser: 0 imagePullSecrets: - name: sophos-registry-secret initContainers: - name: sophos-linux-content image: "registry.sophosupd.com/release/sophos-linux-content:<CONTENT_TAG>" imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /var/lib/sophos/content name: sophos-linux-content containers: - name: sophos-linux-sensor image: "registry.sophosupd.com/release/sophos-linux-sensor:<SENSOR_TAG>" imagePullPolicy: IfNotPresent env: - name: SENSOR_MONITOR_PORT value: "9010" livenessProbe: httpGet: path: /healthz port: 9010 initialDelaySeconds: 5 readinessProbe: httpGet: path: /healthz port: 9010 initialDelaySeconds: 5 resources: limits: memory: 2Gi requests: memory: 1Gi securityContext: privileged: true capabilities: add: - SYS_ADMIN -setuid - SETGID - SETPCAP - SYS_PTRACE - KILL - DAC_OVERRIDE - IPC_LOCK - FOWNER - CHOWN - SYSLOG -NET_RAW - SYS_RESOURCE volumeMounts: - name: sensor-linux-sensor-config mountPath: /etc/sophos - name: sophos-linux-content mountPath: /var/lib/sophos/content - name: cgroup mountPath: /var/run/sophos/mnt/sys/fs/cgroup readOnly: true - name: debugfs mountPath: /var/run/sophos/mnt/sys/kernel/debug - name: hostname mountPath: /var/run/sophos/mnt/hostname readOnly: true - name: proc mountPath: /var/run/sophos/mnt/proc readOnly: true - name: var-lib-docker mountPath: /var/lib/docker readOnly: true - name: var-run-docker mountPath: /var/run/docker readOnly: true - name: var-run-containerd mountPath: /var/run/containerd - name: var-run-crio mountPath: /var/run/crio volumes: - name: sensor-linux-sensor-config configMap: name: sensor-linux-sensor-config - name: sophos-linux-content emptyDir: {} - name: cgroup hostPath: path: /sys/fs/cgroup - name: debugfs hostPath: path: /sys/kernel/debug - name: hostname hostPath: path: /etc/hostname - name: proc hostPath: path: /proc - name: var-lib-docker hostPath: path: /var/lib/docker - name: var-run-docker hostPath: path: /var/run/docker - name: var-run-containerd hostPath: path: /var/run/containerd - name: var-run-crio hostPath: path: /var/run/crio --- apiVersion: v1 kind: ConfigMap metadata: name: sensor-linux-sensor-config data: runtimedetections-rules.yaml: | # Blank, no custom rules. sophos-linux-content will still be used. # This file must be present when policy_input is unavailable runtimedetections.yaml: | send_labs_telemetry: true endpoint_telemetry_enabled: true # Set your customer id: customer_id: "{tenant-id}" cloud_meta: auto crisensor.enabled: true alert_output: outputs: - type: stdout enabled: true template: 'Alert Triggered: {{ .StrategyName}}'
注
テレメトリデータをソフォスに送信しない場合は、
send_labs_telemetry
をfalse
に設定してください。kubernetes-manifest.yaml
ファイルには、ConfigMap と SLS 用の DaemonSet が含まれています。ConfigMap は、runtimedetections.yaml
ファイルとruntimedetections-rules.yaml
ファイルを含む/etc/sophos
にマウントされます。DaemonSet は、ノードごとにセンサーのポッドを 1つ作成します。 -
マニフェストファイルを適用し、 <filepath> をマニフェストファイルの場所へのパスに置き換えます。
kubectl apply -f <filepath>/kubernetes-manifest.yaml
-
ポッドがオンラインになるのを待ってから、次のコマンドを実行します。
kubectl get pods -l app=sophos-linux-sensor
このコマンドは、ラベル -'app=sophos-linux-sensor' を持つすべてのポッドを返します。Sensor の機能を確認するには、ポッドの名前が必要です。
ヒント
SLS ポッドが起動しない場合は、クラスタのポッドのセキュリティポリシーを確認し、必要に応じて、SLS で必要なケーパビリティを例外に指定します。これらのケーパビリティの一覧は、DaemonSet を参照するか、ソフォスサポートにお問い合わせください。
Sensor 機能の確認
次のコマンドの <SENSOR_POD_NAME> を、 kubectl get pods -l app=sophos-linux-sensor
コマンドの Sensor の名前に置き換える必要があります。
Sensor のポッドのログには、設定済みのポリシーすべてが一覧表示されるはずです。
kubectl logs <SENSOR_POD_NAME>
簡単なテスト警告を生成するには、センサーのポッドの 1つを実行します。
kubectl exec -it <SENSOR_POD_NAME> -- /sophoslinuxsensor -test-alert
デフォルトで SLS は、警告を標準出力に出力するように設定されています。これは、警告を生成したポッドからログを表示して確認できます。
kubectl logs <SENSOR_POD_NAME>
警告はまた、webhook に送信したり、クラウド BLOB ストレージバケットに直接書き込んだり、ログローテーションのあるファイルシステム上のローカルファイルに書き込んだり、syslog に送信したりできます。詳細は、警告のエクスポートを参照してください。