JFrog Artifactory のログを収集する
このパーサーは、2 つの異なる JFrog Artifactory ログ形式を処理します。grok パターンを使用して、各形式からフィールドを識別して抽出します。その後、これらのフィールドを UDM にマッピングし、いずれかの形式内の JSON ペイロードを処理し、どちらの形式にも一致しないログを破棄します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- JFrog への特権アクセス権があることを確認します。
JFrog Artifactory ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: JFrog Artifactory Logs)。
- [ソースタイプ] として [Webhook] を選択します。
- [Log type] で [JFrog Artifactory] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
\n
など)。 - アセットの名前空間: アセットの名前空間。
- 取り込みラベル: このフィードのイベントに適用されるラベル。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [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 インスタンスにログインします。
- [管理] > [全般] > [Webhooks] に移動します。
- [+ 新しい 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
- 新しく作成されたパーサー。