2024年のセキュリティインシデントと私たちがやれる事を考えてみた -- その2 --

# Oracle Cloud Infrastructure Advent Calendar 2024 8日目の続き
1. この記事では、OCI Object Storageへコマンド実行履歴を保管し、そのTextデータとOCI 生成AIエージェントを繋げてみるところまでを行います
## 1. OCI Object Storageへデータ連携
- [8日目の記事「4.fluentで受け取る」](https://qiita.com/endless_pancake/items/f057634f763d7331fdf9#4-fluentsyslog%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A8%E3%81%97%E3%81%A6%E3%81%A7%E5%8F%97%E3%81%91%E5%8F%96%E3%81%A3%E3%81%9F%E7%B5%90%E6%9E%9C)では、stdoutへ出力/ファイルへ保存するだけでした
- 要件に応じて、AWSやAzureに備わる各種機能を活用する事ももちろん可能ですが、OCI Object Storageへ保存させます
- fluentからOCI Object Storageへの連携には[flunet-plugin-s3](https://github.com/fluent/fluent-plugin-s3) を使います
### 1.1 Credential 準備
- OCI Object Storageへデータ連携を行うにあたり必要となります
  - データ連携＝「外部保管」です  
- OCIコンソールで「アイデンティティ」→「ユーザー」→「ユーザーの詳細」
　左の「リソース」メニューの「顧客秘密キー」を選択します
- 「秘密キーの生成」をクリックし、任意の名称を付けて秘密キーを作成します
- 生成された「秘密キー」と「アクセスキー」をテキストファイルにメモしておく事を忘れないでください
### 1.2 OCI Object Storage準備
- Bukectを事前に[作成](https://docs.oracle.com/ja-jp/iaas/Content/Object/Tasks/managingbuckets_topic-To_create_a_bucket.htm)しておいてください
- この名称は後述の "s3_bucket" パラメータで指定します
### 1.3 fluentでOCI Object Storageへ繋げる
- 既存のDocker Imageが既にs3プラグイン入りでBuildされている事が必須です
- 1.1 の「秘密キー」と「アクセスキー」を下記の通り張り付ける
  - before　※[8日目の記事](https://qiita.com/endless_pancake/items/f057634f763d7331fdf9) の時
  ```
  <source>
    @type syslog
    port 5140
    bind 0.0.0.0
    tag terminal
    <parse>
      message_format rfc3164
      with_priority false
    </parse>
   </source>
  <match terminal.local6.*>
    @type stdout
  </match>
  ```
  - after
    - <match>内部で ＠type copy を使う事でfluentがデータを複製して様々なアクションを実現可能にします。fluent素晴らし！
  ```
  <source>
    @type syslog
    port 5140
    bind 0.0.0.0
    tag terminal
    <parse>
      message_format rfc3164
      with_priority false
    </parse>
  </source>
  <match terminal.local6.*>
    @type copy
    <store>
      @type stdout
    </store>
    <store>
      @type s3
      aws_key_id ”「アクセスキー」”
      aws_sec_key ”「秘密キー」”
      s3_bucket aiagent
      s3_region ap-tokyo-1
      s3_endpoint https://<コンパートメント>.compat.objectstorage.<リージョン>.oraclecloud.com
      check_apikey_on_start false
      ssl_verify_peer false
      force_path_style true
      <buffer>
        @type file
        #path /var/log/td-agent/buffer/oci.buffer
        path /fluentd/log
        chunk_limit_size 1m
        queue_limit_length 256
        store_as txt  # default: gzip (gzip,izo,json,txt)
        flush_at_shutdown true
        flush_interval 1s
        retry_wait 30s
        retry_max_times 9
      </buffer>
    </store>
   </match>
  ```
  - docker再起動
  ```
  [opc@ol8 fluentd]$ docker-compose restart
  [+] Restarting 1/1
  ? Container fluentd-fluentd-1  Started
  [opc@ol8 fluentd]$ docker logs -f fluentd-fluentd-1
  
  2024-12-09 07:10:15 +0000 [info]: #0 starting fluentd worker pid=16 ppid=7 worker=0
  2024-12-09 07:10:16 +0000 [warn]: #0 restoring buffer file: path = 
  /fluentd/log/buffer.q628cff0b64392bee6aaa9023c205f261.log
  2024-12-09 07:10:16 +0000 [warn]: #0 restoring buffer file: path = 
  /fluentd/log/buffer.q628d0834ebace3d5e15774265eeb8d13.log
  2024-12-09 07:10:16 +0000 [warn]: #0 restoring buffer file: path = 
  /fluentd/log/buffer.q628d09b1cc79c60c3a5b2ef3c4bcaba3.log
  2024-12-09 07:10:16 +0000 [info]: #0 listening syslog socket on 0.0.0.0:5140 with udp
  2024-12-09 07:10:16 +0000 [info]: #0 fluentd worker is now running worker=0
  ```
### 1.3 Object Storage確認
- OCIコンソールでも確認可能ですが、aws cliでも確認が可能なので試してみます
#### 1.3.1 aws cli install
- [こちらの手順](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)に従う
- セットアップ作業
```
[opc@ol8-arm64 ~]$ /usr/local/bin/aws configure
AWS Access Key ID [****************2412]: 「アクセスキー」
AWS Secret Access Key [****************9eg=]: 「秘密キー」
Default region name [None]:
Default output format [None]:
```
#### 1.3.2 aws cli で oci object storageを覗く
- fluent-plugin-s3経由で無事、3つの圧縮ファイルとテキストファイルが1つ確認できました
- [OCI 生成AIエージェントのデータソース](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai-agents/ai-data-sources.htm)とする為にテキストファイルが必要になります
```
[opc@ol8-arm64 ~]$ aws s3 --region ap-tokyo-1 --endpoint-url https://<コンパートメント>.compat.objectstorage.<リージョン名>.oraclecloud.com ls s3://<bucket名>
2024-12-09 07:10:17        300 20241209_0.gz
2024-12-09 07:10:18        198 20241209_1.gz
2024-12-09 07:10:19        650 20241209_2.gz
2024-12-09 07:17:54       6926 20241209_2.txt
```
## 2. OCI 生成AIエージェントを繋げてみる
- コマンド実行履歴の外部保管を行う事に加え、OCI生成AIエージェントの「ナレッジベース」として使えるか試してみます
- [こちらの記事](https://qiita.com/msasakaw/items/219c58ecdf98b4bfb743)を参考にしました
### 2.1 生成Aiエージェント用Textデータの準備
- 諸般の事情により、ap-tokyo-1 では生成AIエージェントが使えない為、Chicagoリージョンに同名のBucketとファイルをアップロードしてください
### 2.2 生成AIエージェントの作成
-  OCIコンソールで「生成AIエージェント」＞「エージェント」＞「エージェントの作成」で作成します
![スクリーンショット 2024-12-09 162437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936315/5e62fe25-2161-378b-e0ee-96143c670b47.png)
- Object Storageへ保存されたデータ連携ファイルを「データソース」として指定します
![スクリーンショット 2024-12-09 162344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936315/b657a71f-0de3-ef5e-7566-ad79dbd908bb.png)
### 2.3 生成AIエージェント・チャット
- こちらに[素晴らしい記事👏](https://qiita.com/msasakaw/items/219c58ecdf98b4bfb743#3%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B)がありますので割愛させていただきます。
## まとめ
- セキュリティ対策として、任意のOSユーザのコマンド実行履歴をリアルタイムに補足、証跡を外部保管したものをOCI 生成AIエージェントを使って活用するアイデアを実現しました
- これにより、OCI生成AIエージェントからチャット形式でコマンド実行履歴を確認する事が可能になります
- 結果として、ログチェックの様な専門的なスキルが不要となり、確認するオペレーションコストも下げられる事が期待できます

以上