OCI Logging Analytics でオンプレミスの Oracle Database の監査ログを取得する

# はじめに
Logging Analytics は、OCI Observability&Managementのサービスの1つです。
Logging Analytics では、OCIのVCNやLoad Balancerなどの各種ログだけでなく、エージェントを使用することで、OSやデータベースなどのログを可視化、分析することができます。
もちろん、オンプレミスの Oracle Database のログの取得も可能です。

https://docs.oracle.com/ja-jp/iaas/logging-analytics/home.htm


今回は、オンプレミスのExadata内のOracle Database の監査ログを管理エージェント、管理ゲートウェイ経由でLogging Analytics にアップロードする手順について説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/9d1391eb-e105-45c9-6943-e84f2fd38a85.png)




**【前提条件】**
* Exadataは**Exadata X8M**
* Oracle Database のバージョンは**19c**
* OCI側の必要な**コンパートメント**、**ユーザー**の作成が済んでいること
* VCNや各種ゲートウェイなどの作成およびネットワークの設定が済んでいること
* **ExadataやOracle Database 側のログ生成などの事前設定については今回は省きます**

# 必要な動的グループとポリシーの作成
* 動的グループ(動的グループ名は任意)
~~~
#管理エージェント用動的グループ
ALL {resource.type = 'managementagent', resource.compartment.id = '[対象のコンパートメントのOCID]'}

#管理ゲートウェイ資格証明用動的グループ
ALL {resource.type='certificateauthority', resource.compartment.id = '[対象のコンパートメントのOCID]'}																												
~~~
* ポリシー(ポリシー名は任意)
~~~
#サービス有効化
Allow service loganalytics to READ loganalytics-features-family in tenancy
Allow service loganalytics to READ compartments in tenancy

#管理エージェント用
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE management-agents in compartment [対象のコンパートメント名]																																									
Allow dynamic-group [管理エージェント用動的グループ名] to USE metrics in compartment [対象のコンパートメント名]																																								
Allow dynamic-group [管理エージェント用動的グループ名] to {LOG_ANALYTICS_LOG_GROUP_UPLOAD_LOGS} in compartment [対象のコンパートメント名]

#管理ゲートウェイ用
Allow dynamic-group [管理エージェント用動的グループ名] to READ certificate-authority-bundle in compartment [対象のコンパートメント名]																																									
Allow dynamic-group [管理エージェント用動的グループ名] to READ leaf-certificate-bundle in compartment [対象のコンパートメント名]								
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE certificate-authorities in compartment [対象のコンパートメント名] where any{request.permission='CERTIFICATE_AUTHORITY_CREATE', request.permission='CERTIFICATE_AUTHORITY_INSPECT', request.permission='CERTIFICATE_AUTHORITY_READ'}			
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE leaf-certificates in compartment [対象のコンパートメント名] where any{request.permission='CERTIFICATE_CREATE', request.permission='CERTIFICATE_INSPECT', request.permission ='CERTIFICATE_UPDATE', request.permission='CERTIFICATE_READ'}
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE vaults in compartment [対象のコンパートメント名] where any{request.permission='VAULT_CREATE', request.permission='VAULT_INSPECT', request.permission='VAULT_READ', request.permission='VAULT_CREATE_KEY', request.permission='VAULT_IMPORT_KEY', request.permission='VAULT_CREATE_SECRET'}
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE keys in compartment [対象のコンパートメント名] where any{request.permission='KEY_CREATE', request.permission='KEY_INSPECT', request.permission='KEY_READ'}					
Allow dynamic-group [管理エージェント用動的グループ名] to USE certificate-authority-delegates in compartment [対象のコンパートメント名]
Allow dynamic-group [管理エージェント用動的グループ名] to USE key-delegate in compartment [対象のコンパートメント名]			
Allow dynamic-group [管理エージェント用動的グループ名] to MANAGE leaf-certificates in compartment [対象のコンパートメント名] where all{request.permission='CERTIFICATE_DELETE', target.leaf-certificate.name=request.principal.id}

#資格証明用
Allow dynamic-group [管理ゲートウェイ資格証明用動的グループ] to USE certificate-authority-delegates in compartment [対象のコンパートメント名]		
Allow dynamic-group [管理ゲートウェイ資格証明用動的グループ] to USE vaults in compartment [対象のコンパートメント名]					
Allow dynamic-group [管理ゲートウェイ資格証明用動的グループ] to USE keys in compartment [対象のコンパートメント名]
~~~

# 管理ゲートウェイのインストール
**(事前に、OSがOracle Linuxのコンピュートを作成し、JDK8をインストールしてください)**
* OCIコンソール画面から、監視および管理 -> 管理エージェント -> ダウンロードとキーから、Linuxのエージェントとゲートウェイをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/96d36c32-b285-35ba-89ce-905c88ecadb5.png)
* 同じページの下部にあるキーの作成からキーを作成します
**作成後のキーファイルのダウンロードもお忘れなく！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/5502436b-f9e1-6f06-d225-76e2adc5e59d.png)
* コンピュートにダウンロードしたゲートウェイのファイルをインストールします
~~~
#管理ゲートウェイが使用する4480ポートの解放
firewall-cmd --zone=public --add-port=4480/tcp --permanent
firewall-cmd --reload

