はじめに
こんにちは!社会人一年目?のタレカツです!
今回はOSSでオンラインのストレージ環境を構築できるNextcloudと、S3の連携を行いました。普段は自宅のサーバでNextcloudを動かしているのですが、今回はクラウド上のEC2上で動作させています。一度Jawsの栃木支部でLTさせていただいたのですが、その時にシステムの説明はある程度省略したので、連携の設定について書きたいと思います。
Nextcloudとは
OSSのオンラインのクラウドストレージで、Webブラウザや専用のアプリなどのインターフェースを提供します。オンプレやクラウド上に構築可能です。今回はNextcloudの構築の際の説明はしませんが、今回はAWS上のEC2のUbuntu22.04上で構築しています。
nextcloudとは
nextcloud installについて
とりあえずパラメータなど意識せず構築したいときは、以下のサイトを参考にすることが多いです
システム構成
システム構成は以下のものになっています。EC2上で構築したNextcloudから外部ストレージと呼ばれる機能を用いて、S3を外部ストレージを対象として設定を行っています
設定手順(S3との連携)
以下の手順で作業を行いました。
- AWS側の設定(S3やIAMユーザの作成)
- Nextcloud側の外部ストレージの設定
- 実際の使用画面
AWS側の設定(S3やIAMユーザの作成)
S3の作成
S3は汎用バケットから、デフォルトの設定で作成しています。特にパブリックアクセスなど設定せずに作成しました。
IAMユーザの作成とpolicyの作成
Nextcloudの外部ストレージ連携において、IAMユーザのアクセスキーを使用しなくても設定は可能ですが、今回はユーザのアクセスキーを用いて連携を行いました。オンプレサーバだとこの設定を使用するべきですが、今回はEC2上で動いているのでアクセスキーを使わず、EC2などにロールなどを設定して制御もできるとは思います(少しうる覚えなのですが、前回のLTの際は、こちらを採用していた気がします)。
今回作成したユーザ
ユーザにアタッチしたポリシー
Actionの設定部分でワイルドカードを使ってますが、いらない権限もあるので注意してください。
Nextcloud側の外部ストレージの設定
Nextcloud側での設定はWebブラウザ上から行いました。今回はEC2上で構築したNextcloudを構築しているので、セキュリティグループなどの設定は行なっていることを前提としています。
以下がNextcloudログイン画面になります。この際にNextcloud上で登録された、管理者のユーザを使用してログインすることが必要になります。
ログインができたら右上のユーザアイコンから、アプリを選択してください。
ログイン後画面
アプリ設定から無効なアプリを選択して、External strage supportを有効にするを押すと、画面から表示されなくなりアクティブなアプリの画面に表示されます。
次に管理者設定を開き、右側で外部ストレージを選択します。この時に管理者の個人設定の外部ストレージの部分もあるので、気をつけてください。フォルダ名はNextcloudのユーザに対する設定名なので自由に設定できます。外部ストレージではAmazon S3を選択してください。
今回S3の設定に必要な項目を入れた後の画面が以下になります。
- 認証なしかアクセスキーを選択
- バケット名の入力
- リージョンの入力
- IAMユーザのアクセスキーとシークレットアクセスキーの入力
- Nextclouのユーザで外部ストレージを使用できるユーザの選択(今回は管理者ユーザのみ)
その他ホスト名やポートについてですが、こちらはS3互換のオブジェクトストレージを選択する際に設定します。
実際の使用画面
実際にファイル操作の画面から、ファイルのアップロードとS3側でファイルの確認をした画面になります。
Nextcloud側の外部ストレージの仕組み
Nextcloudは主にphpで書かれており、おそらく以下の部分で外部ストレージの処理が記述されています。私は余りphpが詳しくないので、確認したい方がいましたら、githubのページなどで確認してください。
apps/files_external/lib/Lib/Storage/AmazonS3.php
lib/private/Files/ObjectStore/S3.php
終わりに
今回はS3との連携を行いましたが、外部ストレージでの連携でSMBがあるので、Amazon FSx for Windows File Serverとの連携と、こちらは外部ストレージ連携はないですが、EFSを用いてEC2上にマウントしてストレージとして使用することをやってみようと思います。