Amazon Web Services ブログ

Splunk を使用した Amazon FSx for NetApp ONTAP でのユーザーおよび管理アクションの監査

このブログは 2022 年 9 月 13 日に Promise Owolabi(Senior Storage Specialist)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。

アップデート( 2022 年 10 月 26 日):ファイルシステムがログ転送先の IP アドレスに接続できるか検証することを推奨するようブログの内容を変更しました


ログと監査イベントの監視は、あらゆる組織のセキュリティプラクティスの重要な部分です。ファイルシステムの場合は、ファイルシステムの構成を変更する管理アクションだけでなく、エンドユーザーのアクティビティ(ファイルアクセスの試行など)のロギングも含まれます。Amazon FSx for NetApp ONTAP(FSx for ONTAP) には、組織がセキュリティに対する姿勢を評価し、アクセス制御ポリシーの潜在的なギャップを特定するのに役立つセキュリティ機能があります。

FSx for ONTAP は、AWS クラウドでフルマネージドの NetApp ONTAP ファイル システムを作成、実行できるストレージサービスです。ONTAP ファイルシステムの使い慣れた機能と、パフォーマンス、機能、API に加えて、AWS のフルマネージドサービスの俊敏性と、スケーラビリティ、シンプルさを提供します。

この記事では、FSx for ONTAP にビルトインされているロギング機能とファイルアクセス監査機能について説明します。管理ログとファイルアクセスログの両方を取り出し、外部の検索および分析ツールに集約して、レポートの作成や、監視、可視化することができます。これにより、AWS サービスや、Splunk などの AWS パートナーソリューションを使用して、エンドユーザーのアクティビティをほぼリアルタイムで自動化や、監視、対応することができます。コンプライアンスの目標を達成するために、組織はファイルや、フォルダ、ファイル共有に誰がアクセスしているのか、どのようなアクションが実行されているかを把握し、実証する必要があります。

ソリューション概要

このブログの最初の部分で、FSx for ONTAP ファイルシステムから監査ログイベントを転送する方法について説明します。次の部分で、SMB および NFS ボリュームのファイルアクセス監査の設定について説明します。

Overview of FSx for ONTAP logs and file access auditing with Splunk

図 1: Splunk を使用した FSx for ONTAP ログとファイルアクセス監査の概要

監査ログイベント

FSx for ONTAPのSETは、ONTAP CLI および ONTAP API から発生した操作(ファイルシステムの変更)の監査イベントを送信します。監査イベントは、Splunk Enterprise および Universal Forwarder(UF)インスタンスのシスログ宛に転送されます。FSx for ONTAP のマルチ AZ ファイルシステムからのログ転送は、優先ローカルサブネットとスタンバイローカルサブネットに制限されているため、各サブネットにシスログサーバーが必要です。Splunk Enterprise と UF の各ノードで syslog-ng をシスログサーバーとして使用し、Splunk は新しいログイベントのログファイルを監視します。

ファイル アクセスの監査

ファイルアクセスの監査を設定するには、ONTAP CLI を使用して監査ポリシーを作成して有効化し、SMB 共有でシステム監査制御リスト(SACL)を設定する必要があります。SACL は、監査イベントを発行するアクセスタイプとユーザーまたはグループを定義します。ONTAP CLI または Windows ファイルエクスプローラーを使用して、SMB 共有に SACL を設定できます。

NTFS と Unix のファイルアクセスイベントを可視化して監視するために、Splunk を使用して監査イベントのインデックスを作成し、ファイルアクセスイベントのほぼリアルタイムの監視結果を表示するダッシュボードを作成します。

監査ログ転送の構成

このセクションでは、クラスタで実行された管理アクティビティをシスログの宛先に転送するように FSx for ONTAP を構成します。

ステップ1:Splunk インデックスと、Universal Forwarder(UF)、syslog-ng をセットアップする

