JFrog Artifactory のログを収集する
このパーサーは、2 つの異なる JFrog Artifactory ログ形式を処理します。Grok パターンを使用して、各形式からフィールドを識別して抽出します。その後、これらのフィールドを UDM にマッピングし、いずれかの形式内の JSON ペイロードを処理し、どちらの形式にも一致しないログを破棄します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- JFrog への特権アクセス権があることを確認します。
JFrog Artifactory のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: JFrog Artifactory Logs)。
- [Source type] として [Webhook] を選択します。
- [Log type] として [JFrog Artifactory] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(
\n
など)。 - Asset namespace: アセットの名前空間。
- Ingestion labels: このフィードからのイベントに適用されるラベル。
- Split delimiter: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、その場合以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。 このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
- [完了] をクリックします。
Webhook フィード用の API キーを作成する
[Google Cloud コンソール] > [認証情報] に移動します。
[認証情報を作成] をクリックして [API キー] を選択します。
API キーのアクセスを Google Security Operations API に制限します。
エンドポイント URL を指定する
- クライアント アプリケーション内で、Webhook フィードで提供される HTTPS エンドポイント URL を指定します。
次の形式でカスタム ヘッダーの一部として API キーと秘密鍵を指定して、認証を有効にします。
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
推奨事項: API キーは URL 内で指定するのではなくヘッダーとして指定してください。
Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーと秘密鍵を指定できます。
ENDPOINT_URL?key=API_KEY&secret=SECRET
以下を置き換えます。
ENDPOINT_URL
: フィードのエンドポイント URL。API_KEY
: Google SecOps に対する認証に使用する API キー。SECRET
: フィードの認証用に生成した秘密鍵。
JFrog Artifactory で Webhook を作成し、Google SecOps にデータを送信する
- 管理者の認証情報を使用して JFrog インスタンスにログインします。
- [管理] > [全般] > [Webhook] に移動します。
- [+ 新しい Webhook] をクリックします。
次の webhook 設定を構成します。
- Webhook Key: わかりやすい名前を指定します(例: Google SecOps)。
URL: Google SecOps API エンドポイントの
<ENDPOINT_URL>
を入力します。イベント: Webhook をトリガーする Artifactory イベントを選択し、セキュリティ モニタリングのニーズに関連するイベントを選択します(デプロイ、ダウンロード、削除など)。
ドメイン: 仮想リポジトリを使用している場合は、該当するドメインを選択します。それ以外の場合は、このフィールドを [Any Local] のままにします。
リポジトリ: 特定のリポジトリを選択するか、要件に応じて [任意のリモート] または [任意のローカル] のままにします。
[テスト] をクリックすると、テストイベントが Google SecOps に送信されます。
[保存] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
操作 | read_only_udm.metadata.product_event_type |
未加工ログの action の値は小文字に変換されてマッピングされます。 |
datetime | read_only_udm.metadata.event_timestamp |
未加工ログの datetime フィールドが解析され、タイムスタンプに変換されます。 |
hostname | read_only_udm.principal.hostname |
未加工ログの hostname フィールドから直接マッピングされます。 |
id | read_only_udm.metadata.product_log_id |
未加工ログの id フィールド(JSON ペイロードから)から直接マッピングされます。 |
ip | read_only_udm.principal.ip |
未加工ログの ip フィールドから直接マッピングされます。「USER_RESOURCE_ACCESS」にハードコードされています。「JFROG_ARTIFACTORY」にハードコードされています。「Artifactory」にハードコードされています。「JFROG」にハードコードされています。 |
owner | read_only_udm.principal.user.userid |
未加工のログ(JSON ペイロードから)に username がない場合、マッピングされます。 |
repo_name | read_only_udm.target.resource.name |
未加工ログの repo_name フィールドから直接マッピングされます。 |
repo_type | read_only_udm.target.resource.resource_subtype |
未加工ログの repo_type フィールドから直接マッピングされます。 |
scope | read_only_udm.target.resource.name |
未加工ログの scope フィールド(JSON ペイロード)から直接マッピングされます。 |
scope | read_only_udm.target.resource.resource_subtype |
未加工ログに scope が存在する場合は「scope」にハードコードされます。 |
sequenceId | read_only_udm.metadata.product_log_id |
sequenceId フィールドから引用符が削除された後、マッピングされます。 |
subject | read_only_udm.about.labels.key |
未加工ログに subject が存在する場合は「subject」にハードコードされます。 |
subject | read_only_udm.about.labels.value |
未加工ログの subject フィールド(JSON ペイロードから)から直接マッピングされます。 |
type | read_only_udm.metadata.product_event_type |
未加工ログの type フィールド(JSON ペイロードから)から直接マッピングされます。 |
ユーザー | read_only_udm.principal.user.userid |
未加工ログの user フィールドから直接マッピングされます。 |
username | read_only_udm.principal.user.userid |
未加工ログの username フィールド(JSON ペイロードから)から直接マッピングされます。 |
変更点
2024-09-23
- 機能拡張
- 未解析ログの解析サポートを追加しました。
- 「target_ip」を「target.ip」と「target.asset.ip」にマッピングしました。
- 「desc」を「metadata.description」にマッピングしました。
- 「method」を「network.http.method」にマッピングしました。
- 「url」を「target.url」にマッピングしました。
- 「prin_url」を「principal.url」にマッピングしました。
- 「response_code」を「network.http.response_code」にマッピングしました。
- 「RequestMethod」を「network.http.method」にマッピングしました。
- 「RequestPath」を「target.url」にマッピングしました。
- 「DownstreamContentSize」と「DownstreamStatus」を「Additional.Fields」にマッピングしました。
- 「ServiceAddr」を「principal.hostname」と「principal.port」にマッピングしました。
- 「ClientAddr」を「target.ip」と「target.port」にマッピングしました。
- 「user_agent」を「network.http.user_agent」にマッピングしました。
- 「level」を「security_result.severity」にマッピングしました。
- 「msg」を「security_result.description」にマッピングしました。
- 「protocol」を「network.application_protocol」にマッピングしました。
2023-08-25
- 新しく作成されたパーサー。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。