FSx for Windows File Serverの監査ログをKinesis Data Firehose経由でS3バケットに保存してみた

CloudWatch Logsを間にかませなくても、Kinesis Data Firehoseに送信出来ますよ
2021.06.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

FSx for Windows File Serverで監査ログが取得可能になりました!!

こんにちは のんピです。

皆さんは、FSx for Windows File Serverで監査ログを取得したいなと思ったことはありますか? ありますよね? 私は かなり あります。

特にそう感じた場面は、既存のファイルサーバーを FSx for Windows File Serverに移行を検討する場面です。

FSx for Windows File Serverに移行を検討するも、FSx for Windows File Serverでは監査ログが取れないことを危惧されるパターンが多くありました。

今まで出来ていたことが出来なくなるというのは、難しい判断になりますよね。

しかし、それがなんと、Amazon FSx for Windows File Server now supports file access auditing の通り、FSx for Windows File Serverで監査ログが取得可能になりました!!

これはアツいです。このアツさはアップデートを受信して、1分でツイートした私のテンションからお察しください。

加えて、あまりのアツさで以下記事と早速ネタが被ってしまいました。

同じ内容の投稿をしても面白くないので、監査ログをKinesis Data Firehose経由で、S3バケットに保存するように設定してみました。

検証環境

検証を行う環境は以下の通りです。

FSx for Windows File Server を稼働させる定番の構成ですね。

ログの送信先は、CloudWatch Logsか、Kinesis Data Firehoseかのどちらかを選択可能ですが、今回は最初に説明した通り、Kinesis Data Firehoseを選択して、最終的にS3バケットに出力するようにしてみます。

やってみた

監査ログの送信先の変更

最初の構築の段階でCloudWatch Logsに送信するようにしていたので、送信先をKinesis Data Firehoseに変更します。

送信先を変更する際は、管理タブから、管理をクリックします。

続いて送信先をKinesis Data Firehoseに変更します。また、送信先の配信ストリームは新規に作成したいので、新しく作成をクリックします。

そうすると、別タブでKinesis Data Firehoseの配信ストリームのウィザードが開きます。

まずは配信ストリームの名前と、送信元、サーバーサイドの暗号化の設定です。
ここでは、配信ストリームの名前のみデフォルトから変更します。配信ストリームの名前は、以下公式ドキュメントの通り、プレフィックスをaws-fsx-にします。

The name of the Kinesis Data Firehose delivery stream must begin with the aws-fsx- prefix. If you don't have an existing Kinesis Data Firehose delivery stream, you can create one when you create or update your file system at the console.

File access auditing - Audit event log destinations

次はレコードの処理設定です。今回はレコードに対して何も処理を行わないので、デフォルトのままにします。

次に送信先の設定です。今回はS3バケットを送信先にするので、Amazon S3を選択します。また、S3バケットは新規に作成したいので、Create newをクリックします。

モーダルウィンドウが開くので、S3バケットの名前とリージョンを指定して、Create S3 bucketをクリックします。

S3バケットに出力する際、プレフィックスを指定できますが、今回は指定せずに次に行きます。

最後に、諸々の設定です。デフォルトの設定から変更した箇所は、データの圧縮と、暗号化の設定についてです。それ以外はデフォルトで、Nextをクリックします。

設定の確認を行います。問題がなければ、Create delivery streamをクリックして、配信ストリームを作成します。

しばらくすると、配信ストリームのステータスが、Activeに変わります。

それでは、改めてFsx for Windows File Serverの画面に戻って、設定変更を行います。
先ほど作成した配信ストリームを選択して、保存をクリックします。

更新のステータスは、更新タブから確認出来ます。 監査ログの送信先変更は、メンテナンスウィンドウに関係なく、即時で実行されるようです。

設定が完了すると、監査イベントログの送信先が作成した配信ストリームになっていることが確認できます。

監査ログの確認

それでは、監査ログの確認を行います。

ドメインに参加しているEC2インスタンスから操作を行います。
まず、FSx for Windows File Serverの共有フォルダをネットワークドライブとしてマウントします。マウントは、net useコマンドで行いました。

続いて、ファイルとフォルダーを操作した際の監査ログを出力するため、監査アクセスの設定を行います。
監査アクセス設定を行わない場合、ファイルやフォルダーに対する監査ログは出力されません。 共有フォルダ全体に、監査アクセスの設定を行うため、マウントしたZドライブ上で、右クリックをして、[プロパティ] - [セキュリティ] - [詳細] - [監査]タブを選択し、追加をクリックします。

