Cloudflare の Logpush 出力先に Secureworks Taegis XDR を設定する

# 目的
Secureworks のドキュメントが 2024 年 10 月 10 日に更新されたので、Cloudflare の Logpush 出力先に Secureworks Taegis XDR を設定します。

https://docs.ctpx.secureworks.com/release/notes/

>Secureworks® Taegis™ XDR 3.6.1 ⫘
Thursday, October 10th, 2024
>
>Docs
Cloudflare Integration Guide Updated
Additional guidance has been added to the [Cloudflare Integration Guide](https://docs.ctpx.secureworks.com/integration/connectCloud/cloudflare/) to make configuration easier.

少し前にリリースのあった HTTP インジェストを活用した設定をおこないます。

>Secureworks® Taegis™ XDR 3.4.13 ⫘
Thursday, August 8th, 2024
>
>New Transport Methods Available ⫘
Two new transport methods that can be used for custom data source integrations are now available: [HTTP Ingest](https://docs.ctpx.secureworks.com/integration/http_ingest_overview/)

Amazon S3 を経由させたログ連携も可能ですが、HTTP インジェストの場合は Amazon S3 が不要です。

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/adfab611-7c38-24f9-3708-d0b7662955f5.png)

```mermaid:
graph LR

subgraph Cloudflare
    Logpush
end

subgraph Secureworks
    Taegis[Taegis XDR]
end

Logpush --> |HTTP Ingest|Taegis
```

# 対応している Logpush データセット
以下のドキュメントで確認できます。

https://docs.ctpx.secureworks.com/integration/connectCloud/cloudflare/

> CDN datasets
> - [Firewall events](https://developers.cloudflare.com/logs/reference/log-fields/zone/firewall_events/)
> - [HTTP requests](https://developers.cloudflare.com/logs/reference/log-fields/zone/http_requests/)
>
> Zero Trust datasets
> - [Gateway DNS](https://developers.cloudflare.com/logs/reference/log-fields/account/gateway_dns/)
> - [Gateway HTTP](https://developers.cloudflare.com/logs/reference/log-fields/account/gateway_http/)
> - [Gateway Network](https://developers.cloudflare.com/logs/reference/log-fields/account/gateway_network/)
> - [Audit logs](https://developers.cloudflare.com/logs/reference/log-fields/account/audit_logs/)
> - [Access requests](https://developers.cloudflare.com/logs/reference/log-fields/account/access_requests/)
> - [CASB Findings](https://developers.cloudflare.com/logs/reference/log-fields/account/casb_findings/)
> - [Device posture results](https://developers.cloudflare.com/logs/reference/log-fields/account/device_posture_results/)
> - [Zero Trust Network Session Logs](https://developers.cloudflare.com/logs/reference/log-fields/account/zero_trust_network_sessions/)

# Secureworks Taegis XDR で HTTP インジェストを設定
以下のドキュメントに従って設定します。

https://docs.ctpx.secureworks.com/integration/connectCloud/http_ingest/

インテグレーション > クラウド API から「HTTP インジェスト」を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/3aec9704-f6d7-5617-ed4c-6d7bb3e08465.png)

任意の名前を設定して、完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/30706bac-0f7c-29ad-3b3f-0984cd84f36a.png)

Cloudflare Logpush の出力先となる「URL」と認証に必要な「連携キー」が発行されるので、保存して次のステップで使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/1a449016-c894-bf30-e21e-63d1f69b2cc1.png)

上記手順を Logpush したいデータセットごとにおこないます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/51ad5ae5-80a0-e9b3-4ecd-86b2feedda93.png)

# Cloudflare で Logpush を設定
以下のドキュメントに従って設定します。

https://developers.cloudflare.com/logs/get-started/enable-destinations/http/

アカウントレベルまたはゾーンレベルのデータセットごとに以下のリンク先から設定します。

https://dash.cloudflare.com/?to=/:account/logs

https://dash.cloudflare.com/?to=/:account/:zone/analytics/logs

Logpush > Create a Logpush job から HTTP destination を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/5c4ae677-3e06-b05c-b6bd-578e5c6dcd39.png)
 

「URL」と「連携キー」を使って、以下のような宛先を設定します。

- 「URL」+ `?header_Authorization=Bearer%20` + 「連携キー」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/3b0caf28-b255-f86d-3311-03013db140cf.png)

その後、データセット・フィールド等を選択して完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a2a96cb1-7a9a-2d2c-5ad1-680fa38d4ee1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/66d85872-1c5c-9705-0988-048fd95de2b6.png)

## 参考：API で Logpush を設定
API を使っても Logpush を設定できます。

```shell:account_level_datasets
# ACCOUNT LEVEL DATASET 
 
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
 
export INGESTION_URL=''
export INGESTION_KEY=''

# 全フィールドを指定
export FIELDS=$(curl -s \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/logpush/datasets/$DATASET/fields" | jq -r '.result | keys | join(",")')
echo $FIELDS

# Logpush ジョブを作成
curl -s "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/logpush/jobs" -X POST -d '
{                                             
  "name": "secureworks-http-'${DATASET//_/-}'",                                  
  "logpull_options": "fields='$FIELDS'",
  "destination_conf": "'$INGESTION_URL'?header_Authorization=Bearer%20'$INGESTION_KEY'&tags=dataset:'$DATASET'",
  "max_upload_bytes": 5000000,
  "max_upload_records": 1000,
  "dataset": "'$DATASET'",
  "enabled": true
}' \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" | jq

```

```shell:zone_level_datasets
# ZONE LEVEL DATASET
export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ZONE_ID='YOUR_ZONE_ID'

export INGESTION_URL=''
export INGESTION_KEY=''

# 全フィールドを指定
export FIELDS=$(curl -s \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/datasets/$DATASET/fields" | jq -r '.result | keys | join(",")')
echo $FIELDS

# Logpush ジョブを作成
curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" -X POST -d '
{                                             
  "name": "secureworks-http-'${DATASET//_/-}'",                                  
  "logpull_options": "fields='$FIELDS'",
  "destination_conf": "'$INGESTION_URL'?header_Authorization=Bearer%20'$INGESTION_KEY'&tags=dataset:'$DATASET'",
  "max_upload_bytes": 5000000,
  "max_upload_records": 1000,
  "dataset": "'$DATASET'",
  "enabled": true
}' \
-H "X-Auth-Email: $EMAIL" \
-H "X-Auth-Key: $APIKEY" | jq
```

## 参考：GraphQL API から Logpush Health を確認する
Logpush ジョブ設定後に、Health 状態を確認したい場合、GraphQL API から `logpushHealthAdaptiveGroups` のデータを確認できます。

https://qiita.com/khayama/items/1738c3b98e9c4108a35d

ジョブ ID `XXXXXX` は、Logpush ジョブの編集時の URL から確認できます。

- `https://dash.cloudflare.com/?to=/:account/logs/edit/XXXXXX`
- `https://dash.cloudflare.com/?to=/:account/:zone/analytics/logs/edit/XXXXXX`

```shell:account_level_datasets
export GQL_ENDPOINT='https://api.cloudflare.com/client/v4/graphql'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
export JOB_ID='YOUR_JOB_ID'

http -A creds $GQL_ENDPOINT query='query
{
  viewer {
    accounts(filter: {accountTag: "'$ACCOUNT_ID'"}) {
      logpushHealthAdaptiveGroups (limit:1000,filter:{date_geq:"2024-10-01",date_lt:"2024-10-31",jobId:'$JOB_ID', status_lt:300, final:1}) {
        sum {
          bytes
          bytesCompressed
          records
        }
        count
        dimensions {
          date
        }
      }
    }
  }
}
' | jq -r
```

```shell:zone_level_datasets
export GQL_ENDPOINT='https://api.cloudflare.com/client/v4/graphql'
export ZONE_ID='YOUR_ZONE_ID'
export JOB_ID='YOUR_JOB_ID'

http -A creds $GQL_ENDPOINT query='query
{
  viewer {
    zones(filter: {zoneTag: "'$ZONE_ID'"}) {
      logpushHealthAdaptiveGroups (limit:1000,filter:{date_geq:"2024-10-01",date_lt:"2024-10-31",jobId:'$JOB_ID', status_lt:300, final:1}) {
        sum {
          bytes
          bytesCompressed
          records
        }
        count
        dimensions {
          date
        }
      }
    }
  }
}
' | jq -r
```

以下のようなデータが確認できます。

```json:logpushHealth_result.json
{
  "data": {
    "viewer": {
      "accounts": [
        {
          "logpushHealthAdaptiveGroups": [
            {
              "count": 7,
              "dimensions": {
                "date": "2024-10-30"
              },
              "sum": {
                "bytes": 265814,
                "bytesCompressed": 12848,
                "records": 289
              }
            }
          ]
        }
      ]
    }
  },
  "errors": null
}
```

# Secureworks Taegis XDR アラート確認
ログ連携がおこなわれることで、Secureworks Taegis XDR で脅威スコアが付与されたアラート等を確認して、ログ監視運用に活用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/47cd5527-8676-a694-4075-146b80a8f7e7.png)

# まとめ

Cloudflare では、エンタープライズ顧客に対して Logpush 機能を提供していますが、構成の自由度が高く、連携も幅広いです。

費用を気にせず、好きなだけログを出せる環境が提供されることを活かして、様々なデータセットを連携することができます。

今後も Cloudflare 製品の他のデータセットに対応することも期待されます。