コンテンツにスキップ

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 をインストールするには、次の手順を実行します。

  1. 次のコマンドを実行して、kubectl が対象のインストールクラスタを指定するように設定されていることを確認します。

    kubectl config current-context
    
  2. 使用する予定のマシンで、環境変数を設定します。次のコマンドを実行し、 をソフォスのパッケージレジストリ API キーに置き換えます。

    export SLS_TOKEN=$'<TOKEN>'
    
  3. 新しい 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 を参照するソフォスのマニフェストのみに許可されます。

  4. 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-sensorsophos-linux-content の両方の最新のバージョンタグをメモしておきます。これらのタグは、次の手順のほとんどで必要になります。不明な場合は、最新の SLS バージョンをリリースノートで確認することができます。詳細は、リリースノート を参照してください。

  5. ソフォスから提供された次のマニフェストの内容を kubernetes-manifest.yaml として保存します。場所はどこでもかまいません。

    を最新のコンテンツバージョンタグに、 を最新のセンサーバージョンタグに、{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:RUNTIMEDETECTIONS_MONITOR_PORT
              value:"9010"
            livenessProbe:
              httpGet:
                path: /healthz
                port:9010
              failureThreshold:10
            startupProbe:
              httpGet:
                path: /healthz
                port:9010
              failureThreshold:30
            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_telemetryfalse に設定してください。

    kubernetes-manifest.yaml ファイルには、ConfigMap と SLS 用の DaemonSet が含まれています。ConfigMap は、runtimedetections.yaml ファイルと runtimedetections-rules.yaml ファイルを含む /etc/sophos にマウントされます。DaemonSet は、ノードごとにセンサーのポッドを 1つ作成します。

  6. マニフェストファイルを適用し、 をマニフェストファイルの場所へのパスに置き換えます。

    kubectl apply -f <filepath>/kubernetes-manifest.yaml
    
  7. ポッドがオンラインになるのを待ってから、次のコマンドを実行します。

    kubectl get pods -l app=sophos-linux-sensor
    

    このコマンドは、ラベル -'app=sophos-linux-sensor' を持つすべてのポッドを返します。Sensor の機能を確認するには、ポッドの名前が必要です。

    ヒント

    SLS ポッドが起動しない場合は、クラスタのポッドのセキュリティポリシーを確認し、必要に応じて、SLS で必要なケーパビリティを例外に指定します。これらのケーパビリティの一覧は、DaemonSet を参照するか、ソフォスサポートにお問い合わせください。

センサーの機能の確認

次のコマンドの は、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 に送信したりできます。