Nutanix CE で利用している Nutanix Files の監査情報を、Syslog 転送してみます。
Nutanix のドキュメントでは、下記の Tech Note が参考になります。
今回の内容です。
今回の環境
- Nutanix CE 2020.09.16
- Nutanix Files 3.8.1.1。FSVM は 1台構成、SMB 共有のみ利用
- 転送先 Syslog サーバは Oracle Linux 7.9 の rsyslog
ファイル サーバー は、下記にあるような手順で作成ずみです。
下記のように Syslog 転送環境を構成します。
転送先 Syslog サーバの用意
Syslog サーバの構築
Syslog サーバとして利用する Oracle Linux 7 で、rsyslog がリモート受信できるように設定しておきます。
# cat /etc/system-release Oracle Linux Server release 7.9
ファイアウォールは停止してしまいます。
# systemctl stop firewalld # systemctl disable firewalld
TCP/514 ポートで、Syslog をリモート受信できるように設定追加しておきます。
# vi /etc/rsyslog.d/remote.conf # cat /etc/rsyslog.d/remote.conf module(load="imtcp") input(type="imtcp" port="514")
rsyslog サービスを再起動しておきます。
# systemctl restart rsyslog
JSON データを扱うために、jq コマンドをインストールしておきます。
# yum install -y jq
Syslog サーバの設定確認
Nutanix Files の FSVM から、logger コマンドでログ転送して、Syslog サーバで受信できることを確認しておきます。
- FSVM への SSH ログインは、管理ネットワーク(FSVM の eth0)経由です。
- この環境の FSVM 管理ネットワーク IP アドレスは 192.168.20.91 です。
- 転送先 Syslog サーバは、192.168.11.61 です。
- Syslog は、TCP 514 ポートで転送します。
nutanix@NTNX-192-168-20-91-A-FSVM:~$ logger -n 192.168.11.61 --tcp -P 514 test-from-fsvm
Syslog サーバ側の /var/log/messages ファイルに、テスト ログが追記されたことを確認しておきます。
この環境では FSVM のクライアント サイド ネットワーク(eth1)からログが転送されるため、転送元は 192.168.20.91 ではなく、192.168.31.11 になっています。
Dec 5 05:16:50 192.168.31.11 nutanix: test-from-fsvm
Nutanix Files での Syslog 転送設定
Nutanix Files の Syslog 設定は、Files API v3 を利用します。
Nutanix Files API 用ユーザの作成
Nutanix Files API v3 は、FSVM にむけて実行します。そこで、FSVM への API 用ユーザを作成しておきます。
Prism Element の、「ファイル サーバー」→「File Server」を開きます。ファイル サーバーを選択してから、「Manage roles」を開きます。
そして、「REST API アクセス ユーザー」の「新ユーザー」をクリックして、ユーザーを追加しておきます。今回は「filesapi」というユーザを作成してあります。
Files API v3 での接続確認
Files API v3 のリファレンスは、下記のアドレスで確認できます。
- https://<FSVM のアドレス>:9440/api/nutanix/v3/api_explorer/
接続に必要な情報を、変数に格納しておきます。
今回のファイル サーバーのアドレスは、「test-fs-01.ntnx.lab」です。
$ FS_USER=filesapi $ FS_PASS='パスワード' $ FS_ADDR=test-fs-01.ntnx.lab
curl コマンドで API をコールして、Nutanix Files のバージョンなどを取得してみます。出力結果の JSON データを見やすくするため、jq コマンドを利用しています。
$ curl -ks -u "$FS_USER:$FS_PASS" -H "Content-Type: application/json" -X GET --url "https://$FS_ADDR:9440/api/nutanix/v3/file_servers" | jq -r . { "status": { "fs_uuid": "0a1bef2b-099c-4f52-9c89-eac01bd204bb", "name": "test-fs-01", "resources": { "version": "3.8.1.1", "configuration_list": [ { "name": "max_backup_snapshots_per_share", "value": "20" }, { "name": "max_backup_snapshot_diff_reqs", "value": "10" }, { "name": "max_backup_snapshots_diff_list_retention_in_secs", "value": "2592000" } ] } }, "api_version": "3.1", "metadata": { "kind": "file_server" } }
Syslog 転送の設定
まず、partner server として転送先 Syslog サーバを登録します。
下記のような JSON ファイルを用意しておきます。
nutanix-files_syslog-server-01.json
- ログ転送では usage_type に「NOTIFICATION」を指定。多種の連携ケースでは BACKUP / AV を指定する。
- 転送先サーバのアドレスは、192.168.11.61
- 転送先ポートは TCP 514
partner_server を追加します。
$ curl -ks -u "$FS_USER:$FS_PASS" -H "Content-Type: application/json" -d @nutanix-files_syslog-server-01.json -X POST --url "https://$FS_ADDR:9440/api/nutanix/v3/partner_servers"
結果として JSON データが出力されるので、ここから partner server の UUID を確認します。
{"status": {"state": "PENDING", "execution_context": {"task_uuid": "80890e37-e3c7-4bc2-b407-c2cd1d3e5c33"}}, "spec": {"name": "syslog-transfer-01", "resources": {"usage_type": "NOTIFICATION", "vendor_name": "syslog", "server_info": {"server_type": "PRIMARY", "address": {"ip": "192.168.11.61", "port": 514}}}}, "api_version": "3.1", "metadata": {"owner_reference": {"kind": "user", "uuid": "fedea42b-7b2a-5faf-93fa-2bd75b93cc74", "name": "filesapi"}, "use_categories_mapping": false, "kind": "partner_server", "spec_version": 0, "uuid": "4f03e62a-5093-4beb-8120-28526c26271f"}}
あらためて UUID を取得して、変数 SERVER_UUID に格納しておきます。。
$ export SERVER_UUID=$(curl -ks -u "$FS_USER:$FS_PASS" -H "Content-Type: application/json" -X POST -d '{}' --url "https://$FS_ADDR:9440/api/nutanix/v3/partner_servers/list" | jq -r '.entities[] | select(.spec.name=="syslog-transfer-01") | .metadata.uuid')
UUID が取得できました。
$ echo $SERVER_UUID 4f03e62a-5093-4beb-8120-28526c26271f
Syslog を転送する notification policy を定義した JSON ファイルを用意しておきます。
nutanix-files_syslog-policy-01.json
- ファイル サーバーの、すべての共有フォルダが対象。
("all_mount_targets": true) - 対象のプロトコルは SMB のみ。
- file_operation_list には、冒頭の Tech Note を参考に、SMB に関係するオペレーションのみ含めてある。
envsubst コマンドで変数部分を置き換えつつ、/notification_policies の POST メソッドでポリシーを作成します。
$ cat nutanix-files_syslog-policy-01.json | envsubst | curl -ks -u "$FS_USER:$FS_PASS" -H "Content-Type: application/json" -d @- -X POST --url "https://$FS_ADDR:9440/api/nutanix/v3/notification_policies"
これで、ファイル サーバーの監査ログが Syslog サーバに転送され、/var/log/messages ファイルに保存されるようになります。
監査ログの様子
ためしに、「\\test-fs-01.ntnx.lab\share-01\何かのフォルダ\test-file.txt」ファイルを開いてから、削除した様子です。
- ntnx-192-168-20-91-a-fsvm は、今回の転送元 FSVM のホスト名です。
- FileRead、FileDelete の 2行が記録されています。
Nov 30 14:46:08 ntnx-192-168-20-91-a-fsvm SMB[43435]: NTNX.LAB\NTNX\Administrator(1100500)|S-1-5-21-2495205253-2353596005-483417297-500|192.168.10.170|FileRead|success|test-fs-01.ntnx.lab/share-01/何かのフォルダ/test-file.txt|256|9 Nov 30 14:46:18 ntnx-192-168-20-91-a-fsvm SMB[43435]: NTNX.LAB\NTNX\Administrator(1100500)|S-1-5-21-2495205253-2353596005-483417297-500|192.168.10.170|FileDelete|success|test-fs-01.ntnx.lab/share-01/何かのフォルダ/test-file.txt|256
以上。