メインコンテンツまでスキップ
Sumo Logic Japanese

JFrog Xray のログの収集

このページでは、JFrog Xray からログを収集して Sumo Logic に取り込み、JFrog Xray アプリケーションで事前定義済みのダッシュボードとサーチで使用する方法を説明します。

このページでは、JFrog Xray からログを収集して Sumo Logic に取り込み、JFrog Xray アプリケーションで事前定義済みのダッシュボードとサーチで使用する方法を説明します。このアプリケーションを最大限に活用するには、Artifactory と Kubernetes からもログを収集することをお勧めします。

ステップ 1: JFrog Xray インスタンス詳細の収集

このステップでは、以下の作業で使用する JFrog Xray インスタンスの詳細を収集します。

以下の詳細を収集します。

  • JFrog Xray インスタンスのホスト名とポート (例: JFrog インスタンス URL http://host-example:8000/web/#/login)
    • ホスト名 = host-example
    • ポート = 8000
  • JFrog Xray インスタンスのユーザ名とパスワード

ステップ 2: Artifactory ログの収集

脆弱なアーティファクトの Source とそれらを使用しているユーザを調査するために、JFrog Artifactory からデータを収集することをお勧めします。そのためには、Xray ログと Artifactory ログを関連付けます。 

手順については「Artifactory のログの収集」を参照してください。

ステップ 3: Kubernetes ログの収集

Aritfactory で Docker リポジトリをセットアップしてあり、Kubernetes クラスタでコンテナを動作させている場合は、本番環境で動作している脆弱なコンテナをすべて把握できるように、Kubernetes クラスタからデータを収集することをお勧めします。 

手順については「Kubernetes のログの収集」を参照してください。

ステップ 4: Hosted Collector と HTTP Source を追加する

このステップでは、JFrog Xray ログを収集するように Sumo Logic の Hosted Collector と HTTP Source をセットアップします。

使用する Sumo Logic の Hosted Collector を指定するか、次の手順で新しい Hosted Collector を作成します。

Hosted Collector と HTTP Source の追加手順

  1. 「Hosted Collector を設定する」の手順を実行して、新しい Sumo Logic の Hosted Collector を作成します。
  2. これらの手順に従って、上記で作成した Hosted Collector で新しい HTTP の Source を作成します。

ステップ 5: JFrog Xray の収集方法のセットアップ

このセクションでは、JFrog Xray からログを収集して Sumo Logic に送信するための方法をいくつか説明します。ログは、JFrog Xray アプリケーションのダッシュボードに表示されます。Amazon Web Services (AWS) で AWS Lambda サービスを使用して JFrog Xray 用の Sumo Logic Collector を設定するか、または Linux マシンで cron ジョブを使用してスクリプトを実行できます。環境に最も適した方法を選択してください。

方法 1 - Sumo Logic JFrog Xray SAM アプリケーション

この収集方法では、AWS アカウントで必要なリソースを作成する SAM アプリケーションをデプロイします。 

Sumo Logic JFrog Xray SAM アプリケーションをデプロイするには、以下の手順を実行します。

  1. https://serverlessrepo.aws.amazon.com/applications にアクセスします。
  2. sumologic-jfrog-xray を探して、[Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソース ポリシーを作成するアプリケーションを表示)] チェックボックスがオンであることを確認して、表示されるアプリケーション リンクをクリックします。

JFX_AWS_App_Search_page.png

  1. Sumo アプリケーションのページが表示されたら [Deploy (デプロイ)] をクリックします。
  2. [AWS Lambda] > [Functions (関数)] > [Application Settings (アプリケーション設定)] パネルに移動して、以下のフィールドにパラメータを入力します。
  • HTTPLogsEndpoint: ステップ 4 から HTTP ログ Source の URL をコピーして貼り付けます。
  • Hostname (ホスト名): ステップ 1 からホスト名をコピーして貼り付けます。
  • Port (ポート): ステップ 1 からポートをコピーして貼り付けます。
  • Username (ユーザ名): ステップ 1 からユーザ名をコピーして貼り付けます。
  • Password (パスワード): ステップ 1 からパスワードをコピーして貼り付けます。

JFX_AWS_Application_Settings.png 

  1. [Deploy (デプロイ)] をクリックします。
省略可能 - 複数の JFrog Xray インスタンスの設定

複数の JFrog Xray インスタンスからログを収集して Sumo Logic に送信する場合は、以下の作業を行います。

複数の JFrog Xray インスタンスのログ収集を設定するには、以下の作業を行います。

  1. 新しいプロジェクトの設定で SAM アプリケーションをデプロイします。
  2. デプロイが完了したら、AWS Lambda で環境変数 (DBNAME) を追加してデータベース名を変更します。

JFX_Lambda_env_variables.png

方法 2: Sumo Logic JFrog Xray Script ベースの収集

このセクションでは、Sumo Logic JFrog Xray アプリケーションのスクリプト ベースの収集を設定する方法を説明します。