まずは監査対象となるオブジェクトを選択する必要があるため、プリンシパルの選択をクリックします。

今回はどんなオブジェクトからでの操作も監査対象としたいため、Everyoneを選択しました。

続いて、監査対象の操作内容を設定します。
監査の種類は、操作の成功・失敗問わず、ログに記録したいため、すべてを選択しました。また、監査対象なる操作一覧を確認するため、高度なアクセス許可をクリックします。

今回は全ての操作を監査対象としたいため、フルコントロールにチェックを入れます。全ての操作内容にチェックが入ったことを確認して、OKをクリックします。

監査エントリに先ほど作成したエントリが追加されたことを確認して、適用をクリックします。

監査ログの設定準備が完了したので、実際に共有フォルダ上で操作をしていきます。
行った操作は以下の通りです。

  1. 共有フォルダ上に、text-folderを作成
  2. text-folder配下に、test-fileというテキストファイルを作成
  3. text-fileを開き、適当な文字列を入力
  4. text-fileを削除

S3バケットを確認すると、どうやら正常にログが出力されているようです。

それでは、監査ログを確認してみます。

監査ログはxml形式で出力されます。どのような操作がされたログなのかを判断する際は、EventIDと、AccessListを照らし合わせながら行います。

EventIDと、AccessListの対応は以下の通りです。

EventID

EventID 操作内容
4656 オブジェクトに対するハンドル要求
4659 ファイルを削除要求
4660 オブジェクトの削除
4663 オブジェクトに対して何かしらの操作
詳細はAccessListを参照
4670 オブジェクトのアクセス許可変更
5140 ファイル共有へのアクセス
5144 ファイル共有の削除
5145 ファイル共有レベルでのアクセス拒否

AccessList

AccessListの値 捜査内容
%%4416 フォルダーの一覧/データの読み取り
%%4417 ファイルの作成/データの書き込み
%%4418 フォルダーの作成/データの追加
%%4419 拡張属性の読み取り
%%4420 拡張属性の書き込み
%%4421 フォルダーのスキャン/ファイルの実行
%%4422 サブフォルダーとファイルの削除
%%4423 属性の読み取り
%%4424 属性の書き込み
%%1537 削除
%%1538 アクセス許可の読み取り
%%1539 アクセス許可の変更
%%1540 所有権の取得
%%1541 オブジェクトの同期
%%1542 SACL の取得

上述した操作に対応した監査ログは以下の通りです。なお、ログは対象操作のみを抜粋しています。実際のログはフォルダー・ファイルの操作をする度に、アクセス許可の読み取りや、属性の読み取りについても行っているため、かなりのボリュームになっています。

1. 共有フォルダ上に、text-folderを作成 のログ

<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
	<System>
		<Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/>
		<EventID>4663</EventID>
		<Version>1</Version>
		<Level>0</Level>
		<Task>12800</Task>
		<Opcode>0</Opcode>
		<Keywords>0x8020000000000000</Keywords>
		<TimeCreated SystemTime='2021-06-09T01:56:08.228201400Z'/>
		<EventRecordID>287143</EventRecordID>
		<Correlation/>
		<Execution ProcessID='4' ThreadID='184'/>
		<Channel>Security</Channel>
		<Computer>amznfsxa67gtfky.corp.non-97.net</Computer>
		<Security/>
	</System>
	<EventData>
		<Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data>
		<Data Name='SubjectUserName'>Admin</Data>
		<Data Name='SubjectDomainName'>corp</Data>
		<Data Name='SubjectLogonId'>0xa6bf97</Data>
		<Data Name='ObjectServer'>Security</Data>
		<Data Name='ObjectType'>File</Data>
		<Data Name='ObjectName'>\Device\HarddiskVolume13\share</Data>
		<Data Name='HandleId'>0x132c</Data>
		<Data Name='AccessList'>%%4418
		</Data>
		<Data Name='AccessMask'>0x4</Data>
		<Data Name='ProcessId'>0x4</Data>
		<Data Name='ProcessName'></Data>
		<Data Name='ResourceAttributes'>S:PAI</Data>
	</EventData>
</Event>

2. text-folder配下に、test-fileというテキストファイルを作成 のログ

