さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その3）

# はじめに
この記事は、NetApp のストレージ OS である ONTAP の機能を活用して、自前のクラウドストレージを構築する為のアイディアの紹介と構築メモです。

↓シリーズの過去記事はこちら↓
[「さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その1）」](https://qiita.com/takuo_yamazaki/items/0e8aff7549fc54a156bd)
[「さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その2）」](https://qiita.com/takuo_yamazaki/items/821acb308594d7df6a37)


[前回記事](https://qiita.com/takuo_yamazaki/items/821acb308594d7df6a37)では、企業等でよくある共有ファイルサーバー的な使い方を維持しつつ、Nextcloud からも参照できるような方法を実践してみました。
今回は一歩踏み込み、ファイルサーバー上の個人用フォルダー (ホームディレクトリ) と Nextcloud との共存をしてみます。
さらに、昨今よくあるランサムウェア対策についても、さらっとですが紹介します。

# 用意するもの
## Nextcloud + FSxN
前々回、前回で紹介した構成と同等の環境が必要です。

## AD サーバー
前回同様、AD サーバーが必要です。
サーバーの設置場所はどこでも OK です。
Nextcloud サーバー及びFSxN の管理用 IP アドレスとの間で疎通出来る必要があります。

## SSH 接続環境
FSxN の管理 IP アドレスに SSH アクセスができる必要があります。
Nextcloud のサーバー等でも良いですが、踏み台サーバー等として外部から操作出来る環境が必要です。

# Nextcloud 個人用フォルダーの管理方法
Nextcloud では、初期設定で決めたデータ用ディレクトリ直下に、ユーザー毎のディレクトリが自動的に生成されます。

```
$ sudo tree -d -L 1  /mnt/nextcloud_data
/mnt/nextcloud_data/
├── appdata_ockm5hl7qje1
├── cloudadmin
├── user001
├── user002
     :
└── userxxx
```
これらディレクトリ及びファイルは Web サーバーのコンテンツ扱いなので、owner:group も Web サーバーのプロセスのユーザーになります。
このディレクトリを直接クライアントに見せたりアクセスさせるのは管理上・セキュリティ上、難ありです。

そこで、個人のデータは FSxN に置いて、Nextcloud からは外部ストレージとして利用できるようにしつつ、PC からの利用もできるような共存環境にしようというのが今回の趣旨です。

## FSxN (ONTAP) ホームディレクトリ機能
FSxN に搭載されているストレージ専用 OS「ONTAP」には、ホームディレクトリ用途に特化した設定があります。

この機能を使うと、こんなメリットがあります。
* ユーザー毎に専用の共有名が動的に作られるので、ユーザー毎の個別設定は不要
※ただし、フォルダーの実体は外部から作ってあげる必要あり。後述。
* 他ユーザーのフォルダーは見えないので、クライアント側はフォルダー構造読み込みが少なく表示が速い
* ストレージ側もフォルダー構造読み込みの要求が減るので、処理が重くならない
* 複数のボリュームに分散して、バックアップのポリシーを変えたりも出来る
（偉い人は高頻度、とか）

クライアントからの見え方としては
* 共有名＝ユーザー名等、ユニークなものにしたい
* 共有名＝「\\SERVER\HOME」で統一したい

と2つのパターンがあります。

後者のパターンのようにで全ユーザーで統一しておけば、 Nextcloud から参照するための設定も一本化できるので楽になります。

## FSxN の設定
SSH を使ってコマンドで実施します。

ホームディレクトリを配置するためのボリュームを、AD 連携済みのストレージ仮想マシンに作成します。
今回はこれをコマンドで実施します。
```
::> volume create -vserver svm1 -volume user_data -aggregate aggr1 -size 100g -security-style ntfs -language utf8mb4
::> volume mount -vserver svm1 -volume user_data -junction-path /user_data
```

作成したボリュームを、管理用として共有します。
管理用途なので、隠し共有名を付与します。
```
::> vserver cifs share create -vserver svm1 -share-name user_data$ -path /user_data
```

ホームディレクトリ共有を作成します。
Warning と質問が表示されますが、y を入力します。
```
::> vserver cifs home-directory search-path add -path /user_data -vserver svm1
::> vserver cifs share create -share-name home -path %w -share-properties oplocks,browsable,changenotify,show-previous-versions,homedirectory

Warning: The home directory share's name "home" does not contain a substitution value (%u or %w) to uniquely identify a
         home directory share. If multiple users from the same client access their home directories at the same time,
         unprotected access to each other's files can occur. This might cause unexpected "access denied" errors on
         those files, and data corruption within those files.
         Note: multiple users from a single client is most likely in a Citrix or Windows Terminal Services environment.
Do you want to continue? {y|n}: y
```

ストレージ側の設定は以上です。

## [TIPS] ホームディレクトリ用のフォルダーを一括作成
先の FSxN の設定だけでは、フォルダーの実体は作成されません。
FSxN 側は、フォルダーの位置を探して、動的共有してくれるだけです。

ユーザー分のフォルダーを手動で作るのは大変ですので、AD の管理機能をつかって一括作成する TIPS を紹介します。

AD サーバーで「Active Directory ユーザーとコンピューター」を起動します。
ユーザーを右クリックしてプロパティを開き、「プロファイル」タブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2815139/5f3cf19e-1d1d-1b5a-26c6-451c49966350.png)

「ホームフォルダー」の欄の「接続ドライブ」を選択し、任意のドライブレターを決めます。
パスとして
\\SVM1\user_data$\%USERNAME%
を入力します。
適用または OK を押すと、変数「%USERNAME%」がユーザー名に置き換えられます。

この操作で、「user_data$」という共有、すなわち user_data ボリューム直下に、ユーザー名のついたフォルダーを作成します。

この操作は複数ユーザーを選択して一気にできますので、多数のユーザーがある環境では時間短縮になります。
手順は確認していませんが、コマンドでも同様の事は出来ると思われます。

## Windows PC からの接続確認
作成したユーザーで Windows にログオンしてみると、ネットワーク上に見えるファイルサーバー（ストレージ仮想マシン）配下には home と pub という2つの共有だけが見えます。

別ユーザーでログオンすると、同様にhome と pub という2つの共有だけが見えます。

共有名は全ユーザー同じですが、home は各ユーザー毎に専用フォルダーなので、他ユーザーが作ったファイルは当然見えません。

## Nextcloud 設定
管理ユーザーで Nextdloud の Web にアクセスします。

### 外部ストレージの設定
前回も実施しましたが、Nextcloud の管理者で外部ストレージの設定で以下のように home 共有をマウントする設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2815139/6595a6b3-68ab-f063-cb26-9c9999edcab7.png)

どのユーザーも一律「home」というフォルダーで自分の領域にアクセスできるので、設定としては全てのユーザー向けに共通で済みます。

## Nextcloud で接続確認
Nextcloud に AD ドメインユーザーでログインします。

Windows と同じように、home と pub というフォルダーが見えるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2815139/3465266a-0f67-f8f5-aa9f-421eaf45897f.png)

