Fastly WAF ログを収集する
以下でサポートされています。
Google SecOpsSIEM
概要
このパーサーは、Fastly WAF JSON ログからフィールドを抽出し、変換して名前を変更し、UDM にマッピングします。さまざまなデータ型を処理し、重大度を変換し、利用可能な IP アドレスとホスト名の情報に基づいてイベントを分類します。また、解析エラーの可能性を処理し、形式が正しくないログエントリを破棄します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- WAF 設定を構成するためのアクセス権を持つ Fastly アカウント。
Fastly WAF ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Fastly WAF ログ)。
- [ソースタイプ] として [Webhook] を選択します。
- [ログタイプ] として [Fastly WAF] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
\n
など)。 - アセットの名前空間: アセットの名前空間。
- 取り込みラベル: このフィードのイベントに適用されるラベル。
- 分割区切り文字: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィード設定を確認し、[Submit] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- シークレット キーをコピーして保存します。この秘密鍵を再度表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント 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 Security Operations の認証に使用する API キー。SECRET
: フィードの認証用に生成したシークレット キー。
Fastly で Webhook を構成する
- Fastly にログインします。
- 省略可: [サイト] メニューでサイトを選択します(複数のサイトがある場合)。
- [管理] > [サイト統合] を選択します。
- [サイト統合を追加] をクリックします。
- [汎用 Webhook] を選択します。
- Webhook URL: Google SecOps の ENDPOINT_URL を入力し、その後に API_KEY と SECRET を入力します。
- アラートの配置: [すべてのアクティビティ] または [特定のアクティビティ] を選択します。
- 省略可: [特定のアクティビティ] を選択した場合は、[アクティビティ メニュー] に移動して、Webhook で送信するアクティビティ タイプを選択します。
- [サイト統合を作成] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
anomaly_score |
security_result.detection_fields[].key : 「anomaly」security_result.detection_fields[].value : anomaly_score |
waf.score.anomaly が 0 または空で、anomaly_score が空でないか 0 でない場合、anomaly_score 値を使用して、security_result.detection_fields 配列に「anomaly」キーと anomaly_score フィールドの値が入力されます。 |
cache_status |
additional.fields[].key : "cache_status"additional.fields[].value.string_value : cache_status |
cache_status 値は、additional.fields 配列に「cache_status」というキーと cache_status フィールドの値を入力するために使用されます。 |
client_ip |
principal.ip : client_ip |
client_ip フィールドは principal.ip にマッピングされます。 |
connection.fastly_is_edge |
additional.fields[].key : "fastly_is_edge"additional.fields[].value.bool_value : connection.fastly_is_edge |
connection.fastly_is_edge 値は、additional.fields 配列に「fastly_is_edge」というキーと connection.fastly_is_edge フィールドの値を入力するために使用されます。 |
connection.fastly_is_shield |
additional.fields[].key : "fastly_is_shield"additional.fields[].value.bool_value : connection.fastly_is_shield |
connection.fastly_is_shield 値は、additional.fields 配列に「fastly_is_shield」というキーと connection.fastly_is_shield フィールドの値を入力するために使用されます。 |
connection.request_tls_version |
network.tls.version : connection.request_tls_version |
connection.request_tls_version フィールドは network.tls.version にマッピングされます。 |
fastly.server |
target.hostname : fastly.server |
fastly.server フィールドは target.hostname にマッピングされます。 |
fastly.service_id |
additional.fields[].key : "service_id"additional.fields[].value.string_value : fastly.service_id |
fastly.service_id 値は、additional.fields 配列に「service_id」というキーと fastly.service_id フィールドの値を入力するために使用されます。 |
geo.city |
principal.location.city : geo.city |
geo.city フィールドは principal.location.city にマッピングされます。 |
geo.country |
principal.location.country_or_region : geo.country |
geo.country フィールドは principal.location.country_or_region にマッピングされます。 |
geo.location |
principal.location.region_latitude : geo.location から抽出principal.location.region_longitude : geo.location から抽出 |
緯度と経度は、正規表現を使用して geo.location フィールドから抽出され、それぞれ principal.location.region_latitude と principal.location.region_longitude にマッピングされます。 |
geo.region |
principal.location.state : geo.region |
geo.region フィールドは principal.location.state にマッピングされます。 |
host |
principal.hostname : host |
host フィールドは principal.hostname にマッピングされます。 |
request_headers.accept_charset |
additional.fields[].key : "accept_charset"additional.fields[].value.string_value : request_headers.accept_charset |
request_headers.accept_charset 値は、additional.fields 配列に「accept_charset」というキーと request_headers.accept_charset フィールドの値を入力するために使用されます。 |
request_headers.accept_language |
additional.fields[].key : "accept_language"additional.fields[].value.string_value : request_headers.accept_language |
request_headers.accept_language 値は、additional.fields 配列に「accept_language」というキーと request_headers.accept_language フィールドの値を入力するために使用されます。 |
request_headers.referer |
network.http.referral_url : request_headers.referer |
request_headers.referer フィールドは network.http.referral_url にマッピングされます。 |
request_headers.user_agent |
network.http.user_agent : request_headers.user_agent |
request_headers.user_agent フィールドは network.http.user_agent にマッピングされます。 |
request_id |
metadata.product_log_id : request_id |
request_id フィールドは metadata.product_log_id にマッピングされます。 |
request_method |
network.http.method : request_method |
request_method フィールドは network.http.method にマッピングされます。 |
response_headers.cache_control |
additional.fields[].key : "cache_control"additional.fields[].value.string_value : response_headers.cache_control |
response_headers.cache_control 値は、additional.fields 配列に「cache_control」というキーと response_headers.cache_control フィールドの値を入力するために使用されます。 |
response_headers.content_type |
additional.fields[].key : "content_type"additional.fields[].value.string_value : response_headers.content_type |
response_headers.content_type 値は、additional.fields 配列に「content_type」というキーと response_headers.content_type フィールドの値を入力するために使用されます。 |
response_state |
additional.fields[].key : "response_state"additional.fields[].value.string_value : response_state |
response_state 値は、additional.fields 配列に「response_state」というキーと response_state フィールドの値を入力するために使用されます。 |
response_status |
network.http.response_code : response_status |
status フィールドが空の場合、response_status フィールドは network.http.response_code にマッピングされます。 |
rule_id |
security_result.rule_id : rule_id |
waf.rule_id が空の場合、rule_id 値を使用して security_result.rule_id が入力されます。 |
severity |
waf.severity : severity |
severity フィールドの値が waf.severity にコピーされます。 |
size_bytes.request_header |
network.sent_bytes : size_bytes.request_header |
size_bytes.request_header フィールドは network.sent_bytes にマッピングされます。 |
size_bytes.response_header |
network.received_bytes : size_bytes.response_header |
size_bytes.response_header フィールドは network.received_bytes にマッピングされます。 |
status |
network.http.response_code : status |
status フィールドは network.http.response_code にマッピングされます。 |
timestamp |
metadata.event_timestamp : timestamp |
timestamp フィールドは解析され、metadata.event_timestamp にマッピングされます。 |
url |
target.url : url |
url フィールドは target.url にマッピングされます。 |
waf.blocked |
security_result.action : 派生 |
waf.blocked が false の場合、security_result.action は「ALLOW」に設定されます。waf.blocked が true の場合、security_result.action は「BLOCK」に設定されます。 |
waf.executed |
security_result.detection_fields[].key : 「executed」security_result.detection_fields[].value : waf.executed |
waf.executed 値は、security_result.detection_fields 配列に「executed」というキーと waf.executed フィールドの値を入力するために使用されます。 |
waf.failures |
security_result.detection_fields[].key : "failures"security_result.detection_fields[].value : waf.failures |
waf.failures 値は、security_result.detection_fields 配列に「failures」というキーと waf.failures フィールドの値を入力するために使用されます。 |
waf.logged |
security_result.detection_fields[].key : 「logged」security_result.detection_fields[].value : waf.logged |
waf.logged 値は、security_result.detection_fields 配列に「logged」というキーと waf.logged フィールドの値を入力するために使用されます。 |
waf.message |
metadata.description : waf.message |
waf.message が空でない場合、metadata.description にマッピングされます。 |
waf.rule_id |
security_result.rule_id : waf.rule_id |
waf.rule_id が空でない場合、security_result.rule_id にマッピングされます。 |
waf.score.anomaly |
security_result.detection_fields[].key : 「anomaly」security_result.detection_fields[].value : waf.score.anomaly |
waf.score.anomaly が 0 でないか空でない場合、その値を使用して、security_result.detection_fields 配列に「anomaly」というキーと waf.score.anomaly フィールドの値が設定されます。 |
waf.score.http_violation |
security_result.detection_fields[].key : "http_violation"security_result.detection_fields[].value : waf.score.http_violation |
waf.score.http_violation が 0 でないか空でない場合、その値を使用して security_result.detection_fields 配列が入力されます。 |
waf.score.lfi |
security_result.detection_fields[].key : "lfi"security_result.detection_fields[].value : waf.score.lfi |
waf.score.http_violation と同じロジックです。 |
waf.score.php_injection |
security_result.detection_fields[].key : "php_injection"security_result.detection_fields[].value : waf.score.php_injection |
waf.score.http_violation と同じロジックです。 |
waf.score.rce |
security_result.detection_fields[].key : "rce"security_result.detection_fields[].value : waf.score.rce |
waf.score.http_violation と同じロジックです。 |
waf.score.rfi |
security_result.detection_fields[].key : "rfi"security_result.detection_fields[].value : waf.score.rfi |
waf.score.http_violation と同じロジックです。 |
waf.score.session_fixation |
security_result.detection_fields[].key : "session_fixation"security_result.detection_fields[].value : waf.score.session_fixation |
waf.score.http_violation と同じロジックです。 |
waf.score.sql_injection |
security_result.detection_fields[].key : "sql_injection"security_result.detection_fields[].value : waf.score.sql_injection |
waf.score.http_violation と同じロジックです。 |
waf.score.xss |
security_result.detection_fields[].key : "xss"security_result.detection_fields[].value : waf.score.xss |
waf.score.http_violation と同じロジックです。 |
waf.severity |
security_result.severity : 派生security_result.severity_details : waf.severity |
waf.severity が空でない場合、範囲(3 以下: 高、3 ~ 6: 中、6 ~ 8: 低、それ以外: UNKNOWN_SEVERITY)に基づいて security_result.severity の値が決定されます。元の waf.severity 値も security_result.severity_details にマッピングされます。 |
waf_message |
metadata.description : waf_message |
waf.message が空で、waf_message が空でない場合、metadata.description にマッピングされます。client_ip または host と fastly.server が空でない場合、metadata.event_type は「NETWORK_HTTP」に設定されます。client_ip または host が空でない場合、metadata.event_type は「STATUS_UPDATE」に設定されます。それ以外の場合は、「GENERIC_EVENT」に設定されます。ハードコードされた値。ハードコードされた値。ハードコードされた値。 |
変更点
2022-06-06
- 新しく作成されたパーサー。