<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
	<System>
		<Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/>
		<EventID>4663</EventID>
		<Version>1</Version>
		<Level>0</Level>
		<Task>12800</Task>
		<Opcode>0</Opcode>
		<Keywords>0x8020000000000000</Keywords>
		<TimeCreated SystemTime='2021-06-09T01:56:14.509183100Z'/>
		<EventRecordID>287150</EventRecordID>
		<Correlation/>
		<Execution ProcessID='4' ThreadID='6912'/>
		<Channel>Security</Channel>
		<Computer>amznfsxa67gtfky.corp.non-97.net</Computer>
		<Security/>
	</System>
	<EventData>
		<Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data>
		<Data Name='SubjectUserName'>Admin</Data>
		<Data Name='SubjectDomainName'>corp</Data>
		<Data Name='SubjectLogonId'>0xa6bf97</Data>
		<Data Name='ObjectServer'>Security</Data>
		<Data Name='ObjectType'>File</Data>
		<Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\新しいテキスト ドキュメント.txt</Data>
		<Data Name='HandleId'>0x138c</Data>
		<Data Name='AccessList'>%%4417
		</Data>
		<Data Name='AccessMask'>0x2</Data>
		<Data Name='ProcessId'>0x4</Data>
		<Data Name='ProcessName'></Data>
		<Data Name='ResourceAttributes'>S:AI</Data>
	</EventData>
</Event>

3. text-fileを開き、適当な文字列を入力 のログ

<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
	<System>
		<Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/>
		<EventID>4663</EventID>
		<Version>1</Version>
		<Level>0</Level>
		<Task>12800</Task>
		<Opcode>0</Opcode>
		<Keywords>0x8020000000000000</Keywords>
		<TimeCreated SystemTime='2021-06-09T01:56:45.308483800Z'/>
		<EventRecordID>287164</EventRecordID>
		<Correlation/>
		<Execution ProcessID='4' ThreadID='1720'/>
		<Channel>Security</Channel>
		<Computer>amznfsxa67gtfky.corp.non-97.net</Computer>
		<Security/>
	</System>
	<EventData>
		<Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data>
		<Data Name='SubjectUserName'>Admin</Data>
		<Data Name='SubjectDomainName'>corp</Data>
		<Data Name='SubjectLogonId'>0xa6bf97</Data>
		<Data Name='ObjectServer'>Security</Data>
		<Data Name='ObjectType'>File</Data>
		<Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\test-file.txt</Data>
		<Data Name='HandleId'>0x12bc</Data>
		<Data Name='AccessList'>%%4417
		</Data>
		<Data Name='AccessMask'>0x2</Data>
		<Data Name='ProcessId'>0x4</Data>
		<Data Name='ProcessName'></Data>
		<Data Name='ResourceAttributes'>S:AI</Data>
	</EventData>
</Event>

4. text-fileを削除 のログ

<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
	<System>
		<Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/>
		<EventID>4659</EventID>
		<Version>0</Version>
		<Level>0</Level>
		<Task>12800</Task>
		<Opcode>0</Opcode>
		<Keywords>0x8020000000000000</Keywords>
		<TimeCreated SystemTime='2021-06-09T01:58:00.304083200Z'/>
		<EventRecordID>287180</EventRecordID>
		<Correlation/>
		<Execution ProcessID='4' ThreadID='1720'/>
		<Channel>Security</Channel>
		<Computer>amznfsxa67gtfky.corp.non-97.net</Computer>
		<Security/>
	</System>
	<EventData>
		<Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data>
		<Data Name='SubjectUserName'>Admin</Data>
		<Data Name='SubjectDomainName'>corp</Data>
		<Data Name='SubjectLogonId'>0xa6bf97</Data>
		<Data Name='ObjectServer'>Security</Data>
		<Data Name='ObjectType'>File</Data>
		<Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\test-file.txt</Data>
		<Data Name='HandleId'>0x0</Data>
		<Data Name='TransactionId'>{00000000-0000-0000-0000-000000000000}</Data>
		<Data Name='AccessList'>%%1537 %%4423
		</Data>
		<Data Name='AccessMask'>0x10080</Data>
		<Data Name='PrivilegeList'>-</Data>
		<Data Name='ProcessId'>0x4</Data>
	</EventData>
</Event>

大量のログ出力が予想される場合は、S3バケットに保存した方が良いかも

Kinesis Data Firehoseを使ってスムーズにS3バケットに監査ログを出力することが出来ました。

ファイルサーバーの監査ログは、監査したい操作内容、監査対象のオブジェクトの数によって、大量のログが出力されることが予想されます。
そのような予想ができる場合は、Kinesis Data Firehoseを使用して、S3バケットにログを保存するようにすれば、ログ保存の課金を節約することが出来ると考えます。

今まで、「FSx for Windows File Serverに移行したいけど、監査ログが取れないと嫌だなぁ」と思っていた方は多くいらっしゃったのではないでしょうか。
今回のアップデートで、AWSへのファイルサーバーの移行のハードルがまた一段下がったと思います。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!