【IBM Cloud】IBM Cloudでの監査ログの取得方法（Activity Tracker Event Routing）

## はじめに
2024年6月頃、IBM Cloudでは既存の監視ツールであるActivity Trackerの後継サービスであるIBM Cloud LogsをFrankfurtとMadridリージョンにGAし、2024年9月にはTokyoとOsakaリージョンでGAされました。
そのため、 今までのActivity Trackerインスタンスではなく、新たなCloud LogsおよびActivity Tracker Event Routingを使って監査ログを取得する方法を整理しました。

## Cloud Logsとは？
IBM Cloud内外のシステムや、アプリケーションのログデータ・監査イベントの収集、管理ができます。
Activity Tracker Event Routingを使って監査ログをこのCloud Logsに転送、収集、表示させることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1396951/ec9c954e-d67e-7780-e67a-43e630b0e8d6.png)

**特長**
* アプリやサービスのログ・監査イベントを一元的に保管・分析できる
* 重要度に応じてログを効率的に管理・利用できる
* ログの分析・構造化により検索・フィルター・分析が容易に
* カスタマイズ可能なダッシュボードテンプレート
* クエリ言語（Lucene、SQL、DataPrime）を利用したログの抽出が可能
* ICOS(Object Storage)を利用したログの保管
* Event Notificationsと連携し、重要なイベントやエラーのアラート通知が可能
* Priority insights のログ・データ保管期間は7, 14，30, 60, 90日から選択可能

## Activity Tracker Event Routingとは？
![スクリーンショット 2024-10-02 17.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/a0aed6e1-d227-e60d-e59d-3223b5b24bee.png)
Cloud LogsではプラットフォームログやAgentからのログをルーティングする`Logs Routing`と監査イベントをルーティングする`Event Routing`の２種類があり、今回は前述の通り後者のEvent Routingについて整理しています。

繰り返しとなりますが、Event Routingとは、IBM Cloudサービスからの監査イベントを特定のインスタンス（Cloud Logs、Activity Trackerなど）に送信できるように設定する機能です。これによって、複数リージョンから発生するログを一つのインスタンスに集約することができます。