前提条件
  • すでに Hosted CollectorHTTP Source を正常に追加してあり、ステップ 4 に従って JFrog Xray インスタンスの詳細をコピーしてあることが必要です。
  • Collector をインストールするユーザ アカウントでログインしている必要があります。そうでない場合は、次のコマンドで正しいアカウントに切り替えてください。
    sudo su <user_name>
  • Python 3.7 または Python 2.7 と互換性のある Linux マシン
ステップ 1.Linux マシンでのスクリプトの設定

この作業では、Linux マシンにスクリプトをインストールする方法を示します。

スクリプトをデプロイするには、次の手順を実行します。

  1. まだ pip がインストールされていない場合は、pip のドキュメントの指示に従って pip をダウンロードしてインストールします。
  2. Python 3.7 または Python 2.7 と互換性のある Linux マシンにログインします。
  3. 次のいずれかを実行します。
  • Python 2 の場合 - 次のコマンドを実行します。pip install sumologic-jfrog-xray
  • Python 3 の場合 - 次のコマンドを実行します。pip3 install sumologic-jfrog-xray
  1. 次に示すように、ホーム ディレクトリに設定ファイル jfrogxraycollector.yaml を作成し、指定の場所にパラメータ <Variables> を入力します。

JFX_script_yaml_config.png

  1. 次のいずれかの方法で (crontab -e を使用して) Collector を 5 分おきに実行する cron ジョブを作成します。
  • Python 2 の場合 - crontab で次の行を追加します。*/5 * * * *  /usr/bin/python -m sumojfrogxray.main > /dev/null 2>&1 
  • Python 3 の場合 - crontab で次の行を追加します。*/5 * * * *  /usr/bin/python3 -m sumojfrogxray.main > /dev/null 2>&1
省略可能 - 複数プロジェクトの収集の設定

複数のプロジェクトからログを収集して Sumo Logic に送信する場合は、以下の作業を行います。

複数のプロジェクトのログ収集を設定するには、以下の作業を行います。

  1. Linux マシンでスクリプトを設定し、設定ファイルに移動します。
  2. jfrogxraycollector.yamlDB_NAME (次の例の <DB NAME> 変数) を変更します。

JFX_Multiple_Projects_Script.png

ステップ 2.高度な設定

このセクションでは、設定ファイルで定義できる JFrog Xray の変数のリストを示します。

変数 使い方
[Collection (収集)] セクションの BACKFILL_DAYS イベント収集を開始する前の日数。1 を指定すると、昨日から今日にかけてイベントがフェッチされます。
[Logging (ログ)] セクションの LOG_FORMAT Python ログ モジュールがログをファイルに書き込むために使用するログ形式。
[Logging (ログ)] セクションの ENABLE_LOGFILE すべてのログとエラーをログ ファイルに書き込む場合は TRUE に設定します。
[Logging (ログ)] セクションの ENABLE_CONSOLE_LOG コンソールへのログ出力を有効にします。
[Logging (ログ)] セクションの LOG_FILEPATH ENABLE_LOGFILE を TRUE に設定した場合に使用するログ ファイルのパス。
[Collection (収集)] セクションの NUM_WORKERS API コールで生成するスレッド数。
[Collection (収集)] セクションの MAX_RETRY リクエスト失敗時の再試行回数。
[Collection (収集)] セクションの BACKOFF_FACTOR 2 回目以降の再試行において、再試行と再試行の間に適用されるバックオフ係数。backoff_factor が 0.1 の場合、sleep() は再試行と再試行の間で [0.0s, 0.2s, 0.4s, ...] とスリープします。
[Collection (収集)] セクションの TIMEOUT リクエスト ライブラリで使用するリクエスト タイムアウト。
[SumoLogic] セクションの HTTP_LOGS_ENDPOINT Sumo Logic で作成されるログ取り込み用の HTTP Source エンドポイント URL。

 

方法 3: JFrog Xray での Webhook のセットアップ

この方法では、Sumo Logic にログを送信するための Webhook を JFrog Xray でセットアップします。

JFrog Xray で Webhook をセットアップするには、次の手順を実行します。

  1. JFrog Xray で [Admin (管理)] > [Webhooks] に移動します。

    webhooks-link.png
  2. 次のいずれかを実行します。
  • Webhook をクリックして詳細を編集します。
  • [New Webhook (新規 Webhook)] をクリックして新しい Webhook を作成します。


new-webhook-link.png

  1. Webhooks の定義ページが表示されます。 

    create-button-webhooks-page.png
  2. Webhook に以下の情報を入力して [Create (作成)] をクリックします。
    1. [Webhook Name (Webhook 名)]
    2. URLステップ 4 で作成した HTTP Source の HTTP Source アドレス URL を入力します。 
    3. 説明
  3. JFrog Xray で [Policies (ポリシー)] に移動します。

    policies-link.png
  4. ポリシーをクリックして詳細を編集するか、または [New Policy (新規ポリシー)] をクリックして新しいポリシーを作成します。

new-policy-link.png

[Create Policy (ポリシーの作成)] ページが表示されます。