ポイントは、

外部ストレージ (SMB/CIFS) へのアクセスは、AD のユーザーの権限でアクセスが行われる

という点です。

AD ドメインの user01 というユーザーで Nextcloud にログインしていれば、外部ストレージに作成したファイルの所有者がちゃんと user01 であることが Windows 側からも把握できます。

# ランサムウェア対策をしよう
Nextcloud を単体で使う場合、Webサーバーユーザーでローカルストレージや NFS へのアクセスをする為、監査という点ではユーザー個別の挙動の把握が難しいと思います。
データアクセスを、AD 認証された SMB アクセスに委ねることで、ユーザー個別のアクセスを把握したり振る舞いを把握出来るようになり、こうした外部サービスとの連携も容易になります。

ONTAP を搭載したストレージ (FSxN も含みます) は、「Cloud Secure」という SaaS と連携することで、ランサムウェア対策をすることができます。

ユーザーの振る舞いからランサムウェアの疑いのあるアクセスを検知し、その時点のバックアップを瞬時に作成できます。
被害の把握や復旧の手助けにも非常に有用です。

設定については、下記の記事が参考になるかと思います。
[https://qiita.com/buriki/items/990e346e8198a8dfa1e3](https://qiita.com/buriki/items/990e346e8198a8dfa1e3)

# おわりに
FSxN + Nextcloud シリーズも第3弾となりましたが、次回の第4弾で一応完結予定です。
次回は、オンプレxクラウドのハイブリッド的な使い方を、ストレージ OS ONTAP の機能を活用して実装してみたいと思います。