Activity Tracker Event Routingを介して管理できるイベントを生成するIBM Cloudサービスは、[IBM Cloud services that generate events that are managed through Activity Tracker Event Routing](https://cloud.ibm.com/docs/atracker?topic=atracker-cloud_services_atracker)に記載されていますのでご参考ください。

### 【補足】Activity Trackerは別物！
IBM Cloud Activity Trackerは、IBM Cloudでの作業の監査を行うためのサービスです。例えば、ユーザーを作成したとか、新しく設定を追加した、などの作業に対してAPIでの操作やポータルからの操作を問わず、履歴を残すことが可能です。これにより、不正な行為が行われていないかどかを確認することができます。
Activity Trackerについての概要は[こちら](https://qiita.com/testnin2/items/f2ddd6f502be6cb8599e)の記事に詳しく紹介されていますのでご参考ください。

:::note warn
Activity Trackerは2025年3月30日でEOSされる予定です。
そのため、EOSまでに既存インスタンスのマイグレーションが必要となりますので、ご注意ください。
:::

:::note
Activity Tracker Event RoutingはEOSにはなりません。
監査イベントを監視サービスへ転送するために、本記事の設定が必要です。
:::

:::note
![スクリーンショット 2025-02-04 16.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/934bb085-731c-a5f1-9dff-58d42ecf348d.png)
Logs Routingとは、プラットフォームログや、Agentからのログを指定したCloud LogsやIBM Cloud Log Analysisにルーティング可能です。
詳しい設定の流れについては、[こちら](https://qiita.com/Sungyun_Moon/items/1a51879fd2fd478ec84d)の記事をご参考ください。
:::

## 構成手順
### 前提条件
今回の検証には以下を前提としています。
- IBM Cloudの[アカウント](https://cloud.ibm.com/docs/account?topic=account-accounts)（無料利用可能）を持っている。
- サービス間許可（S2S許可）がされていて（Event Routingだけではなく、Log Routingにも必要になります）、その際のアクセス権限付与対象に「すべてのリソース」を設定するため、管理者権限に近い権限が付与されている。
    - 詳細は本文に補足

### 全体的な構成の流れ（概要）
今回の監査ログ取得のためには、大きく以下の流れで操作します。
以下の内容は[IBM Cloud Logsをターゲットとして設定する](https://cloud.ibm.com/docs/atracker?topic=atracker-getting-started-target-cloud-logs)を参考に作成しています。

①　各インスタンスの作成（Object Storage、Cloud Logs）
②　作成したインスタンス間の接続のためのサービス間許可（S2S許可）の構成
③　監査ログを収集するためのターゲット（送信元、送信先）の設定
④　結果確認

監査ログを取得するために必要となるCloud Logsのインスタンスとイベント・ログデータの永続化のための保管ストレージとして必要なObject Storage（ICOS）インスタンスを作成します。その後、Cloud LogsとICOS間の接続のために、アクセス権限を付与するサービス間許可設定を行います。最後にターゲットとして予め作成した各インスタンスを指定して接続を完了し、結果を確認します。
![スクリーンショット 2025-01-20 18.41.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/6cac06b7-4087-35be-bf1f-abac77f9c0ef.png)


その詳細は以下に記載しています。

### IBM Cloud Object Storage（ICOS）のインスタンス作成
まずは上記の通り、ログデータの永続化のためには保管ストレージとしてICOSが必要であるため、ICOSインスタンスを作成します。（今回はICOSから作成していますが、後に記載したCloud Logsインスタンスの作成手順から行っても問題ございません）
ICOS画面にて`インスタンスの作成`をクリックします。
![スクリーンショット 2024-07-11 17.19.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/f3e791d5-e4fa-6b8c-1f63-033a7e838412.png)
インフラの選択やインスタンス名、リソースグループなどの設定を行ってインスタンスを作成します。
![FireShot Capture 008 - Cloud Object Storage - IBM Cloud - cloud.ibm.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/ae4d4473-d2b4-1911-008c-c37102528c80.png)

ICOSのインスタンスが作成されたら、次は「バケット」を作成します。
「バケット」とは、インタンス内で実際ログデータが保管される論理的区域であり、名前通りデータを入れておく箱のようなものとなります。

まずは`バケットの作成`をクリックします。
![スクリーンショット 2024-07-11 17.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/8955139f-37aa-e773-3e8d-3c9acaea3840.png)

Quick Startテンプレートを含め、複数のテンプレートが用意されていますが、今回はカスタムテンプレートにて作成しました。
![スクリーンショット 2024-07-11 17.21.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/d89934ba-8432-f7b3-b307-fb1963f15dbe.png)

バケット名や可用性の設定、リージョン、Storage Tierなどを設定し、バケットを作成します。こちらの設定はバケット作成後には変更ができませんのでご注意ください。
なお、今回の検証を実施した際にはアカウントの制限上、`フランクフルト（eu-de）`リージョンで作成していますが、必要に応じて国内リージョンを含めロケーションを選択ください。
![FireShot Capture 009 - Cloud Object Storage - IBM Cloud - cloud.ibm.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/3900cd59-cdd1-4615-1ef6-2a9ed6542f16.png)

### Cloud Logsのインスタンス作成
次はログデータを集約するためのCloud Logsのインスタンスを作成します。（上記の通りICOSインスタンス作成との順番は前後して問題ございません）

コンソールでロギングインスタンスにアクセスすると、既存のLog Analysisに加え、Cloud Logsのカテゴリーが新たに表示されています。ここで`作成`をクリックします。
![スクリーンショット 2024-07-11 17.04.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/c9088c77-3f44-b304-a498-4cd844f1fae7.png)

また、リージョンはICOSと同様にフランクフルトに設定し、7日間の保管で作成しています。こちらの設定はご用件に応じて適宜h可能です。
![FireShot Capture 002 - Cloud Logs - IBM Cloud - cloud.ibm.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/d77dc402-25ad-5bf3-e59c-84cd62bc3c02.png)
![スクリーンショット 2024-07-11 17.13.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/26718c07-d337-c531-ab4a-8e7f63d8ebf0.png)

### Cloud LogsとICOSを接続
ICOSのバケットが作成されたら、Cloud Logsからのログデータを永続的に保管するためにCloud LogsとICOSを間でマウントさせる必要があります。
Cloud Logsインスタンスのストレージタブに入って`メトリック・データ`→`接続`にて、使用するICOSのバケットとマウントします。なお、項目の`ログ・データ`はLog Analysisからのログを接続する項目となり、今回は使用しません。
![スクリーンショット 2024-10-02 17.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/728bf24e-32fc-5d98-a884-a8b72b068fb6.png)

こちらの段階ではS2S許可が前提となります。もしS2S許可前の場合、`サービス許可が必要です`という画面が表示されるケースがありますが、`今すぐ許可`をクリックするとインスタンスが表示されます。
![スクリーンショット 2025-01-20 11.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/42004bc6-d353-d66e-fdcd-8187adb5fbb0.png)

先ほど作成したICOSのインスタンスを検索し、使用するバケットを選択して接続します。
![スクリーンショット 2024-07-11 17.52.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/8d6adb01-3df3-2de9-2aed-20f8c3067db4.png)

#### 【補足】S2S許可の流れ
上記の手順の通りICOSバケットを接続する際に許可を行うことも可能ですが、IBM Cloud IAMにて直接許可設定を行うことも可能です。詳しくは、[S2Sを作成して IBM Cloud Logsにバケットへのアクセスを許可する](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-iam-service-auth-cos&interface=ui)をご参照ください。

まず、IBM Cloudコンソールにて、`管理`→`IAM`をクリックします。
![スクリーンショット 2025-01-20 17.14.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/9db68783-a465-76dc-7c2d-ac36560591a6.png)

IAMの画面が表示されたら、`許可`カテゴリーをクリックします。
![スクリーンショット 2025-01-20 17.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/491a54d4-2a0d-7044-3c38-7ee54557b19d.png)

許可画面が表示されたら、アクセス権限を付与するために`作成`ボタンをクリックします。
![スクリーンショット 2025-01-20 17.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/bf3c48a3-df9f-79fc-401d-300b140a0261.png)

サービス許可を付与する画面が表示されたら、まずはソースの設定を行います。アクセス権限を付与するソース・アカウントを選択し、`次へ`をクリックします。
![スクリーンショット 2025-01-20 17.14.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/efb3a3aa-c6af-a3a1-8061-d3d1e3dcc5d8.png)

次はソース・サービスを選択しますが、検索欄にて`Cloud Logs`を検索し選択します。その後、`次へ`をクリックします。
![スクリーンショット 2025-01-20 17.23.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/1217ffb3-c629-0852-011d-d66affb0a2d5.png)

その後、アクセス権限の範囲を指定するソース・リソースを選択しますが、前提条件に記載した通り、`すべてのリソース`を選択し`次へ`をクリックします。これで各ソース設定は完了です。
![スクリーンショット 2025-01-20 17.25.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/7073e608-6ed7-f1ee-010b-4b7f3ecd4500.png)

次はターゲットを選択します。
ソースとして設定したCloud Logsからアクセスできるターゲットインスタンス（今回は前提の通りICOSになります）を選択するため、`Object Storage`を検索して選択します。その後`次へ`をクリックします。
![スクリーンショット 2025-01-20 17.15.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/1c494565-690d-4785-77af-28c18fc39063.png)

ソース・リソースと同様、ターゲット・リソースも`すべてのリソース`を選択し`次へ`をクリックします。
![スクリーンショット 2025-01-20 17.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/dff6ec9d-ebdd-96cf-ecd8-cd7e1215bb6a.png)

最後にアクセス権限のレベルである「役割」を選択しますが、ここではリソース作成や編集が可能な管理者権限レベルの権限が必要です。今回はWriter権限を付与しています。役割を選択した後に`レビュー`をクリックします。
![スクリーンショット 2025-01-20 17.16.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/493cec45-c713-1658-fa47-221b9262c82f.png)

設定したソースとターゲットの許可を確認し、問題なければ`許可`ボタンにてアクセス権限を付与します。
![スクリーンショット 2025-01-20 17.17.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/cf73fb83-a393-33b3-f86d-da619075dca7.png)

Cloud LogsとICOSのS2S許可の設定は以上です。

上記と同じ流れでActivity Tracker Event RoutingとCloud LogsのS2S許可も必要です。
詳しい流れは[IBM Cloud Logsにデータを送信するアクセス権IBM Cloud Activity Tracker Event Routingに付与する S2Sを作成する](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-iam-service-auth-atracker&interface=ui)をご参照ください。

ソースは`Activity Tracker Event Routing`、ターゲットは`Cloud Logs`を選択し、`許可`をクリックすることで、Activity Tracker Event RoutingとCloud LogsのS2S許可設定は完了です。
![スクリーンショット 2025-01-20 18.11.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/10617bd6-2b77-e2e5-92f5-5ea63bbcad69.png)

### Activity Tracker Event Routingの設定
Activity Tracker Event RoutingとCloud LogsのS2S許可設定が完了したら、次は監査イベントの宛先や経路を設定します。

左メニューにあるActivity Trackerの「ルーティング」カテゴリーにアクセスします。
![スクリーンショット 2024-07-23 16.15.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/f8b625f6-4e22-dc39-5f99-a34fda384dca.png)

`経路`タブにて、監査イベントを収集するアカウント内インスタンスを指定するため、`作成`ボタンにて経路を作成します。
![スクリーンショット 2024-07-23 17.28.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/bfac4ea5-d1ed-c568-3602-bafbd7bc876e.png)

次に、経路のルート名やルーティング・ルールの送信元とターゲットなどを設定します。
送信元として、ワイルドカード、あるいはロケーションが選択できます。
ロケーションにはプラットフォーム・イベント（グローバル）かロケーション・ベースイベントを選択することができます。

::: note
グローバルイベントとは、IAM設定・ポータル操作やICOSなどの特定のサービスを起因としたイベント監査ログです。
グローバルイベントを生成するサービスについて、詳しくは以下Docsを参照ください。
[IBM Cloud docs: グローバル・イベント](https://cloud.ibm.com/docs/atracker?topic=atracker-event_types&locale=ja#event_types_global)

ロケーション・ベースのイベントは、IBM Cloud データ・センターの特定のロケーション (ダラスやフランクフルトなど) 内でホストされている IBM サービスによってアカウント内でアクティビティーが生成されたことを報告するものです。
ロケーション・ベースのイベントについて、以下Docsを参照ください。
[IBM Cloud docs: ロケーション・ベースのイベント](https://cloud.ibm.com/docs/activity-tracker?topic=activity-tracker-event_types&locale=ja#event_types_location)
:::

ターゲットは監査イベントの使い方によって[複数のタイプのターゲット](https://cloud.ibm.com/docs/atracker?topic=atracker-about)を選択することができますが、今回はCloud Logsに表示させるための設定となるため、そのままCloud Logsを選択しています。
![スクリーンショット 2024-07-23 17.28.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/c00b7bec-077a-b2a6-5438-822652109495.png)
![スクリーンショット 2025-01-17 13.30.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/da396591-d579-5ee2-5854-c263ddd41080.png)

今回はグローバルイベント、ロケーションイベントを合わせた全てのログとして、`ワイルドカード`を選択しています。
![スクリーンショット 2024-07-23 17.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/5d3419dc-bd02-94a0-2652-b0fa50dd9097.png)


また、`ターゲット`タブにて監査イベントの収集場所を設定します。
`作成`ボタンにてターゲットを作成することができますが、タイプとしてはCloud LogsやObject Storageのインスタンスなどを選択することができますので適宜設定します。
今回はCloud Logsに表示させるため、予め作成したCloud Logsインスタンスを設定しています。
![スクリーンショット 2024-07-23 17.24.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/36db1480-5f0d-8982-de0b-17a2e3f2bd2d.png)
![スクリーンショット 2024-07-23 17.25.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/2005c489-6794-a6fe-da2a-3a249f7a58da.png)

### イベント・ログの確認
マイグレーション実行から少し時間が経ったら、最初デプロイしてCloud LogsとマウントしたICOSのバケットにデータが入ってきていることがわかります。
![FireShot Capture 010 - Cloud Object Storage - IBM Cloud - cloud.ibm.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/5a663588-3603-cab0-c728-fde02906e262.png)
また、Cloud Logsのダッシュボードを確認したら、デプロイした時間からのイベント・ログが記録されていることがわかります。
![スクリーンショット 2024-07-11 20.38.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/89adec1b-dea5-7dd9-f07d-aaaac7cc449f.png)
![スクリーンショット 2025-01-20 11.24.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/d2158051-85e9-b986-f95e-288efa297de8.png)
今回のEvent Routingにより、`ibm-audit-event`、`bvt`などが追加され、Activity Trackerの監査イベント項目が確認できたら接続完了です。
表示されるログの内容については[IBM Cloud Logs のアクティビティー・トラッキング・イベント](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-at_events)に詳しく記載されているのでご参照ください。
![スクリーンショット 2024-07-25 16.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/feeb358b-bd91-e3db-c01c-d5c69316046b.png)
また、ログの詳しい見方については[こちら](https://qiita.com/testnin2/items/ba8e0623af7d271ce2d0)の記事に詳しく紹介されているので、あわせてご参考ください。

## 参考
- https://qiita.com/fumienu/items/8a786f17a8c877d922ef
- https://qiita.com/aktech/items/c1c3c5519fc1f570d18f
- https://qiita.com/testnin2/items/ba8e0623af7d271ce2d0
- [IBM Cloud Logsをターゲットとして設定する](https://cloud.ibm.com/docs/atracker?topic=atracker-getting-started-target-cloud-logs&locale=ja)
- [IBM Cloud Activity Tracker Event Routing について](https://cloud.ibm.com/docs/atracker?topic=atracker-about)
- [S2Sを作成して IBM Cloud Logsにバケットへのアクセスを許可する](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-iam-service-auth-cos&interface=ui)
- [IBM Cloud Logsにデータを送信するアクセス権IBM Cloud Activity Tracker Event Routingに付与する S2Sを作成する](https://cloud.ibm.com/docs/cloud-logs?topic=cloud-logs-iam-service-auth-atracker&interface=ui)