IBM Security Verify API で イベントログを抽出するためのオプションあれこれ

# はじめに
以下の記事でイベントログのダウンロード方法についてご紹介しました。
今回はEventsAPI実行時に指定できるオプションについてご紹介します。

IBM Security Verify API で イベントログをダウンロードする
https://qiita.com/fitz/items/4f8731c8a91ffe632b49

# APIのリファレンス
APIのリファレンスは、以下のURLから確認できます。
https://<自分のテナント名＞.verify.ibm.com/developer/explorer/#

- ユーザーの取得に利用するAPIは、以下の項目になります。
    - Events 

|![event1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/8ac8e6d2-c788-0fcb-5851-aad39099b6b2.png)
|:--|

# 1.指定できるオプションについて

|オプション  |説明  |デフォルト値  |
|---|---|---|
|all_events  |すべてのイベントを取得する。 yes/noで指定。 |no  |
|event_type  |取得するイベントの種類を指定。 例) event_type=\"authentication\",\"management\",\"sso\",\"token\",\"fulfillment\",\"adaptive_risk\",\"cert_campaign\",\"access_request\",\"account_sync\",\"privacy_consent\" |指定しない場合、management, sso ,authenticationイベントタイプが含まれる |
|size  |取得するイベントの件数。最大10000  |50件  |
|from  |取得するイベントの下限日時 。ユニックス・エポック・タイム(ミリ秒) で指定。例)2021/06/01 00:00:00を指定したい場合は、1622473200000 を指定する。 |24時間前  |
|to  |取得するイベントの上限日時。ユニックス・エポック・タイム(ミリ秒) で指定 |現在時刻  |
|sort_order  |ソート順。 desc/ascで指定。 |desc(降順)  |
|after_id  |前回検索した続きのログを検索するために指定するID |最初のイベントのID  |
|after_time  |前回検索した続きのログを検索するために指定する時刻 |最初のイベントが発生した時刻 |



# 2.オプションの利用例

##2.1. 24時間以内に出力されたすべての種類のログを、最大10000件抽出する。

```
curl -X GET https://<テナント名＞.verify.ibm.com/v1.0/events&all_events=yes&size=10000 --header "Authorization: Bearer <アクセストークン>"
```

##2.2. 2021/05/01 00:00:00 (1619794800000）以降で、イベントタイプ Authentication のログを最大10000件抽出する。

```
curl -X GET https://<テナント名＞.verify.ibm.com/v1.0/events?event_type="authentication"&range_type=time&from=1619794800000&size=10000 --header "Authorization: Bearer <アクセストークン>"
```


##2.3. 前回の検索結果の続きのログを抽出する。

たとえば、以下の条件で1000件ログを取得します。

```
curl -X GET https://<テナント名＞.verify.ibm.com/v1.0/events?events?all_events=yes&range_type=time&from=1580947200000&size=1000 --header "Authorization: Bearer <アクセストークン>"
```

検索結果の冒頭の記録をみると、"total_events": 2375とあり、1000件では抽出できていない残りのログがあることがわかります。

```
{
    "response": {
        "events": {
            "search_after": {
                "total_events": 2375,
                "max_size_limit": "false",
                "id": "edb88048-417d-4eb3-ac85-be8cfadfa6ad",
                "time": "1606977260205",
                "range_type": "time"
            },
            "events": [
                {
                    "geoip": {
                        "continent_name": "Asia",
                        "city_name": "Tokyo",
                        "country_iso_code": "JP",
                        "country_name": "Japan",
                        "region_name": "Tokyo",
```

この残りのログを抽出するためには、"id": "edb88048-417d-4eb3-ac85-be8cfadfa6ad"、"time": "1606977260205"のデータを、それぞれafter_id/after_timeに指定して次のように検索を行います。

```
curl -X GET https://<テナント名＞.verify.ibm.com/v1.0/events?events?all_events=yes&range_type=time&from=1580947200000&size=1000&after_id=edb88048-417d-4eb3-ac85-be8cfadfa6ad&after_time=1606977260205 --header "Authorization: Bearer <アクセストークン>"
```

1000件ずつ抽出しているため、4回目には抽出対象のログがなくなります。
4回目の結果は以下のようになりました。

```
{
    "response": {
        "events": {
            "search_after": {
                "total_events": 2375,
                "max_size_limit": "false",
                "range_type": "time"
            },
            "events": []
        }
    },
    "success": true
}
```

ログの抽出には、1回あたり10000イベントという制約があります。
after_id/after_timeを利用し、繰り返すことですべてのログをダウンロードすることができます。

# 最後に

今回はイベントログの抽出するときのオプションをご紹介しました。