Amazon FSx for NetApp ONTAPで拡張子に基づいて書き込みを制限する方法

FSx for ONTAP の FPolicy 機能を用いて、動画などの大容量ファイル制限による容量節約やランサムウェア対策となる、拡張子に基づたファイルの書き込み制限機能を試してみました。
2022.05.30

Amazon FSx for NetApp ONTAP では FPolicy 機能を利用することで、特定の拡張子以外の書き込みを制限することができるので試してみました。

FPolicy とはファイルアクセスの監視と管理に利用されるファイルアクセス通知のフレームワークです。

(参考)FPolicy 解決策の 2 つの要素とは何ですか


特定の拡張子のファイルを制限するユースケースとして次の例があります。

  • 動画などの大容量ファイルを制限して容量を節約
  • ランサムウェア対策

ランサムウェア対策となる理由の補足ですが、ランサムウェアの中には暗号化したファイルの拡張子を特定の拡張子に変更する動作のものがあり、書き込みを許可していない拡張子だった場合に暗号化処理を防止できる可能性があるためです。

(参考)ランサムウエア対策特設サイト


試してみた

動作確認を行った FSx for ONTAP の構成図です。テスト目的のためシングル AZ 構成にしています。

FSx for ONTAP ではストレージ仮想マシン(SVM)とボリュームvol1 を作成している状態です。

::> vserver show
                               Admin      Operational Root
Vserver     Type    Subtype    State      State       Volume     Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
test-fsx-ontap-svm01
            data    default    running    running     test_fsx_  aggr1
                                                      ontap_
                                                      svm01_root

::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
test-fsx-ontap-svm01
          test_fsx_ontap_svm01_root
                       aggr1        online     RW          1GB    972.5MB    0%
test-fsx-ontap-svm01
          vol1         aggr1        online     RW          1GB    972.5MB    0%
2 entries were displayed.


設定の流れ

FPolicy は次の順番で設定します。

  1. (FPolicy 外部エンジンの作成)
  2. FPolicy イベントの作成
  3. FPolicy ポリシーの作成
  4. FPolicy ポリシーのスコープを設定
  5. FPolicy ポリシーの有効化

(参考)FPolicy の設定手順は何ですか

今回設定する拡張子に基づいたファイル書き込み制限のみが要件の場合は、始めの手順の外部 FPolicy エンジンとの作成は必須ではなく、内部のネイティブエンジンを利用することで実現できます。

(参考)FPolicy の設定タイプ

それでは、Amazon Linux 2 の EC2 インスタンスから SVM にアクセスして設定していきます。

$ ssh vsadmin@<SVMの管理IPアドレス>


イベントの作成

イベントでは、FPolicy ポリシーで監視する対象の操作を定義します。今回の例では create, open, rename の 3 つを指定しています。

::> vserver fpolicy policy event create -event-name test-event -file-operations create,open,rename -protocol nfsv4

::> vserver fpolicy policy event show -event-name test-event

                              Event: test-event
                           Protocol: nfsv4
                    File Operations: create, open, rename
                            Filters: -
Send Volume Operation Notifications: false

パラメータで指定できる値は次のドキュメントに記載があります。

Plan the FPolicy event configuration overview


ポリシーの作成

ポリシーの作成では、監視する必要がある複数のイベントを関連付けます。今回は先ほど作成した 1 つのイベントの関連付けのみです。また、FPolicy エンジンは内部のネイティブエンジンである native を指定します。

::> vserver fpolicy policy create -policy-name test-policy -events test-event -engine native -is-mandatory true -allow-privileged-access no -is-passthrough-read-enabled false

::> vserver fpolicy policy show -policy-name test-policy

                         Policy: test-policy
              Events to Monitor: test-event
                 FPolicy Engine: native
Is Mandatory Screening Required: true
        Allow Privileged Access: no
User Name for Privileged Access: -
    Is Passthrough Read Enabled: false

イベント同様に次のドキュメントにパラメータの説明があります。

Plan the FPolicy policy configuration overview


スコープの設定

スコープの設定では、ポリシーで管理する必要があるボリュームや拡張子を指定します。ボリュームvol1.txt.md 以外の拡張子は書き込みできないように設定してみます。file-extensions-to-includeオプションで全ての拡張子を対象として、file-extensions-to-excludeオプションで除外したい拡張子を指定しています。

::> vserver fpolicy policy scope create -policy-name test-policy -volumes-to-include vol1 -file-extensions-to-include * -file-extensions-to-exclude txt,md

::> vserver fpolicy policy scope show -policy-name test-policy

                    Policy: test-policy
         Shares to Include: -
         Shares to Exclude: -
        Volumes to Include: vol1
        Volumes to Exclude: -
Export Policies to Include: -
Export Policies to Exclude: -
File Extensions to Include: *
File Extensions to Exclude: txt, md

今回は file-extensions-to-exclude オプションを活用して除外設定した拡張子以外のファイルの書き込みを制限しましたが、file-extensions-to-include オプションを用いて指定した拡張子のみの書き込みを制限することもできます。次は mp4 のみ書き込みを禁止する例です。

::> vserver fpolicy policy scope create -policy-name test-policy -volumes-to-include vol1 -file-extensions-to-include mp4

::> vserver fpolicy policy scope show -policy-name test-policy
                    Policy: test-policy
         Shares to Include: -
         Shares to Exclude: -
        Volumes to Include: vol1
        Volumes to Exclude: -
Export Policies to Include: -
Export Policies to Exclude: -
File Extensions to Include: mp4
File Extensions to Exclude: -

スコープのパラメータを説明したドキュメントです。

Plan the FPolicy scope configuration overview


ポリシーの有効化

最後に、ポリシーを有効化します。有効化後に status が on になっていることを確認できました。

::> vserver fpolicy enable -policy-name test-policy -sequence-number 1

::> vserver fpolicy show
                                      Sequence
Vserver       Policy Name               Number  Status   Engine
------------- ----------------------- --------  -------- ---------
test-fsx-ontap-svm01                         1  on       native
              test-policy


動作確認

Amazon Linux 2 からスコープで指定したボリュームをマウントします。この際に NFS のバージョンは4.1 ではなく4.0 にする必要があります。バージョン4.1 は FPolicy が現状では未対応のためです。

Cloud Secure: Simulating an Attack

$ mkdir /home/ec2-user/fsx
$ sudo mount -t nfs -o vers=4.0 10.0.10.227:/vol1 /home/ec2-user/fsx
$ sudo chown ec2-user:ec2-user /home/ec2-user/fsx

始めに制限されていない拡張子である .txt.md は作成できました。

$ touch file.txt
$ touch file.md
$ ls
file.md  file.txt

次に file.csv を作成しようとしたところ、意図した通り拒否されました。

$ touch file.csv
touch: `file.csv' に touch できません: Permission denied

拡張子の種類に応じて、ファイルの書き込みを制限できることを確認できました。


さいごに

ランサムウェア対策の 1 つとしても利用できる拡張子に基づいたファイル書き込み制限を試してみました。この機能だけですべてのランサムウェアを防ぐことができるわけではありませんが、次のブログでも紹介されている CloudSecure と組み合わせて利用することで感染リスクを減らすことが期待できます。


参考資料

FPolicy: Native File Blocking - NetApp Knowledge Base