Unity Catalog 監査ログ設定（AWS編) について

:::note
Unity CatalogのSystem Tableがリリースされた事で、[こちらの方法](https://qiita.com/maroon-db/items/b89d47009948206ac064)でも確認出来るようになりました。
:::

# はじめに

Databricks Unity Catalog を利用すると、カタログアクセスに関する監査ログを取得することができます。ただし利用するためには、ログの保存先（S3 Bucket)を作成し、配信を有効にしておく必要があります。今回はその設定と実際に配信された監査ログをどうやってチェックするか見ていきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/5ff4b455-58b0-9c89-f31d-a626da6c86e6.png)

> 今回はこちらのドキュメントを参考に作成しております。正確な情報としては、オリジナルのドキュメントをご覧ください。https://docs.databricks.com/data-governance/unity-catalog/audit.html


# 1. 監査ログの配信設定と有効化

まずは監査ログの配信設定を行います。こちらは通常のDatabricks監査ログ設定と同じですので、すでに設定済みであれば省略可能です。ただし、Unity CatalogのログはAccountレベルで行われるため、workspace_ids_filterにて**フィルター設定しない**でください。

設定手順についてはこちらの[Databricks監査ログ設定手順書](https://sajpstorage.blob.core.windows.net/maruyama/Documents/AuditLog/Databricks%E7%9B%A3%E6%9F%BB%E3%83%AD%E3%82%AF%E3%82%99%E8%A8%AD%E5%AE%9A%E6%89%8B%E9%A0%86%E6%9B%B8(AWS)_v1.2.docx.pdf)をご覧ください。

アカウントでログ配信が有効になると、Databricksは定期的に監査ログを配信場所に送信します。

### 監査ログのフォーマット

ログはJSONフォーマットで保存され、次の例は createMetastoreAssignmentイベントの場合です。
```
  {
   "version":"2.0",
   "auditLevel":"ACCOUNT_LEVEL",
   "timestamp":1629775584891,
   "orgId":"3049056262456431186970",
   "shardName":"test-shard",
   "accountId":"77636e6d-ac57-484f-9302-f7922285b9a5",
   "sourceIPAddress":"10.2.91.100",
   "userAgent":"curl/7.64.1",
   "sessionId":"ephemeral-f836a03a-d360-4792-b081-baba525324312",
   "userIdentity":{
      "email":"crampton.rods@email.com",
      "subjectName":null
   },
   "serviceName":"unityCatalog",
   "actionName":"createMetastoreAssignment",
   "requestId":"ServiceMain-da7fa5878f40002",
   "requestParams":{
      "workspace_id":"30490590956351435170",
      "metastore_id":"abc123456-8398-4c25-91bb-b000b08739c7",
      "default_catalog_name":"main"
   },
   "response":{
      "statusCode":200,
      "errorMessage":null,
      "result":null
   },
   "MAX_LOG_MESSAGE_LENGTH":16384
  }
```

# 2. 監査ログストレージの登録

監査ログは指定したS3バケットに保存されるため、ワークスペース上で監査ログの分析をするために、S3バケットを外部ロケーションとして登録します。

登録方法はこちらをご覧ください。[Unity Catalog 外部ロケーションの登録 (AWS)](https://qiita.com/maroon-db/items/6f3dee8a8ebd863989a6)

登録すると以下のようになり、アクセスすることが可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/17112e81-b632-50de-42f2-7bf11adc6973.png)

# 3. 監査ログデータの確認

こちらの[サンプルノートブック](https://sajpstorage.blob.core.windows.net/maruyama/Documents/AuditLog/aws_audit_logs_etl_uc_JP.html)を利用して、監査ログをUnity Catalogに登録します。
監査ログにはUnity Catalog以外にもさまざまなサービスで利用しているログが集まっております。
このノートブックでは、それぞれサービス毎にテーブルを作成し、その後の確認がしやすいように処理をしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/ab49ad95-528e-e9f7-f3e7-6b58348dec63.png)


作成されたテーブルはこのように沢山あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/2dab9108-81fb-4343-939b-0cd0e975a353.png)

UnityCatalogテーブルを表示してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/90d54cbf-a003-f0d9-5cf9-2f099b2768d6.png)

UnityCatalogの監査ログで取得できるイベントはこちらをご覧ください。
https://docs.databricks.com/data-governance/unity-catalog/audit.html#unity-catalog-audit-log-events



# 4. お勧めの管理

## 4.1: データ取得の自動化

ワークフロー機能を利用すると、先ほどのノートブックをスケジュール実行できます。一番簡単なのはノートブックの右上にあるスケジュールボタンをクリックしてスケジュール設定しておきましょう。これで自動的に監査ログデータをカタログに登録してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/c4cfa57b-0a12-dea9-dac9-9ed5513375e7.png)

## 4.2: ダッシュボードによる可視化

Databricks SQLを利用すると、このようにフィルター条件などをリストで選択出来るようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/93def908-2cb2-addf-cc5b-e8a6b957c1da.png)

これらをダッシュボードとして保存したり、アラートを作成し異常なアクセスにはアラートを通知するなどしておくと運用が楽になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/b09e34fc-dbf7-696e-b45c-fb1c28c4304a.png)


# 最後に

この監査ログは、Unity Catalog以外のDatabricksサービスの監査ログも取得しているため、同じように可視化することが可能です。有事に備えて調査出来るように準備しておいては如何でしょうか。

UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94