new-rule-link-create-policy.png

  1. ポリシーに以下の設定を入力します。
    1. Name 
    2. タイプ 
    3. Description (説明)
    4. Rules (ルール)。既存のルールをクリックして詳細を編集するか、または [New Rule (新規ルール)] をクリックして新しいルールを作成します。
    5. [Automatic Actions (自動アクション)] > [Trigger Webhook (Webhook のトリガ)] セクションで、上記で作成した Webhook を選択します。 
    6. [Add Rule (ルールの追加)] をクリックします。

      new-security-rule.png

トラブルシューティング

このセクションでは、関数を手動で実行して JFrog Xray からログ メッセージが送信されていることを確認する方法を説明します。

関数を手動で実行するには、次の手順を実行します。

  1. 次のいずれかを実行します。
  • python の場合は次のコマンドを実行します。python -m sumojfrogxray.main
  • python3 の場合は次のコマンドを実行します。python3 -m sumojfrogxray.main
  1. スクリプトは、デフォルトで /tmp/sumoapiclient.log にログを生成します。これらのログをチェックして、スクリプトがトリガされているかどうかを確認します。
  2. unable to execute 'gcc': No such file or directory, error: command 'gcc' failed with exit status 1” ('gcc' を実行できません。指定されたファイルまたはディレクトリが見つかりません。エラー: コマンド 'gcc' が終了ステータス 1 で失敗しました) のようなエラーが返された場合は、自分の AWS EC2 インスタンスに移動して、以下のコマンドを実行します。
sudo yum -y install gcc
sudo yum install python-devel

ログ メッセージのサンプル

{
  "created": "2019-09-03 22:01:19,804 +0530",
  "top_severity": "High",
  "watch_name": "Maven_watch",
  "policy_name": "License_policy",
  "issues": [
    {
      "severity": "medium",
      "type": "License",
      "provider": "JFrog",
      "created": "2019-09-03 22:01:19,804 +0530",
      "summary": "In Libgcrypt 1.8.4, the C implementation of AES is vulnerable to a flush-and-reload side-channel attack because physical addresses are available to other processes. (The C implementation is used on platforms where an assembly-language implementation is unavailable.)",
      "description": "In Libgcrypt 1.8.4, the C implementation of AES is vulnerable to a flush-and-reload side-channel attack because physical addresses are available to other processes. (The C implementation is used on platforms where an assembly-language implementation is unavailable.)",
      "impacted_artifacts": [
        {
          "name": "mina-core-2.0.0-RC1-javadoc.jar",
          "display_name": "mina-core:2.0.0-RC1",
          "path": "/milestone/org/apache/mina/mina-core/2.0.0-RC1/mina-core-2.0.0-RC1-javadoc.jar",
          "pkg_type": "zip",
          "sha256": "ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0",
          "sha1": "4cc3661681baf84566f4e3f166127074548d4519",
          "depth": 0,
          "parent_sha": "ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0",
          "infected_files": [
            {
              "name": "SQLAlchemy-1.3.8.tar.gz",
              "path": "SQLAlchemy:1.3.8",
              "sha256": "dd1ca0d765607415523d57b7464c0bb259412cff5d9a09c281d0acfbd4eed7e3",
              "depth": 0,
              "parent_sha": "35c102085707f703de2d9eaad8752d6fe1b8f02b5d2149f1d8357c9cc7fb7d0a",
              "display_name": "/libs-milestone-local/org/springframework/spring/3.2.0.RC2/spring-framework-3.2.0.RC2-dist.zip",
              "pkg_type": "spring"
            }
          ]
        }
      ],
      "cve": "CVE-2019-12904"
    }
  ]
}

クエリのサンプル

このクエリ例は、[JFrog Xray - Overview (JFrog Xray - 概要)] ダッシュボードの [Watches Invoked (呼び出されたウォッチ)] パネルから引用されています。

_sourceCategory = Labs/jfrog/xray
| json "top_severity", "issues", "watch_name", "policy_name" as TopSeverity, Issues, WatchName, PolicyName nodrop
| where !(TopSeverity matches "Pending Scan")
| parse regex field=Issues "(?<Issue>\{.*?(?=,\{\"severity\"|\]$))" multi
| json field=Issue "impacted_artifacts", "severity", "summary", "cve", "provider", "created", "description", "type" as Artifacts, Severity, Summary, CVE, Provider, Created, Description, PolicyType nodrop
| parse regex field=Artifacts "(?<Artifact>\{.*?(?=,\{\"sha1\"|\]$))" multi
| json field=Artifact "infected_files", "sha1", "path", "depth", "sha256", "name", "parent_sha", "display_name", "pkg_type" as Files, ArtifactSha, ArtifactPath, ArtifactDepth, ArtifactSha256, ArtifactName, ArtifactParentSha, ArtifactDisplayName, ArtifactPkgType nodrop
| parse regex field=Files "(?<File>\{[^\}]+(?:\}\}|\}))" multi
| json field=File "path", "depth", "sha256", "name", "parent_sha", "display_name", "pkg_type" as ComponentPath, ComponentDepth, ComponentSha, ComponentName, ComponentParentSha, ComponentDisplayName, ComponentPkgType nodrop
| count_distinct(WatchName) as %"Number of Watches"

  • この記事は役に立ちましたか?