#RPMのインストール
rpm -ivh oracle.mgmt_gateway.231118.1208.1702955171.Linux-Aarch64.rpm

#input.rspファイルの作成
#インストールキーの値は、ダウンロードしたキーファイルにある
#パスワードは任意
vi /tmp/input.rsp
ManagementAgentInstallKey = XXXXXX
CredentialWalletPassword = XXXXXX
GatewayPort = 4480
BatchingEnabled = true

#input.rspファイルの所有者をmgmt_agentに変更
chown mgmt_agent:mgmt_agent /tmp/input.rsp

#インストールを実行
/opt/oracle/mgmt_agent/agent_inst/bin/setupGateway.sh opts=/tmp/input.rsp
~~~

# 管理エージェントのインストール
* Exadataにダウンロードした管理エージェントのファイルをインストールします
~~~
#zipファイルの回答
unzip oracle.mgmt_agent.231118.1208.Linux-x86_64.zip -d

#input.rspファイルの作成
#インストールキーとパスワードは管理ゲートウェイと同様
#ホストは管理ゲートウェイをインストールしたコンピュートのIPアドレス、ポート番号は4480
vi /tmp/input.rsp
ManagementAgentInstallKey = XXXXXX
CredentialWalletPassword = XXXXXX
GatewayServerHost = XXXXXX
GatewayServerPort = XXXXXX
Service.plugin.logan.download=true

#管理エージェントのインストール
/tmp/agent/installer.sh /tmp/input.rsp
~~~

# ログ取得用のACL設定
~~~
#mgmt_aget:mgmt_agentへアクセス権限の付与
 setfacl -R -m u:mgmt_agent:rx /u01/app/oracle/admin/*/adump
 setfacl -d -m u:mgmt_agent:rx /u01/app/oracle/admin/*/adump
~~~

# Logging Analyticsの設定
ここからは、OCIコンソール側の設定を行います。

### エンティティ作成
* OCIコンソール画面から、監視および管理 -> ログ・アナリティクス -> 管理から**エンティティの作成**を選択
* エンティティ・タイプ：**Oracle Database Instance**
* 名前：任意
* 管理エージェント・コンパートメント：**管理エージェントを作成したコンパートメントを選択**
* 管理エージェント：**インストールした管理エージェントを選択**
* プロパティ

| プロパティ名     | プロパティ値                   |
|:----------------|:------------------------------|
| AUDIT_FILE_DEST | /u01/app/oracle/admin/*/adump |

### ログ・グループ作成
* OCIコンソール画面から、監視および管理 -> ログ・アナリティクス -> 管理から**ログ・グループの作成**を選択
* コンパートメント：選択不可
* 名前：任意
* 説明：任意

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/33b77321-f8ac-24d0-1f61-a0a7a3206c2e.png)

### XML収集用ソースの追加と関連付け
* OCIコンソール画面から、監視および管理 -> ログ・アナリティクス -> 管理からソースの**数字部分**をクリック
* **Database Audit XML Logs**をクリック
* **複製**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/69f43156-3957-850d-9b72-3cf1bc87811c.png)
* 名前：任意
* ソース・タイプ：**File**
* エンティティ・タイプ：**Oracle Database Instance**
* パーサー：デフォルトのまま
* **拡張フィールド**をクリック、**追加**をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/4360fa6d-7515-8230-97a5-d32da3a31dda.png)

* 条件(オプション)：**新規条件**
* 条件フィールド：**Message**
* 演算子：**nullでない**
* ベース・フィールド：**Message**
* サンプルのベース・フィールド・コンテンツ：**Authenticated by: DATABASE;AUTHENTICATED IDENTITY: C##DBLCMUSER; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=XXX.XXX.XXX.XXX)(PORT=63164))**
* 式の抽出：**HOST={IPADDRESS:[\d.]+}**
* **テスト定義**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/429cec3c-db67-7f99-aa55-af63f44188fd.png)

* **新規フィールドの作成**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/f5402772-4665-ceae-5c7a-4c5e334fb454.png)

* データ型：**文字列**を選択し、**作成**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/30c142f7-188a-23fb-a3fa-d3c51d1f9939.png)

* **テスト定義**をクリックし、**成功**となることを確認し、**追加**をクリック
* 追加したフィールドの**有効**にチェックがついていることを確認して、**ソースの作成**をクリック
* リソース欄の**関連付けられていないエンティティ**をクリックし、関連付けるエンティティにチェックを入れて、**アソシエーションの追加**をクリック
* ログ・エクスプローラの画面を開き、ログが収集されていることを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/97c64e0d-4f5c-f9c3-7c10-444666f2981a.png)

# さいごに
ログがあまりに大きすぎると、管理ゲートウェイで詰まったりするので、ログ量を事前に把握しておくことで、何らかの対策を打つことができると思います。

また、管理エージェントがログを取り込めない場合は、DBの認証周りであることが多いので、認証認可やポートの解放などを確認してみてください。この時、ログからエラーの原因を確認することができます。

ログ・アナリティクスのストレージ料金は10GBまで無償ですが、その後は若干割高なので、適宜オブジェクト・ストレージに転送することも可能です。

https://www.oracle.com/jp/cloud/price-list/#pricing-observability