まず、監査イベントを保存するための個別の Splunk インデックスを作成し、Splunk Enterprise と UF に syslog-ng をセットアップします。Splunk Enterprise と UF 間の転送と受信を設定し、ログファイルを監視します。

  1. Settings」を選択 し、「indexes」を選択します。
  2. 右上にある「New index」を選択します。
  3. インデックス名を入力します。(例:ontap_syslogs
  4. それ以外はデフォルト設定のまま「Save」を選択して、インデックスを作成します。

Create Splunk index for logs

図 2: ログの Splunk インデックスを作成する

次に、Splunk Enterprise と Universal Forwarders にシスログサーバーをセットアップします。

  1. Splunk Enterprise および UF サーバーに syslog-ng をインストールします。
    sudo amazon-linux-extras install epel
    sudo yum install syslog-ng
  2. syslog-ng 構成ファイル (/etc/syslog-ng/syslog-ng.conf) を変更し、以下の行を追加します。
source s_fsx {
          tcp(ip(0.0.0.0) port(514));
         };

         destination d_fsx {
         file(
         "/var/log/fsx/fsxontap.log"
         create_dirs (yes)
         owner("root")
         group("root")
         perm(0755)
         ); };

         log { source(s_fsx); destination(d_fsx); };
  1. syslog-ng サービスを再起動します。
sudo systemctl restart syslog-ng
  1. Universal Forwarder で手順 1 ~ 3 を繰り返します。

次に、Splunk Enterprise サーバーで受信データを構成します。

  1. Splunk Enterprise コンソールの「Settings」に移動し、「Forwarding and Receiving」を選択します 。
  2. Receive Data」セクションより「Configure receiving」を選択します。右上にある「New Receiving Port」を選択します。
  3. リッスンするポート(例:9997)を入力し、「Save」を選択します。

Setup Splunk to receive syslog data

図 3: Splunk がシスログデータを受信するようにセットアップする

次に、Splunk Universal Forwarder を Splunk Enterprise サーバーにイベントを送信し、ローカルの /var/log/fsx/fsxontap.log ファイルを監視するように設定します。

  1. Universal Forwarder で実施:

a. データを転送するように UF を構成します。

./splunk add forward-server <Splunk_Enterprise_IP>:9997

b. イベントのログファイルを監視します。

./splunk add monitor /var/log/fsx/fsxontap.log -index syslog_index -sourcetype syslog
  1. Splunk Enterprise サーバーで実施:

a. イベントのログファイルを監視します。

./splunk add monitor /var/log/fsx/fsxontap.log -index syslog_index -sourcetype syslog

ステップ2:FSx for ONTAP から Splunk へのログ転送を有効にする

ONTAP CLI を使用して、Splunk への監査ログ転送を設定できます(FSx for ONTAP ユーザー ガイドの 「NetApp ONTAP CLI を使用する」 を参照)。Splunk エンドポイントへのロギングを設定するには、次のコマンドを入力します。

cluster log-forwarding create -destination <splunk-enterprise-IP> -port 514 -protocol tcp-unencrypted -verify-server false -facility user

cluster log-forwarding create -destination <universal-forwarder-IP> -port 514 -protocol tcp-unencrypted -verify-server false -facility user

もし、以下のエラーが発生した場合は、パラメータ-forceを使用しないでください。その代わりに、接続テストが成功するようにセキュリティグループや、その他のルーティングが構成されていることを確認し、ファイルシステムが期待どおりに動作することを確認してください。

Error: command failed: Cannot contact destination host (172.31.34.125) from node "FsxId01234abcdef56-01". Verify connectivity to desired host or skip the connectivity check with the "-force" parameter.

splunk-enterprise-IPuniversal-forwarder-IPに両方のノードから接続ができることを確認して、ログ転送先が作成されていることを確認してください。

::>cluster log-forwarding show
                                                 Verify  Syslog
Destination Host         Port   Protocol        Server  Facility
------------------------ ------ --------------- ------  --------
172.31.2.69            514    tcp-unencrypted false   user
172.31.29.178          514    tcp-unencrypted false   user

監査ログが Splunk に転送されていることを確認するために、Amazon FSx または ONTAP CLI を使用してボリュームを作成します。

FsxIdxxxxxxxxxxxxxxxxx::> volume create -volume cli_vol -aggregate aggr1 -vserver <vserver_name>
[Job 685] Job succeeded: Successful

次に、AWS CLI を使用してスループット変更の操作を実行してフェイルオーバーを強制します。

aws fsx update-file-system --file-system-id fs-abcdefghij123456 --ontap-configuration ThroughputCapacity=256

Splunk インデックス (ontap_syslogs) を検索して、監査イベントが配信されていることを確認します。Splunk コンソールで「Search and Reporting」 に移動し、受信イベントを検索します。

index="ontap_syslogs" | table _time,_raw | sort -_time

Searching Splunk for log events

図 4: Splunk でログイベントを検索する

以下にスループット変更操作がSuccessとなっているイベントの例を記載します。

2022-03-07T17:56:57+00:00 ip-172-31-16-155.eu-west-1.compute.internal FsxIdXXXXXXXXXXXXXXXXX-02: FsxIdXXXXXXXXXXXXXXXXX-02: 00000002.00007e75 00006ba9 Mon Mar 07 2022 17:56:50 +00:00 [kern_audit:info:4089] 8503e90000000246 :: FsxIdXXXXXXXXXXXXXXXXX:http :: 52.210.44.239:3167 :: FsxIdXXXXXXXXXXXXXXXXX:fsx-control-plane :: POST /api/private/cli/storage/failover/takeover : {"ofnode":" FsxIdXXXXXXXXXXXXXXXXX-02","halt":"true","option":"normal"} :: Success:

NTFS アクセス監査の構成

ファイルアクセス監査ログは、FSx for ONTAP のログ転送フレームワークと統合されていません。アクセス監査イベントは、ファイルシステムのローカルパスに保存する必要があります。

ONTAP CLI を使用して NTFS アクセス監査を設定するには、まずファイルアクセス監査イベントを保存するボリュームを作成し、次に SVM でファイルアクセス監査を有効にします。そして、ボリューム上の NTFS セキュリティスタイルのファイルとディレクトリに対して監査ポリシーを設定します。

ステップ1:Storage Virtual Machine (SVM) の監査を有効にする

  1. アクセス監査ログを格納するボリュームを作成します。
volume create -volume audit -vserver <vserver_name> -aggregate aggr1 -size 10G -state online -security-style mixed -junction-path /audit
  1. vserver 監査構成にて、ログを/auditのパスに送信し、たとえば 5 分ごとにログをローテーションするよう構成してください。監査要件に応じてログのローテーション頻度を減らし、保存のニーズに応じてログを保持することができます。
vserver audit create -vserver <vserver_name> -destination /audit -rotate-limit 1440 -events file-ops,cifs-logon-logoff,cap-staging,file-share,user-account,security-group,authorization-policy-change -format xml -rotate-schedule-minute 0,5,10, 15,20,25,30,35,40,45,50,55 -rotate-size 100MB
  1. vserver の監査構成を有効にします。
vserver audit enable -vserver <vserver name>

ステップ2:ファイル アクセス監査のために NTFS ファイルとフォルダに NTFS SACL(監査ポリシー)を有効にする

  1. NTFS セキュリティスタイルでボリュームを作成します。
volume create -volume ntfs -aggregate aggr1 -size 10G -security-style ntfs -type RW -junction-path /ntfs -vserver <vserver_name>
  1. 作成したボリュームに共有を設定します。
cifs share create -share-name ntfs -path /ntfs -share-properties oplocks,browsable,show-previous-versions -vserver <vserver_name>
  1. NTFS セキュリティ記述子を作成します。この操作を実施するためには、ONTAP CLI の advanced 権限が必要です。
set -privilege advanced
vserver security file-directory ntfs create -ntfs-sd sd1 -vserver <vserver_name> -owner EXAMPLE\Admin
  1. NTFS SACL アクセス制御エントリを NTFS セキュリティ記述子に追加し、成功したアクセス試行と失敗したアクセス試行の 2 つのエントリを作成します。
vserver security file-directory ntfs sacl add -vserver <vserver_name> -ntfs-sd sd1 -access-type failure -account Everyone -rights full-control

vserver security file-directory ntfs sacl add -vserver <vserver_name> -ntfs-sd sd1 -access-type success -account Everyone -rights full-control
  1. SVM の監査ポリシーを作成します。ポリシーは NTFS セキュリティ記述子とファイルおよびフォルダパスとの関連付けを含むさまざまなタスクのコンテナとして機能します。
vserver security file-directory policy create -policy-name policy1 -vserver <vserver_name>
  1. セキュリティポリシーにタスクを追加します。このタスクは、セキュリティ記述子 sd1 内の成功および失敗のアクセス制御エントリを/ntfsファイルとフォルダに関連付けます。
vserver security file-directory policy task add -vserver <vserver_name> -policy-name policy1 -path /ntfs -security-type ntfs -ntfs-mode propagate -ntfs-sd sd1 -index-num 1 -access-control file-directory
  1. 最後に、セキュリティポリシーを/ntfs内の NTFS ファイルとフォルダに適用します。
vserver security file-directory apply -vserver <vserver_name> -policy-name policy1

ファイルアクセス監査イベントがログに記録されていることを確認するために、 SMB を使用してntfs共有にアクセスしていくつかのコンテンツを作成してください。次に、 auditボリュームにアクセスして、アクセスイベントを含む .xml 形式のログファイルを確認します。

File access audit logs in XML

図 5: XML のファイルアクセス監査ログ

UNIX アクセス監査の構成

続いて、UNIX セキュリティスタイルのファイルとフォルダへの NFS アクセスのファイルアクセス監査を構成します。これは、監査アクセス制御エントリ(ACE)を NFSv4.x ACL に追加することで実現します。FSx for ONTAP で NFS イベントを監査するには、NFSv4 を有効にする必要があります。

  1. FSx for ONTAP の該当ファイルシステムで、NFSv4 ACL サポートを有効にします。
vserver nfs modify -vserver <vserver name> -v4.0 enabled -v4.0-acl enabled -v4.1-acl enabled
  1. UNIX セキュリティスタイルでボリュームを作成します。
volume create -volume unix -aggregate aggr1 -size 10G -security-style unix -type RW -junction-path /unix -vserver <vserver_name>
  1. EC2 インスタンスに、/unixボリュームをマウントします。
mkdir /mnt/unix
sudo mount -t nfs <svm-nas-endpoint>:/unix /mnt/unix
cd /mnt/unix
  1. unix フォルダの/mnt/unixに対して、監査フラグを再帰的に追加します。
nfs4_setfacl -R -a U:fdS:EVERYONE@:Cd unix
  1. 該当の FSx for ONTAP ファイルシステムで、SVM 監査を有効にします。前述の NTFS アクセス監査の構成のステップ1の指示に従い ます。手順をすでに実施済みの場合は、次のアクションに進んでください。
  1. UNIX インスタンスから/mnt/unix ィレクトリにいくつかのファイルを作成してください。/auditボリュームをマウントして、/mnt/unixディレクトリに対する UNIX アクセスイベントがログに記録されていることを確認します。
cd /mnt/unix/
sudo sh -c "echo 'Hello World' > file01"
sudo mkdir /mnt/audit
sudo mount -t nfs <svm-nas-endpoint>:/audit /mnt/audit
cd /mnt/audit
grep "file01" audit_svm01_*

Splunk で監査ログとファイルアクセスログを可視化する

このセクションでは、アクセスイベントを監視するダッシュボードを作成します。Splunk は/auditボリュームをマウントして、ファイルの変更を監視し、コンテンツをインデックスに転送します。

ステップ1:Splunk へアクセスイベント取り込み

  1. 検索クエリを簡素化するために、Splunk Add-on for Microsoft Windows をインストールします。Splunk コンソールに移動して「+Find More Apps」を選択し、 「Add-on for Microsoft Windows」を検索します。「Install」を選択 し、Splunk.com のユーザー名とパスワードを入力して、EULA の条件に同意、ログインし、インストールします。

Splunk Add-on for Microsoft Windows

図 6: Splunk Add-on for Microsoft Windows

  1. Splunk Enterprise または UF サーバーに/auditボリューム をマウントします。
sudo mkdir /mnt/audit
sudo mount -t nfs <svm-nas-endpoint>:/audit /mnt/audit
  1. ファイルアクセス監査用に個別の Splunk インデックスを作成します。

    a. 「Settings」を選択し、「Indexes」を選択します 。

    b. 右上にある「New Index」を選択します。

    c. インデックス名を入力します。(例:ontap_access)

    d.その他はデフォルト設定のままとし、「Save」を選択してインデックスを作成します。

    1. /mnt/auditディレクトリ を監視し、イベントをontap_accessインデックスに転送するために、以下内容の conf ファイルを作成します 。<svm_name> を SVM 名に置き換えてください。
/opt/splunk/etc/system/local/inputs.conf

[monitor:///mnt/audit/audit_<svm_name>_D*]
disabled = false
index = ontap_audits
source = XmlWinEventLog:Security
initCrcLength = 1024

これにより、新しくローテーションされたファイルが 5 分ごとにキャプチャされ、audit_<svm_name>_last.xmlログファイルが除外されます。デフォルトでは、Splunk は最初の 256 バイト(先頭)を使用して、以前に確認したファイルであるかどうかを判断し、最後の 256 バイト(末尾)を使用して、最後に確認した後に変更がされているかを確認します。CRC チェック用に、ファイルがローテーションしたときの違いが分かるようにするため、デフォルトのinitCrcLengthを 1024 バイトという高い値でオーバーライドします。

    1. 次に、アクセスイベントを複数の行に分割するprops.confファイルを作成します。
/opt/splunk/etc/system/local/props.conf

[XmlWinEventLog:Security]
SHOULD_LINEMERGE = false
KV_MODE = xml
MUST_BREAK_AFTER = \</Event\>
  1. Splunk コンソール([Setting] > [Server Controls] > [Restart Splunk])、またはサーバー CLI(sudo /$SPLUNK_HOME/bin/splunk restart)を使用して、Splunk サーバーを再起動します。

ステップ2:ダッシュボードの検索と作成

ダッシュボードを作成する前に、イベントが Splunk に配信されていることを確認します。Splunk コンソールに移動し、「Search and Reporting」を選択して、上記のステップ 1.3 で作成したファイルアクセス監査インデックスのontap_accessに配信されたイベントを検索します。

index="ontap_access"

Searching for file access events in Splunk

図 7: Splunk でのファイルアクセスイベントの検索

次に、これらのイベントを表示するダッシュボードを作成します。Splunk コンソールに移動し、左側のアプリリストから「Search and Reporting」を選択します。検索フィールドに次の検索クエリを入力します。

  • 成功と失敗の監査イベントタイムライン
index="ontap_access" | replace "0x8010000000000000" with "Failure", "0x8020000000000000" with Success | timechart count by Keywords
  • 削除数
index="ontap_access" EventCode="4659" OR EventCode="4660" | stats count
  • データにアクセスする個別の SMB ユーザー
index="ontap_access" Source="CIFS" SubjectUserName | spath output=CifsUser path=Event.EventData.Data{6} | stats dc(CifsUser) as CifsUser
  • データにアクセスする個別の UNIX ユーザー
index="ontap_access" Source="NFSv4" SubjectUnix | spath output=UnixUser path=Event.EventData.Data{@Uid} | stats dc(UnixUser) as UnixUser
  • アクセス成功イベント数
index="ontap_access" Keywords=0x8020000000000000 | stats count
  • アクセス失敗イベント数
index="ontap_access" Keywords=0x8010000000000000 | stats count
  • 50以上の一括削除を実行しているユーザー
index="ontap_access" EventCode="4659" OR EventCode="4660" | spath output=SubjectUserName path=Event.EventData.Data{6} | stats count by SubjectUserName | where count &gt; 50
  • イベントを発生させている SMB ユーザーの上位 10 名
index="ontap_access" Source="CIFS" SubjectUserName | spath output=SubjectUserName path=Event.EventData.Data{6} | table SubjectUserName | top limit=10 SubjectUserName
  • イベントを発生させている UNIX ユーザーの上位 10 名
index="ontap_access" Source="NFSv4" SubjectUnix | spath output=SubjectUnix path=Event.EventData.Data{@Uid} | table SubjectUnix | top limit=10 SubjectUnix
  • SMB イベントサマリ
index="ontap_access" Source="CIFS" SubjectUserName | spath output=SubjectUserName path=Event.EventData.Data{6} | spath output=ObjectName path=Event.EventData.Data{10} | table _time,SubjectUserName,ObjectName,Keywords,EventCode | replace "0x8010000000000000" with "Failure", "0x8020000000000000" with Success | sort -_time
  • UNIX イベントサマリ
index="ontap_access" Source="NFSv4" SubjectUnix | spath output=SubjectUnix path=Event.EventData.Data{@Uid} | spath output=ObjectName path=Event.EventData.Data{6} | table _time,SubjectUnix,ObjectName,Keywords,EventCode | replace "0x8010000000000000" with "Failure", "0x8020000000000000" with Success | sort -_time

上記の検索結果の度に「Visualization」タブに移動して設定を変更します。

  • 削除と、個別の SMB、UNIX ユーザー、成功および失敗したアクセスイベントの「Select visualization」から「Single Value」を選択します。
  • イベントを生成する上位 10 名の SMB および UNIX ユーザーの「Pie Chart」を選択します。
  • 50 を超える一括削除を実行しているユーザーの「Bar Chart」を選択します。
  • 成功と失敗の監査イベントタイムラインの「Line Chart」を選択します。

Splunk query visualization

図 8: Splunk クエリの可視化

検索結果ごとで変更した可視化を、ダッシュ​​ボードに追加します。

  1. Save As」ドロップダウンメニューに移動し、「New Dashboard」を選択し、検索結果の「Dashboard Title」 と「Panel Title」を入力して、「Save to Dashboard」 を選択 します。
  2. 最初の検索結果ダッシュボードを作成した後に、次の可視化を同じダッシュボードに追加します。「Save As」を選択し、次に「Existing Dashboard」を選択し、既存のダッシュボード名を選択して Panel Title を入力し、「Save to Dashboard」を選択します。

Creating a dashboard

図 9: ダッシュボードの作成

ダッシュボードにアクセスするには、「Dashboards」に移動し、リストから作成したダッシュボードを選択します。「Edit」ボタンでダッシュボードを編集し、目的のレイアウトに合わせてチャートを移動およびサイズを変更します。アクセスアクティビティを表示するサンプルのダッシュボードを以下に示します。

Sample dashboard for file access events monitoring

図 10: ファイルアクセスイベント監視のサンプルダッシュボード

まとめ

このブログ記事では、 FSx for ONTAP ファイルシステムの監査イベントのキャプチャについて説明しました。また、 SMB や NFS のファイルとフォルダにアクセスした際のキャプチャや、Splunk を使用してダッシュボードでイベントを可視化する方法についても説明しました。

このソリューションは、金融、個人、医療などの機密ファイルデータを AWS に保存する際に、管理ユーザーイベントをログに記録することで、コンプライアンスや規制基準を満たすのに役立ちます。

Splunk は AWS コンピテンシーパートナーです。同社のソフトウェアとクラウドサービスにより、お客様はウェブサイトや、アプリケーション、サーバー、ネットワーク、IoT、モバイルデバイスから機械で生成されたビッグデータを検索、監視、分析、可視化できます。

翻訳はネットアップ合同会社の藤原 善基様、監修はプロフェッショナルサービス本部の葉山が担当しました。

Promise Owolabi

Promise Owolabi

Promise Owolabi は AWS の Senior Storage Specialist であり、彼はクラウドストレージのソリューションに重点分野を置いています。Promise は、お客様がイノベーションを起こし、クラウドへの移行を加速できるよう支援をしています。仕事以外では、家族と過ごしたり、読書をしたり、音楽バンドで遊んだり、写真を撮ったりしています。